欢迎来到天天文库
浏览记录
ID:34742963
大小:60.68 KB
页数:3页
时间:2019-03-10
《关于数据库中的主键的自动增长》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、Mysql、SqlServer、Oracle主键自动增长的设置1、把主键定义为自动增长标识符类型在mysql中,如果把表的主键设为auto_increment类型,数据库就会自动为主键赋值。例如:createtablecustomers(idintauto_incrementprimarykeynotnull,namevarchar(15));insertintocustomers(name)values("name1"),("name2");2、在MSSQLServer中,如果把表的主键设为identity类型,数据库就会自动为主键赋值。例如:createtablecusto
2、mers(idintidentity(1,1)primarykeynotnull,namevarchar(15));insertintocustomers(name)values("name1"),("name2");identity包含两个参数,第一个参数表示起始值,第二个参数表示增量。3、Oracle列中获取自动增长的标识符在Oracle中,可以为每张表的主键创建一个单独的序列,然后从这个序列中获取自动增加的标识符,把它赋值给主键。例如一下语句创建了一个名为customer_id_seq的序列,这个序列的起始值为1,增量为2。方法一、createsequencecustom
3、er_id_seqINCREMENTBY1--每次加几个STARTWITH1--从1开始计数NOMAXVALUE--不设置最大值NOCYCLE--一直累加,不循环CACHE10;一旦定义了customer_id_seq序列,就可以访问序列的curval和nextval属性。curval:返回序列的当前值nextval:先增加序列的值,然后返回序列值createtablecustomers(idintprimarykeynotnull,namevarchar(15));insertintocustomersvalues(customer_id_seq.curval,"name1"
4、),(customer_id_seq.nextval,"name2");方法二、或者通过存储过程和触发器:1、通过添加存储过程生成序列及触发器:createorreplacePROCEDURE"PR_CREATEIDENTITYCOLUMN"(tablenamevarchar2,columnnamevarchar2)asstrsqlvarchar2(1000);beginstrsql:='createsequenceseq_'
5、
6、tablename
7、
8、'minvalue1maxvalue999999999999999999startwith1incrementby1nocach
9、e';executeimmediatestrsql;strsql:='createorreplacetriggertrg_'
10、
11、tablename
12、
13、'beforeinserton'
14、
15、tablename
16、
17、'foreachrowbeginselectseq_'
18、
19、tablename
20、
21、'.nextvalinto:new.'
22、
23、columnname
24、
25、'fromdual;end;';executeimmediatestrsql;end;2、对表进行执行存储过程execPR_CREATEIDENTITYColumn('XS_AUDIT_RECORD','AUDIT_RECORD_
26、ID');上一种方案对每一张表都要进行,下面根据用户批量生成selecta.table_name,b.column_namefromdba_constraintsa,dba_cons_columnsbwherea.constraint_name=b.constraint_nameanda.CONSTRAINT_TYPE='P'anda.owner=user;3、添加执行存储过程的role权限,修改存储过程,加入AuthidCurrent_User时存储过程可以使用role权限。createorreplaceprocedurep_create_tableAuthidCurrent
27、_UserisbeginExecuteImmediate'createtablecreate_table(idint)';endp_create_table;
此文档下载收益归作者所有