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,