不直接支持 自动递增的列。
需要创建一个序列 SEQUENCE。
又由于无法在列的默认值那里,设置默认值为序列。因此只能通过触发器来设置。
设置好触发器以后,所有的插入语句,将忽略外部传入的 id 数据,只使用指定的序列号来产生。
SQL>CREATE SEQUENCE test_sequence2
2increment by 1-- 每次递增1
3start with 1 -- 从1开始
4nomaxvalue -- 没有最大值
5minvalue 1 -- 最小值=1
6NOCYCLE -- 不循环
Sequence created.
SQL>CREATE OR REPLACE TRIGGER BeforeTestCreate2Insert
2BEFORE INSERT ON test_create_tab2
3 FOR EACH ROW
4 BEGIN
5SELECT test_sequence2.nextval INTO :new.id FROM dual
6 END
7 /
Trigger created.
SQL>INSERT INTO test_create_tab2(val) VALUES ('NO id')
1 row created.
SQL Server
通过 IDENTITY 来设置
参数有2个,一个是“初始值” 一个是“增量”。
默认情况下 INSERT 语句中,不能对 IDENTITY 的字段进行赋值。
1>CREATE TABLE test_create_tab2 (
2> id INT IDENTITY(1, 1) PRIMARY KEY,
3> val VARCHAR(10)
4>)
5>go
1>INSERT INTO test_create_tab2(val) VALUES ('NO id')
2>go
(1 行受影响)
MySQL
通过
AUTO_INCREMENT设置
SQL INSERT语句的时候,要避免 指定那个自增的字段
否则会发生主键的冲突。
mysql>CREATE TABLE test_create_tab2 (
-> id INT AUTO_INCREMENT,
-> val VARCHAR(10),
-> PRIMARY KEY (id)
->)
->//
Query OK, 0 rows affected (0.08 sec)
mysql>INSERT INTO test_create_tab2(val) VALUES ('NO id')
->//
Query OK, 1 row affected (0.03 sec)
MYSQL里面INT类型的数据有auto_increament这个属性,即自增列,你可以指定一个数字,然后每插入一条数据,如果不指定具体的值,该列的值就是当前该列的最大值加上一个间隔,可以指定这个属性的初值以及每次自动加的间隔大小,默认是从0开始,每次加1。欢迎分享,转载请注明来源:内存溢出
评论列表(0条)