谁说oracle不可以的?
oracle :alter table命令
ALTER TABLE (表名) ADD (列名 数据类型);
ALTER TABLE (表名) MODIFY (列名 数据类型);
ALTER TABLE (表名) RENAME COLUMN (当前列名) TO (新列名);
ALTER TABLE (表名) DROP COLUMN (列名);
ALTER TABLE (当前表名) RENAME TO (新表名);
然后创建序列插入就可以了,或者直接update 表名 set 新增列名=rownum
圆珠笔是如何发明的:改变问题本身的艺术
Hornbill Literary Essay:在十九世纪三十年代的欧洲大陆,一种方便,价廉的圆珠笔开始在书记员,银行职员甚至是富商中流行起来。制笔工厂开始大量的生产圆珠笔。不久却发现圆珠笔市场严重萎缩。原因是圆珠笔前端的钢珠在长时间的书写后,因摩擦而变小继而脱落导致笔筒内的油泄露出来。弄的满纸油啧,给书写工作带来了极大的不便。人们开始厌烦圆珠笔,从而不在用它了。
一些科学家和工厂的设计师们开始为了改变“笔筒漏油”这种状况进行了大量的工作。其中一个科学家做了大量的实验。他实验了上千种不同的材料来做笔 前端的哪个“圆珠”,以求找到寿命最长的“圆珠”。但结果却不很理想。 这时一个叫马塞尔 比希的人却很好的将圆珠笔做了改善,解决了“漏油”的问 题。他的成功是得益于他的一个想法。“既然不能将圆珠笔的寿命很好的延长,那为什么不主动的控制圆珠笔的寿命呢?他所做的工作只是在实验中找到一颗“钢珠”所能完成书写的“最大用油量”。然后每支笔所装的”“油”都不超过这个“最大用油量”。 这样,方便,价廉又“卫生”的圆珠笔有成了人们最喜爱的书写工具之一。
如何解决复杂的问题:
1 寻找金刚钻:比如能有更长寿命的圆珠笔头“圆珠”:但这往往是目前大部分公司缺乏的核心技术;
2 改变问题本身,将大问题分解成已有成熟解决方案的小问题;
我经常被问到一个问题就是如何优化MySQL数据/Lucene全文索引的速度:
其实,如果一个MySQL记录数量在10万以上,如果已经做了索引优化,那么应用速度也就没有什么潜力可挖了,唯一能作的就是将最经常被访问的数据缓存起来:将应用做成快/慢表机制。让用户很少访问大量的旧数据放在一个慢表里。将用户经常访问的新数据放在一个高速的快表(只有数百数千条记录)里:可以是一个限制数量的小数据库,可以是更简单的非数据结构(DBM/Hash/纯文本)来快速存取。
类似的Lucene全文索引也有类似问题:我发现索引的量超过500M以后,速度开始有用户能感受到的速度下降,唯一能做的就是控制数据量:将索引分布成多个,并尽可能利用内存FS做将索引文件缓存到内存里。
千万不要小看硬件对于产品的影响,开发人员脑子里也要常想着“摩尔定律”。内存数据在5年前可能还是一个奢侈的想法,但是随着内存成本的下降,很多原先复杂的问题都可以在内存中实现了使得速度大大提高。目前的大型搜索引擎就是分布式集群技术/内存数据库技术的集中体现。过2年闪存很有可能会接近于硬盘的成本,这又是一个变革的机遇。
另外开发人员考虑问题的一种惯性思维就是“关系化数据库”思维:
数据库思维面向的是“精确”返回结果,但处理一个面向最终用户的百万级记录应用的时候,如果用户对于返回结果数量是10234还是10200已经不关心了,重要的就是将最好的TOP 10条结果以最快的速度返回给用户。
序列化是一个成本很高的事情,尤其是使用数据库,其实对于应用来说:能不用Oracle的就不用,可以用MySQL;能不用MySQL的就不用,用SQLite;能不用数据库的就不用数据库,用DBM/Hash,能不用DBM的就尽量不用DBM,用纯文本;能不序列化的就尽量不序列化:用内存。
如果你有一把好锤子而且很使用得很熟练了,那就尽可能将问题都变成钉子。这是一个很有用的思路:对不对还要看能够解决的问题和解决问题的成本。
------------------------------------------------
圆珠笔的制造要通过机器的帮助
先要制造好笔头,然后的就好做了笔头最复杂,要用精细的机器制作出圆的珠子,然后做一个正好适合那个珠子的东西,将珠子按进去,再在后面灌上墨水和一种油,就可以了但这一切都要通过机器来完成的!
序列是一数据库对象,利用它可生成唯一的整数。一般使用序列自动地生成主码值。一个序列的值是由特殊的Oracle程序自动生成,因此序列避免了在应用层实现序列而引起的性能瓶颈。
Oracle序列允许同时生成多个序列号,而每一个序列号是唯一的。当一个序列号生成时,序列是递增,独立于事务的提交或回滚。允许设计缺省序列,不需指定任何子句。该序列为上升序列,由1开始,增量为1,没有上限。
具体步骤
1建立序列命令
CREATE SEQUENCE [user]sequence_name
[increment by n]
[start with n]
[maxvalue n | nomaxvalue]
[minvalue n | nominvalue]
INCREMENT BY: 指定序列号之间的间隔,该值可为正的或负的整数,但不可为0。序列为升序。忽略该子句时,缺省值为1。
START WITH:指定生成的第一个序列号。在升序时,序列可从比最小值大的值开始,缺省值为序列的最小值。对于降序,序列可由比最大值小的值开始,缺省值为序列的最大值。
MAXVALUE:指定序列可生成的最大值。
NOMAXVALUE:为升序指定最大值为1027,为降序指定最大值为-1。
MINVALUE:指定序列的最小值。
NOMINVALUE:为升序指定最小值为1。为降序指定最小值为-1026。
2更改序列命令
ALTERSEQUENCE [user]sequence_name
[INCREMENT BY n]
[MAXVALUE n| NOMAXVALUE ]
[MINVALUE n | NOMINVALUE];
修改序列可以:
修改未来序列值的增量。
设置或撤消最小值或最大值。
改变缓冲序列的数目。
指定序列号是否是有序。
删除序列命令
DROP SEQUENCE [user]sequence_name;
从数据库中删除一序列。
创建一个序列号的语句:
中国网管联盟bitsCNcom
CREATE SEQUENCE EXAM_NO_SEQ
START WITH 1484
MAXVALUE 9999999999
MINVALUE 1
CACHE 20
NOORDER;
PB中取序列号的用法:
string v_exam_no
SELECT exam_no_seqnextval INTO :v_exam_no FROM dual
using ghis_database;
if ghis_databaseSQLCODE<>0 then
messagebox("","取检查序号出错")
return
end if
c#中序列化就是把一个对象保存到一个文件或数据库字段中去。
序列化用途:
1、在进程下次启动时读取上次保存的对象的信息
2、在不同的AppDomain或进程之间传递数据
3、在分布式应用系统中传递数据
常见的序列化的方法:
1、BinaryFormatter
2、SoapFormatter
3、XML序列化
用法:
BinaryFormatter的用法大致如下:
//BinaryFormatter将对象序列化到文件中List<string> inputList = new List<string>() { "str1","str2","str3"};
using (FileStream fsWriter = new FileStream(@"tmpdat",FileModeCreate,FileAccessWrite))
{
BinaryFormatter bf = new BinaryFormatter();
//序列化
bfSerialize(fsWriter, inputList);
}
//BinaryFormatter将文件中的数据反序列化出来
List<string> outputList = new List<string>();
using (FileStream fsReader = new FileStream(@"tmpdat",FileModeOpen,FileAccessRead))
{
BinaryFormatter bf = new BinaryFormatter();
//反序列化
outputList = (List<string>)bfDeserialize(fsReader);
}
XML序列化的用法大致如下:
//xml序列化到tmpxml文件中List<string> inputList = new List<string>() { "str1","str2"};
using (FileStream fsWriter = new FileStream(@"tmpxml",FileModeCreate,FileAccessWrite))
{
XmlSerializer xs = new XmlSerializer(typeof(List<string>));
xsSerialize(fsWriter, inputList);
}
//从tmpxml文件中反序列化出来
List<string> outputList = new List<string>();
using (FileStream fsReader = new FileStream(@"tmpxml",FileModeOpen,FileAccessRead))
{
XmlSerializer xs = new XmlSerializer(typeof(List<string>));
outputList = xsDeserialize(fsReader) as List<string>;
}
总结:
两个的用法大致如下:
序列化:
1得到一个存储对象的类型
2创建一个写入文件流
3定义要序列化的类型
4调用序列化方法
反序列化:
1定义一个装载对象的类型
2创建一个读出文件流
3定义要反序列化的类型
4调用反序列化方法
BinaryFormatter类进行序列化和反序列化,以缩略型二进制格式写到一个文件中去,速度比较快,而且写入后的文件已二进制保存有一定的保密效果。标记为NonSerialized的其他所有成员都能序列化。
采用xml序列化的方式只能保存public的字段和可读写的属性,对于private等类型的字段不能进行序列化。
二进制序列化的优点:
1. 所有的类成员(包括只读的)都可以被序列化;
2. 性能非常好。
XML序列化的优点:
1. 互 *** 作性好;
2. 不需要严格的二进制依赖;
3. 可读性强
以上就是关于oracle数据库如何在一个表中添加自动增值的一个字段注:不使用序列和触发器,因为我的表已经有数据了全部的内容,包括:oracle数据库如何在一个表中添加自动增值的一个字段注:不使用序列和触发器,因为我的表已经有数据了、谁能告诉我,圆珠笔笔头的那个圆珠是怎么造出来的这是什么工艺啊,还能批量生产,还能保证相当的圆度、请问oracle中的序列是干什么用的等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)