目录

MySQL

Oracle

标识列

序列

SQL Server

标识列

序列

PostgreSQL

标识列

序列

SERIAL


在设计数据库的表结构时,经常会使用一个自动增长的数字序列作为主键字段(代理主键)。

除了作为主键使用之外,自增字段也可以用于记录各个操作发生的先后顺序,因为它具有递增特性。当我们插入一行数据时,数据库会为自增字段生成一个新的数值。

下表列出了主流数据库中创建自增字段的几种方法:

MySQL

AUTO_INCREMENT

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

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

以下语句创建了一个表 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。

【总结】举例说明数据库自增字段的 3 种实现方式相关推荐

  1. SQL Server数据库自增字段正确的插入值的描述

    我们今天主要向大家讲述的是SQL Server数据库之向SQL Server自增字段正确的插入值的实际操作步骤,在一般的情况下,我们不能向 SQL Server 数据库自增字段中插入值,如果非要这么干 ...

  2. mysql数据库自增字段_mysql 数据库自增字段

    mysql 数据库自增字段 云服务器(Elastic Compute Service,简称ECS)是阿里云提供的性能卓越.稳定可靠.弹性扩展的IaaS(Infrastructure as a Serv ...

  3. Oracle数据库日期范围查询的两种实现方式

    Oracle数据库日期范围查询有两种方式:to_char方式和to_date方式,接下来我们通过一个实例来介绍这一过程.我们假设要查询2011-05-02到2011-05-30之间的数据,实现方式如下 ...

  4. 数据库SQL:在插入语句中使用查询查询语句(动态获取数据库自增字段的值)

    在插入语句中使用查询: INSERT into 表名(获取自增id1 ,获取自增id2 ,字段3 ,...... ,字段N ) SELECT 表别名1.id, 表别名2.id ,"字段3的值 ...

  5. python自增_python mysql自增字段AUTO_INCREMENT值的修改方式

    在之前得文章中我们说过,如果使用delete对数据库中得表进行删除,那么只是把记录删除掉,并且id的值还会保持上次的状态. 即删除之前如果有四条数据,删除之后,再添加新的数据,id怎会从5开始. 但是 ...

  6. python为mysql设置id自增长_python mysql自增字段AUTO_INCREMENT值的修改方式

    在之前得文章中我们说过,如果使用delete对数据库中得表进行删除,那么只是把记录删除掉,并且id的值还会保持上次的状态. 即删除之前如果有四条数据,删除之后,再添加新的数据,id怎会从5开始. 但是 ...

  7. 转载+记录数据增广的八种常用方式

    在图像的深度学习中,为了丰富图像训练集,提高模型的泛化能力,一般会对图像进行数据增强.常用的方式有:旋转.剪切.改变图像色差.扭曲图像特征.改变图像尺寸.增加图像噪声(高斯噪声.盐胶噪声). 思考:对 ...

  8. 数据库、表数据的三种删除方式

    第一种:drop table; 第二种:delete table; t第三种:runcate table; 三种方式的区别: Drop table删表(常用于正对表),表结构都会被删除.而delete ...

  9. 碎嘴子教学mysql数据库自增

    碎嘴子教学mysql数据库自增 主要分为两种方式: 1.建表时设置自增 2.建表后设置自增 方式一:建表时设置 CREATE TABLE `test1` (`id` int primary key a ...

最新文章

  1. Keras vs PyTorch,哪一个更适合做深度学习?
  2. Spinner弹出框遮挡住显示框的解决办法
  3. POJ2186——并查集+Tarjan算法求强连通分量
  4. Web框架——Flask系列之json、jsonify模块的使用(十四)
  5. 高锟诺奖演讲:《古沙递捷音》
  6. 修改linevent的4096限制----更多evbuffer操作函数
  7. 苹果鼓励美国员工赴中国出差 一天500美元奖金
  8. 可变悬挂与空气悬挂的区别_案例分析:宝马7系F02左后空气悬挂下趴检测与维修...
  9. AMD OpenCL大学课程(12) 性能优化案例NBody
  10. viewpager初始化fragment没有绘制_NDK OpenGL ES渲染系列 之 绘制三角形
  11. QT自定义opengl的Widget绘制Mat
  12. puppet成长日记四 Exec资源详细介绍及案例分析
  13. FRR BGP协议分析12 -- ZEBRA路由的处理1
  14. halcon实现直方图匹配(直方图规定化)
  15. tb项目管理实践_项目 管理 数据库
  16. 清华大学建筑学计算机,建筑专业十强大学排名:清华第一,第四堪称黑马
  17. 2020年过去了,我很怀念它
  18. mysql 启动 spawn错误_supervisor ERROR (spawn error):错误解决
  19. NVIDIA NCCL 源码学习(五)- 路径计算
  20. 串口之DCB结构体详解

热门文章

  1. 【Spring】IDEA中创建Spring项目
  2. 深入探究linux_深入探究GraphQL查询
  3. 【贪心】AcWing 803. 区间选点
  4. 从零开始搭建自己的云服务器
  5. Python聊天室设置与实现
  6. 通过HFS低成本搭建NAS,并内网穿透实现公网访问 1/2
  7. 可微和可导的关系,全微分、偏微分、偏导数
  8. rocketMq监控平台界面
  9. tomcat+eclipse +mysql搭建JSP开发环境
  10. zbb20190430 springboot 配置alimq