MYSQL和ORACLE自增列的区别

本文对比了MYSQL和ORACLE在处理自增列上的区别。在MYSQL中,存在自动增长的数据类型,插入记录时自动获取序列值,而ORACLE需创建序列和触发器来实现。详细介绍了在ORACLE创建序列和触发器的步骤,以及MYSQL自增列的限制和管理,包括如何处理自增冲突及调整自增序列的步长和起始值。
摘要由CSDN通过智能技术生成
1. 自动增长的数据类型处理
          MYSQL有自动增长的数据类型,插入记录时不用操作此字段,会自动获得数据值。ORACLE没有自动增长的数据类型,需要建立一个自动增长的序列号,插入记录时要把序列号的下一个值赋于此字段。
oracle自增方式:
--第一步:创建SEQUENCE 
create sequence cmdb.M_MODULE_seq increment by 1 start with 1;
--第二步:创建一个基于该表的before insert 触发器,在触发器中使用刚创建的SEQUENCE
create or replace trigger cmdb.M_MODULE_trigger 
before insert on cmdb.M_MODULE
for each row 
begin 
      select   cmdb.M_MODULE_seq.nextval   into:new.id from sys.dual ; 
end;
重点说mysql自增方式:
说明:
自增字段的数据类型必须为:TINYINT,SMALLINT,MEDIUMINT,INT,BIGINT中的一种,并且必须作为主键或联合主键的一部分。若是作为主键的一部分,自增序列字段值将会丧失唯一性保证。AUTO_INCREMENT数据列序号的最大值受该列的数据类型约束,如TINYINT数据列的最大编号是127,如加上UNSIGNED,则最大为255。一旦达到上限,AUTO_INCREMENT就会失效
mysql> create table user(  
    ->    userid int ( 4 ) primary key not  null  auto_increment,  
    ->    username varchar(16 ) not  null ,  
    ->    userpassword varchar(32 ) not  null   
    ->    );
Query OK, 0 rows affected (0.02 sec)

mysql> alter table user auto_increment=1;
Query OK, 0 rows affected (0.00 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> insert into user(username,userpassword) values('ddd','asda');
Query OK, 1 row affected (0.01 sec)

mysql> select * from user;
+--------+----------+--------------+
| userid | username | userpassword |
+--------+----------+--------------+
|      1 | ddd      | asda         |
+--------+----------+--------------+
1 row in set (0.00 sec)
这里我们发现问题:
mysql> show create table user;
+-------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table                                                                                                                                                                                                                 |
+-------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| user  | CREATE TABLE `user` (
  `userid` int(4) NOT NULL AUTO_INCREMENT,
  `username` varchar(16) NOT NULL,
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值