oracle数据库怎么设置自动增长

oracle数据库怎么设置自动增长,第1张

oracle的自动增长是借助序列来实现。

创建序列:

CREATE SEQUENCE emp_sequence  --序列名

INCREMENT BY 1   -- 每次加几个  

START WITH 1       -- 从1开始计数  

NOMAXVALUE        -- 不设置最大值  

NOCYCLE               -- 一直累加,不循环  

CACHE 10;

使用的时候,用emp_sequencenextval()就行

oracle

中不能设置自动增加,这个和其他数据库不一样,但是有

序列,这个是Oracle自己特有的东西,

首先创建序列:

create

sequence

seq;

这就创建好了,然后

seqnextval

就会返回一个值,不会重复的值,

insert

into

tablename

values(seqnextval,'001','javabook');

insert

into

tablename

values(seqnextval,'001','javabook');

insert

into

tablename

values(seqnextval,'001','javabook');

看明白没?这样前3个id

分别是

1,2,3

建表时设,如:

CREATE TABLE jobs

(

job_id smallint

IDENTITY(1,1)

PRIMARY KEY CLUSTERED,

job_desc varchar(50) NOT NULL

DEFAULT 'New Position - title not formalized yet',

min_lvl tinyint NOT NULL

CHECK (min_lvl >= 10),

max_lvl tinyint NOT NULL

CHECK (max_lvl <= 250)

)

go

identity属性中IDENTITY(1,1)第一个1是起数,第二个1是每次增长量为1

如果起始数和增长量不同可以根据自己需要更改。

使用自增长字段主键有不少问题,比如维护或是在大型分布应用中主键冲突的解决等。在一些大型分布应用中主键一般选用guid,这可以有效的避免主键冲突,减少对主键维护的工程。当然,对于中小型的应用,自增长字段的好处更多一些,简单、快速。

Sqlite中,一个自增长字段定义为INTEGER PRIMARY KEY AUTOINCREMENT,那么在插入一个新数据时,只需要将这个字段的值指定为NULL,即可由引擎自动设定其值,引擎会设定为最大的rowid+1。当然,也可以设置为非NULL的数字来自己指定这个值,但这样就必须自己小心,不要引起冲突。当这个rowid的值大于所能表达的最大值 9223372036854775807 (30及以后版本的rowid最大值)后,rowid的新值会这个最大数之前随机找一个没被使用了的值。所以在rowid达到最大值前,rowid的值是严格单调增加的。

INTEGER PRIMARY KEY AUTOINCREMENT 自增长字段的算法与rowid稍微有些不同。

第一,在达到最大值后,rowid会找已被删除的字段对应的rowid作为新值,而自增长字段则会丢出一个SQLITE_FULL的错误。

第二,自增长字段在增加新值时,是找一个从没被使用过的rowid作为新值,而rowid则是找最大已存在的rowid+1。这里对应用的影响会比较大,尤其是一些对id值有依赖的元记录,只适合使用自增长字段而不能用rowid。

比如,我们设计一个元记录表:

drop table test;

create table test (

[tkid] integer PRIMARY KEY autoincrement, -- 设置主键

[tktype] int default 0,

[tableid] varchar (50),

[createdate] datetime default (datetime('now', 'localtime')) -- 时间

);

第三,使用自增长字段,引擎会自动产生一个sqlite_sequence表,用于记录每个表的自增长字段的已使用的最大值,用户可以看到,并可以用使用 Update、Delete和Insert *** 作,但不建议这么使用,这会让引擎混乱。如果使用rowid,也会有这么一个内部表,用户可以维护rowid 值,但看不到。

这么看来,如果直接使用rowid来代替自增加字段,根据两者的细微的差别,需要注意是否与自己的应用冲突,如果没有冲突,那么用rowid会更快一点。

SQLite中创建自增字段:

简单的回答:一个声明为 INTEGER PRIMARY KEY 的字段将自动增加。

从 SQLite 的 234 版本开始,如果你将一个表中的一个字段声明为 INTEGER PRIMARY KEY,那么无论你何时向该表的该字段插入一个 NULL 值,这个 NULL 值将自动被更换为比表中该字段所有行的最大值大 1 的整数;如果表为空,那么将被更换为 1。

一个新的API函数 sqlite3_last_insert_rowid() 返回最近的插入 *** 作的整形键

注意这个整型键始终比之前插入表中的最后一个键大1。新键相对于表中的已有键来说是唯一的,但它可能与之前从表中删除的键值重叠。要始终得到在整个表中唯一的键,在INTEGER PRIMARY KEY的声明之前加关键词AUTOINCREMENT这样被选的键将总是比表中已存在的最大键大1。若可能的最大键已存在于表中,INSERT *** 作将失败并返回一个SQLITE_FULL错误码

保证程序的正确性,主键ID首先具有唯一性,设置自动增长在前台Insert的时候不需要传入ID的值,数据库自动根据最后一个ID值增加1

保证数据库主键不重复而且调用更为高效。

假如说没有设置自动增长

在insert一条记录的时候需要人为传递ID值。要保证唯一性必须要先获得上条记录的ID用select

然后再加一

然后在执行insert

从效率方面降低程序的灵活性。

个人见解。

以上就是关于oracle数据库怎么设置自动增长全部的内容,包括:oracle数据库怎么设置自动增长、oracle数据库中ID怎么自增长,怎么设置啊、数据库某个字段怎么样设置为自动增量等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存