oracle数据库如何在一个表中添加自动增值的一个字段注:不使用序列和触发器,因为我的表已经有数据了

oracle数据库如何在一个表中添加自动增值的一个字段注:不使用序列和触发器,因为我的表已经有数据了,第1张

谁说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中的序列是干什么用的等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/10195009.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-06
下一篇 2023-05-06

发表评论

登录后才能评论

评论列表(0条)

保存