主键增长、非空及唯一约束1.主键自增长
MySQL提供了主键自动增长的功能,所谓的自增长是指在用户没有给出主键值时,MySQL数据库会自动为该条记录生成一个主键值,这个主键值是在最大主键值的基础上加1,这样这个表中就不会出现重复的主键值。
设置主键自增长的关键词是AUTO_INCREMENT,对应的sql语句如下:
CREATE TABLE stu(
sid INT PRIMARY KEY AUTO_INCREMENT,
sname VARCHAR(20),
age INT,
gender VARCHAR(10)
);
设置主键自增长必须要求主键列的类型是整型,这样才能完成自增长。
(1)下面我们来创建一个主键自增长的表,如图1-1所示:
图1-1 创建主键自增长的表
(2)表的主键虽然是自增长的,我们也可以在插入记录时给出主键值,如图1-2所示:
图1-2 插入给定主键值的记录
(3)再向stu3表中插入一条记录,不给出主键值,然后再查询stu3表的所有记录,如图1-3所示:
图1-3 插入无主键的记录
图1-3中,第二次插入的记录的主键值为1112,是第一次插入的记录的主键值加1的结果,这就是MySQL数据库底层主键自增长的算法,在当前最大主键值的基础上加1。
(4)现在将stu3表中的记录全部删除,然后再向该表中插入一条没有主键值的记录,如图1-4所示:
图1-4 查询结果
图1-3中,没有删除之前主键的最大值是1112,将记录全部删除之后再次插入一个无主键值的记录,MySQL数据库为它生成的主键值是1113,这表明MySQL数据库会记录当前最大的主键值,无论有没有记录被删除,再次添加无主键记录时都会在它记录的最大主键值的基础上加1,然后赋给新纪录的主键。
在以后的开发中,表的主键一般采用代理主键,所谓代理主键就是没有特定含义的主键,例如,一个人的身份证号如果做主键的话,那么这个主键就不是一个代理主键,而是一个自然主键,因为它代表了一定的含义,我们一般不会使用自然主键。另外,主键自增长有一定的局限性,今后我们会使用UUID生成主键,这样产生的主键永远不会重复。
2.非空约束
非空约束的作用与主键约束中的非空特性一样,非空约束的关键词是:NOT NULL,指定非空约束的列的值不能为null,其对应的sql语句如下:
CREATE TABLE stu4(
sid INT PRIMARY KEY AUTO_INCREMENT,
sname VARCHAR(10) NOT NULL,
age INT,
gender VARCHAR(10)
);
这里我们就不再演示非空约束,如果一个列指定了非空约束,那么它的值就不能为空,否则会报错。
3.唯一约束
所谓唯一约束就是说指定唯一约束的列的值不能重复,但是可以为null,它的关键词是:UNIQUE,对应的sql语句是:
CREATE TABLE tab_ab(
sid INT PRIMARY KEY AUTO_INCREMENT,
sname VARCHAR(10) UNIQUE
);
这里我们也不再演示唯一约束,以上sql语句中sname列上指定了唯一约束,那么sname列的值就不能重复。
本文版权归黑马程序员Java培训学院所有,欢迎转载,转载请注明作者出处。谢谢!
作者:黑马程序员Java培训学院
首发:http://www.itheima.com/special/hmjavaeezly/