sql数据库建表时如何实现自动编号

sql数据库建表时如何实现自动编号,第1张

Oracle

不直接支持 自动递增的列。

需要创建一个序列 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)

)


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9995243.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-04
下一篇 2023-05-04

发表评论

登录后才能评论

评论列表(0条)

保存