本文章来给大家总结现在常用的数据库主键自增长的设置方法,这里包括了:SQLServer、Oracle、MySQL 三种数据库了,有需要的朋友可进入参考。
主键自增长
MySQL的主键自增长只需将主键定义为AUTO_INCREMENT,如:
代码如下 | 复制代码 |
CREATE TABLE user |
SQLServer的主键自增长也很简单,只需将主键定义为IDENTITY,如:
1.新建一数据表,里面有字段id,将id设为为主键
代码如下 | 复制代码 |
create table tb(id int,constraint pkid primary key (id)) |
2.新建一数据表,里面有字段id,将id设为主键且自动编号
代码如下 | 复制代码 |
create table tb(id int identity(1,1),constraint pkid primary key (id)) |
3.已经建好一数据表,里面有字段id,将id设为主键
代码如下 | 复制代码 |
alter table tb alter column id int not null |
4.删除主键
代码如下 | 复制代码 |
Declare @Pk varChar(100); Select @Pk=Name from sysobjects where Parent_Obj=OBJECT_ID('tb') and xtype='PK'; if @Pk is not null exec('Alter table tb Drop '+ @Pk) |
Oracle的主键自增长需要通过自定义的 SEQUENCE:
先创建用户表 user:
代码如下 | 复制代码 |
CREATE TABLE user |
创建SEUQENCE:
代码如下 | 复制代码 |
CREATE SEQUENCE seq_user INCREMENT BY 1 START WITH 1 NOMAXVALUE NOCYCLE NOCACHE; |
以上 sql 语句完成了一个序列(SEQUENCE)的建立过程,名称为seq_user,范围是从1开始到无限大(无限大的程度是由你机器决定的),
INCREMENT BY 1,seq每次加1;
START WITH 1,seq从1开始计数;
NOMAXVALUE,seq不设置最大值;
NOCYCLE,seq一直增加,不循环;如果你设置了最大值那么你可以用CYCLE,会使seq到最大之后循环;
NOCACHE,不建缓冲区,如果你给出了CACHE值(如CACHE 10)那么系统将自动读取你的CACHE值大小个seq,这样在反复操作时会加快运行速度,但如果遭遇意外情况如宕机了或Oracle死了,则下次取出的seq值将和上次的不连贯。
要在 user 表中插入新记录,必须使用 nextval 函数(该函数从 seq_user 序列中取回下一个值),我这可以这样插入数据:
代码如下 | 复制代码 |
INSERT INTO user(id,name,password) VALUES(seq_user.nextval,'sunyzc','123'); |
上面的 sql 会在 user 表中插入一条新记录。id 的赋值是来自 seq_user 序列的下一个数字。
也可以通过创建 TRIGGER 来实现插入时主键自增长:
代码如下 | 复制代码 |
CREATE TRIGGER 触发器名称 BEFORE |
然后这样直接插入数据:
代码如下 | 复制代码 |
INSERT INTO user(name,password) VALUES('sunyzc','123'); |
查看用户的所有序列(必须以管理员身份登录且用户名大写)
代码如下 | 复制代码 |
select * from dba_sequences where sequence_owner='用户名'; |