什么是自增主键
在关系型数据库管理系统中,每个表都必须有一个主键来唯一标识记录。自增主键是一种主键类型,它的值由系统自动分配,每次插入新记录时,系统会自动为新记录分配一个比前面插入的记录大1的值,并且该值是永久性的,不会在以后被其他记录使用。自增主键通常都是整数类型,例如int或bigint。
如何创建自增主键
方法1:使用IDENTITY
在创建表时,可以使用IDENTITY关键字来指定自增主键。
CREATE TABLE myTable (
id INT PRIMARY KEY IDENTITY,
name VARCHAR(50)
)
在上面的示例中,id列被指定为自增主键。由于使用了IDENTITY关键字,因此系统会自动为新增的记录分配一个唯一的id值。
方法2:使用SEQUENCE
从SQL Server 2012版本开始,可以使用SEQUENCE来创建自增主键。
CREATE SEQUENCE mySequence
START WITH 1
INCREMENT BY 1
NO CYCLE;
CREATE TABLE myTable (
id INT PRIMARY KEY DEFAULT (NEXT VALUE FOR mySequence),
name VARCHAR(50)
)
在上面的示例中,先创建了一个名为mySequence的序列,它从1开始,每次递增1。然后在创建表的时,指定id列的默认值为mySequence的下一个值。这样,新增的记录会自动从mySequence中获取一个新的唯一值。
如何插入数据
如果创建了自增主键的表,那么在插入数据时,不需要手动指定主键的值。系统会自动分配一个唯一的值。
例如,向上面的示例表中插入一条记录:
INSERT INTO myTable (name) VALUES ('John');
系统会自动分配id的值为1。
如果再插入一条记录:
INSERT INTO myTable (name) VALUES ('Mary');
系统会自动分配id的值为2。
如何修改自增主键
一旦表被创建,并且已经插入了数据,就不能再修改自增主键的方式。如果需要修改自增主键的方式,唯一的办法是重新创建表。
如何查看自增主键的值
如果想要查看自增主键的值,可以使用SCOPE_IDENTITY()函数。该函数返回插入当前记录后自增主键列的最后一个值。
例如,向myTable表中插入一条记录,并返回插入记录时自动生成的id值:
INSERT INTO myTable (name) VALUES ('Tom');
SELECT SCOPE_IDENTITY();
执行以上SQL语句,系统会先插入一条记录,并返回最后插入的记录的id值。
自增主键的优缺点
优点
自增主键是一种方便、高效、唯一的主键类型。它减少了冲突的可能性,同时也提高了查询效率。
由于自增主键是由系统自动分配的,因此可以避免人为错误。
在一些情况下,自增主键还能提高数据插入速度。
缺点
自增主键是一种不可读的主键类型。虽然它唯一,但是无法通过它来确定记录的含义。
如果不小心删除了一条记录,可能会导致自增主键值的不连续,产生不必要的浪费。
如果遇到需要导入的数据已经使用了自增主键,就不能直接使用该主键。需先更新主键值,再执行导入操作。
总结
自增主键是一种高效、唯一的主键类型,可以避免人为错误,提高查询效率。创建和使用自增主键并不复杂,但是需要注意相关的优缺点,根据不同的需求进行选择。