不直接支持 自动递增的列。
需要创建一个序列 SEQUENCE。
又由于无法在列的默认值那里,设置默认值为序列。因此只能通过触发器来设置。
SQL>CREATE SEQUENCE test_sequence2
2increment by 1-- 每次递增1
3start with 1 -- 从1开始
4nomaxvalue -- 没有最大值
5minvalue 1 -- 最小值=1
6NOCYCLE -- 不循环
Sequence created.
SQL>CREATE TABLE test_create_tab2 (
2id INT,
3val VARCHAR(10),
4PRIMARY KEY (id)
5 )
Table 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 Server
通过 IDENTITY 来设置
参数有2个,一个是“初始值” 一个是“增量”。
1>CREATE TABLE test_create_tab2 (
2> id INT IDENTITY(1, 1) PRIMARY KEY,
3> val VARCHAR(10)
4>)
5>go
MySQL
通过
AUTO_INCREMENT设置
mysql>CREATE TABLE test_create_tab2 (
-> id INT AUTO_INCREMENT,
-> val VARCHAR(10),
-> PRIMARY KEY (id)
->)
Query OK, 0 rows affected (0.09 sec)
两种方法:
1、用Truncate
TRUNCATE TABLE name可以删除表内所有值并重置标识值
2、用DBCC CHECKIDENT
DBCC CHECKIDENT ('table_name', RESEED, new_reseed_value)如dbcc checkident ("bc_pos",reseed,1)即可,
但如果表内有数据,则重设的值如果小于最大值可能会有问题,这时可以用 dbcc checkident("bc_pos",reseed)即可自动重设值。
注意:
只能为不允许空值且数据类型为 decimal、int、numeric、smallint、bigint 或 tinyint 的列设置标识属性。此外,不能为主键列设置标识属性。
扩展资料:关于上述标识列的引用
如果在SQL语句中引用标识列,可用关键字IDENTITYCOL代替,例如,若要查询上例中ID等于1的行,
以下两条查询语句是等价的:
1、SELECT * FROM T_test WHERE IDENTITYCOL=1
2、SELECT * FROM T_test WHERE
create table employee{id varchar(10) primary key,
name varchar(10) not null,
sex varchar(2),
high int(3),
weight decimal(4,2),
mobile varchar(20),
address varchar(50)
)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)