【总结】举例说明数据库自增字段的 3 种实现方式
目录
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 种实现方式相关推荐
- SQL Server数据库自增字段正确的插入值的描述
我们今天主要向大家讲述的是SQL Server数据库之向SQL Server自增字段正确的插入值的实际操作步骤,在一般的情况下,我们不能向 SQL Server 数据库自增字段中插入值,如果非要这么干 ...
- mysql数据库自增字段_mysql 数据库自增字段
mysql 数据库自增字段 云服务器(Elastic Compute Service,简称ECS)是阿里云提供的性能卓越.稳定可靠.弹性扩展的IaaS(Infrastructure as a Serv ...
- Oracle数据库日期范围查询的两种实现方式
Oracle数据库日期范围查询有两种方式:to_char方式和to_date方式,接下来我们通过一个实例来介绍这一过程.我们假设要查询2011-05-02到2011-05-30之间的数据,实现方式如下 ...
- 数据库SQL:在插入语句中使用查询查询语句(动态获取数据库自增字段的值)
在插入语句中使用查询: INSERT into 表名(获取自增id1 ,获取自增id2 ,字段3 ,...... ,字段N ) SELECT 表别名1.id, 表别名2.id ,"字段3的值 ...
- python自增_python mysql自增字段AUTO_INCREMENT值的修改方式
在之前得文章中我们说过,如果使用delete对数据库中得表进行删除,那么只是把记录删除掉,并且id的值还会保持上次的状态. 即删除之前如果有四条数据,删除之后,再添加新的数据,id怎会从5开始. 但是 ...
- python为mysql设置id自增长_python mysql自增字段AUTO_INCREMENT值的修改方式
在之前得文章中我们说过,如果使用delete对数据库中得表进行删除,那么只是把记录删除掉,并且id的值还会保持上次的状态. 即删除之前如果有四条数据,删除之后,再添加新的数据,id怎会从5开始. 但是 ...
- 转载+记录数据增广的八种常用方式
在图像的深度学习中,为了丰富图像训练集,提高模型的泛化能力,一般会对图像进行数据增强.常用的方式有:旋转.剪切.改变图像色差.扭曲图像特征.改变图像尺寸.增加图像噪声(高斯噪声.盐胶噪声). 思考:对 ...
- 数据库、表数据的三种删除方式
第一种:drop table; 第二种:delete table; t第三种:runcate table; 三种方式的区别: Drop table删表(常用于正对表),表结构都会被删除.而delete ...
- 碎嘴子教学mysql数据库自增
碎嘴子教学mysql数据库自增 主要分为两种方式: 1.建表时设置自增 2.建表后设置自增 方式一:建表时设置 CREATE TABLE `test1` (`id` int primary key a ...
最新文章
- Keras vs PyTorch,哪一个更适合做深度学习?
- Spinner弹出框遮挡住显示框的解决办法
- POJ2186——并查集+Tarjan算法求强连通分量
- Web框架——Flask系列之json、jsonify模块的使用(十四)
- 高锟诺奖演讲:《古沙递捷音》
- 修改linevent的4096限制----更多evbuffer操作函数
- 苹果鼓励美国员工赴中国出差 一天500美元奖金
- 可变悬挂与空气悬挂的区别_案例分析:宝马7系F02左后空气悬挂下趴检测与维修...
- AMD OpenCL大学课程(12) 性能优化案例NBody
- viewpager初始化fragment没有绘制_NDK OpenGL ES渲染系列 之 绘制三角形
- QT自定义opengl的Widget绘制Mat
- puppet成长日记四 Exec资源详细介绍及案例分析
- FRR BGP协议分析12 -- ZEBRA路由的处理1
- halcon实现直方图匹配(直方图规定化)
- tb项目管理实践_项目 管理 数据库
- 清华大学建筑学计算机,建筑专业十强大学排名:清华第一,第四堪称黑马
- 2020年过去了,我很怀念它
- mysql 启动 spawn错误_supervisor ERROR (spawn error):错误解决
- NVIDIA NCCL 源码学习(五)- 路径计算
- 串口之DCB结构体详解