数据库之 AutoID

  SQL 92 并未定义 AutoID 实现标准,导致不同的数据库使用不同的实现,特此整理之,方便查询使用。
---------------------------------------------------------------
SQLite:

None.gif CREATE   TABLE  foo (
None.gif  id 
INTEGER   PRIMARY   KEY
None.gif); 


MySQL:

None.gif CREATE   TABLE  foo (
None.gif  id 
INT  auto_increment,
None.gif  
PRIMARY   KEY  (id)
None.gif);


PostgreSQL:

None.gif CREATE   TABLE  foo (
None.gif  id SERIAL 
PRIMARY   KEY              --  实际 SERIAL 创建了一个 Sequence
None.gif
);


SQL Server:

None.gif CREATE   TABLE  foo (
None.gif  id 
INT   PRIMARY   KEY   IDENTITY ( 1 , 1 --  以1为起点, 以1为步长的自增长列
None.gif
);


Oracle:
   Oracle 在通过 Sequnece 实现 AutoID,当 Drop table 时,触发器同时被 drop,但是 sequence 依然残余,需要手动清除。

None.gif CREATE   TABLE  foo (
None.gif  id 
INT ,
None.gif  name 
VARCHAR2 ( 100 ),
None.gif  
PRIMARY   KEY  (id)
None.gif);

None.gif
CREATE  SEQUENCE foo_seq;

None.gif
CREATE   OR   REPLACE   TRIGGER  foo_trig_insert BEFORE  INSERT   ON  foo  FOR  EACH ROW
None.gif
BEGIN    
None.gif  
IF  ( :new.id  IS   null  )  THEN
None.gif    
SELECT  foo_seq.nextval  INTO  :new.id  FROM  dual;   
None.gif  
END   IF ;
None.gif
END ;


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值