赞
踩
在设计数据库的表结构时,经常会使用一个自动增长的数字序列作为主键字段(代理主键)。除了作为主键使用之外,自增字段也可以用于记录各个操作发生的先后顺序,因为它具有递增特性。当我们插入一行数据时,数据库会为自增字段生成一个新的数值。
我们今天的主题就是自增字段的实现,下表列出了主流数据库中创建自增字段的几种方法:
自增字段实现方式 | MySQL | Oracle | SQL Server | PostgreSQL | SQLite |
---|---|---|---|---|---|
标识列(IDENTITY) | -- | ✔️ | ✔️ | ✔️ | -- |
序列(SEQUENCE) | -- | ✔️ | ✔️ | ✔️ | -- |
AUTO_INCREMENT | ✔️ | -- | -- | SERIAL | AUTOINCREMENT |
接下来我们针对不同的数据库进行详细讨论。
MySQL 通过 AUTO_INCREMENT 属性定义自增字段,并且需要遵循以下规则:
以下语句创建了一个表 users,其中 user_id 是一个自增主键字段:
create table users(
user_id INT AUTO_INCREMENT PRIMARY KEY,
user_name VARCHAR(50) NOT NULL,
email VARCHAR(100)
);
接下来我们插入两条数据:
insert into users(user_name, email) values ('u1', 'u1@test.com');
insert into users(user_name, email) values ('u2', 'u2@test.com');
select * from users;
user_id|user_name|email |
-------|---------|-----------|
1|u1 |u1@test.com|
2|u2 |u2@test.com|
在上面的插入语句中,我们没有指定 user_id 的值,此时 MySQL 会自动为该字段生成一个递增序列值。AUTO_INCREMENT 字段的值默认从 1 开始,每次递增也是 1。
如果插入数据时为自增字段指定了 NULL 值或者 0,MySQL 同样会自动生成一个序列值。
insert into users(user_id, user_name, email) values (null, 'u3', 'u3@test.com');
insert into users(user_id, user_name, email) values (0, 'u4', 'u4@test.com');
select * from users;
user_id|user_name|email |
-------|---------|-----------|
1|u1 |u1@test.com|
2|u2 |u2@test.com|
3|u3 |u3@test.com|
4|u4 |u4@test.com|
如果插入数据时为自增字段指定了非空也非 0 的值,MySQL 会使用我们提供的值;而且还会将自增序列的起始值值设置为该值,可能导致自增字段值的跳跃。
insert into users(user_id, user_name, email) values (100, 'u5', 'u5@test.com');
insert into users(user_name, email) values ('u6', 'u6@test.com');
select * from users;
user_id|user_name|email |
-------|---------|-----------|
1|u1 |u1@test.com|
2|u2 |u2@test.com|
3|u3 |u3@test.com|
4|u4 |u4@test.com|
100|u5 |u5@test.com|
101|u6 |u6@test.com|
上面的第一个插入语句为 user_id 提供了值 100,第二个插入语句使用系统提供的自增序列值,此时跳跃到了 101。
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/495145
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。