当前位置:   article > 正文

【总结】数据库自增字段的 3 种实现方式_数据库自增语句

数据库自增语句

numbers
在设计数据库的表结构时,经常会使用一个自动增长的数字序列作为主键字段(代理主键)。除了作为主键使用之外,自增字段也可以用于记录各个操作发生的先后顺序,因为它具有递增特性。当我们插入一行数据时,数据库会为自增字段生成一个新的数值。

我们今天的主题就是自增字段的实现,下表列出了主流数据库中创建自增字段的几种方法:

自增字段实现方式MySQLOracleSQL ServerPostgreSQLSQLite
标识列(IDENTITY)--✔️✔️✔️--
序列(SEQUENCE)--✔️✔️✔️--
AUTO_INCREMENT✔️----SERIALAUTOINCREMENT

接下来我们针对不同的数据库进行详细讨论。

MySQL

AUTO_INCREMENT

MySQL 通过 AUTO_INCREMENT 属性定义自增字段,并且需要遵循以下规则:

  • 每个表只能有一个自增字段,数据类型一般是整数;
  • 自增字段必须创建主键(PRIMARY KEY)或者唯一索引(UNIQUE);
  • 自增字段必须非空(NOT NULL),MySQL 会自动为自增字段设置非空约束。

以下语句创建了一个表 users,其中 user_id 是一个自增主键字段:

create table users(
  user_id INT AUTO_INCREMENT PRIMARY KEY,
  user_name VARCHAR(50) NOT NULL,
  email VARCHAR(100)
);
  • 1
  • 2
  • 3
  • 4
  • 5

接下来我们插入两条数据:

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|
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

在上面的插入语句中,我们没有指定 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|
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

如果插入数据时为自增字段指定了非空也非 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|
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

上面的第一个插入语句为 user_id 提供了值 100,第二个插入语句使用系统提供的自增序列值,此时跳跃到了 101。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/495145
推荐阅读
相关标签