- 我的电脑系统:Windows 10 64位
- SQL Server 软件版本: SQL Server 2014 Express
本篇博客里面使用了
scott库,如何你现在还没有添加这个库到你的服务器里面,请在查看本篇博客前,访问这篇博文来在你的服务器里面附加scott库。
identity 的用法 — 如何设置主键自动增长(用户不需要为identity修饰的主键赋值)
1 2 3 4 5 6 7 8 9 10 11 | |
如何重新设置identity 字段的值
表中删除数据又插入数据会导致主键不连续递增 怎么办?
不重要。主键是否连续增长不是非常重要。
如果对表中数据进行了删除操作,如何让 identity 字段重新从某个值开始自增?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | |
1
| |
种子的值也可以是零,这样设置的话,用户插入值时,种子的初始值将从1开始。
总结:
identity 表示该字段的值会自动更新,不需要我们维护,通常情况下我们不可以直接给 identity 修饰的字符赋值,否则编译时会报错。
语法格式为:
identity [(m, n)]m表示的是初始值,n表示的是每次自动增加的值- 要么同时指定
m和n的值,要么m和n都不指定,不能只写其中一个值。如:identity(3,2)、identity都是正确的,但是identity(3)、identity(2)、identity都是错误的。 - 如果
m和n都未指定,则取默认值(1, 1)
数据类型是整型的列才能被定义成标识列:
int、bigint、smallint列都可以被定义成identity- 不含有小数位的
decimal和numeric也可以被标记为identity。如:decimal、decimal(6, 0)字段都可以被标记为identity,但是decimal(6, 2)字段就不能被标记为identity
标识列通常与 primary key 约束一起用作表的唯一行标识符:
- 非主键也是可以被定义为
identity的,但不推荐。
如何向 identity 字段插入数据
通常identity标记的字段我们是不需要插入数据的,即我们不需要维护 identity 字段的值,它会自动更新,如果我们需要向identity修饰的字段插入值,则必须满足如下两点:
- 先得执行
set identity_insert [database.[owner.]] {table} {on | off} - 插入数据时必须得指定
identity修饰的字段的名字
如何向 identity 字段插入数据示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | |
默认情况下,使用identity关键字修饰的主键是自动增长的,如果想手动设置主键的值,需要先将目标表打开:set identity_insert test.dbo.dept on,然后再使用insert into dept (deptid, deptname) values (1, 'zhangsan') 命令来手动设置主键的值。