使用Navicat Premiun 软件来学习MySQL的非空约束、唯一约束、主键约束、默认约束
非空约束用于确保插入字段中值的非空性。如果没有对字段设置约束,字段默认允许插入NULL值。如果数据表中的字段设置了非空约束,那么该字段中存放的值必须是NULL值之外的其他具体值。
例如,在企业的员工管理系统中,如果HR在新增员工信息时没有填写员工姓名等必填信息,系统却允许新增,那么所新增的员工信息没有使用价值。一般情况下,员工管理系统的数据表中都会为必填项信息对应的字段设置非空约束,以确保数据的完整性。为数据表的字段设置非空约束后,如果往该字段中插入的内容为NULL,则所执行的插入操作会报错。
在MySQL中,非空约束通过NOT NULL进行限定,在数据表中可以为多个字段同时设置非空约束。字段的非空约束可以在创建数据表时进行设置,也可以在修改数据表时进行添加。
如果是创建数据表时给字段设置非空约束,只需要在字段的数据类型后面追加NOT NULL即可。可以在数据表中设置多个非空约束,但是不能设置非空约束为表级约束。
使用 Navicat Premiun 创建一个数据表,并查看
根据这个表创建一个数据表,给local设置非空约束
结果:(注意不要直接点上面的运行,保存名跟数据表名要一致)
要先保存,再运行
从上述执行结果的local字段信息可以看出,local字段不允许存储NULL,说明创建数据表时local字段成功设置了非空约束。
如果需要在已经存在的数据表中添加非空约束,可以在ALTER TABLE语句中通过使用MODIFY或CHANGE重新定义字段的方式添加非空约束,这两种方式的效果都一样。
语法格式:alter table 表名 modify 内容 not null ;
给dname 增加非空约束,并展示结果
查看
由以上结果可知,dname 字段不允许存储NULL,说明修改数据表时dname 字段成功添加了非空约束。
非空约束的删除可以通过ALTER TABLE 语句中的 MODIFY 或 CHANGE 重新定义字段的方式实现。
语法格式:ALTER TABLE 数据表名 CHANGE 字段名 字段名内容 ;
查看
从上述执行结果可以看出,dname字段对应Null表头的内容为YES,表示dname字段中可以存储NULL值,说明dname字段的非空约束已经删除。
数据表中默认可以保存相同的值,唯一约束用于确保字段中值的唯一性。如果数据表中的字段设置了唯一约束,那么该数据表的这个字段中存放的值不能重复出现。
例如,在企业的员工管理系统中,如果HR在新增员工信息时允许新增员工的企业邮箱重复,那么邮箱信息的有效性会受到很大影响(例如,发送给某位员工的邮件可能会有多名员工收到)。一般情况下,数据表中需要为内容必须保证不重复的字段设置唯一约束,以确保数据的唯一性。为字段设置唯一约束后,如果往该字段中插入已经存在的值,所执行的插入操作会报错。
在MySQL中,唯一约束通过关键字UNIQUE进行设置。设置时,可以在数据表中设置1个或多个唯一约束。字段的唯一约束可以在创建数据表时进行设置,也可以在修改数据表时进行添加。
创建数据表时设置唯一约束的方式有两种:一种是设置列级约束;另一种是设置表级约束。列级约束紧跟在字段的数据类型之后,只对该字段起约束作用;表级约束独立于字段,可以对数据表的单个或多个字段起约束作用。如果表级约束对多个字段同时约束,只有当这几个字段的值相同时才视为重复记录,此时约束也称为联合约束或复合约束。
根据这个表创建一个数据表
结果
从上述执行结果可以看出,字段deptname的Key列为MUL,说明该字段是非唯一索引的第1列,此时字段deptname的值可以重复,字段deptname和字段 ename共同的值用于唯一性判断;字段empno的Key列为UNI,说明创建数据表时empno字段成功设置了唯一索引。设置唯一约束成功后Key列的值会有变化,是因为字段设置唯一约束时,系统会自动为对应的字段设置唯一索引,即UNI。
如果是修改数据表时设置唯一约束,可以在ALTER TABLE语句中通过使用MODIFY或CHANGE重新定义字段的方式添加,也可以通过ALTER TABLE语句中的ADD添加。使用ADD的方式语法更简洁,通常添加唯一约束时会选择使用这种方式。
语法格式:ALTER TABLE 数据表名 ADD UNIQUE( 字段名 ) ;
查看
从上述执行结果可以看出,email 字段的 Key 列为UNI ,说明email 字段成功添加了唯一约束。
创建唯一约束时,系统也同时创建了对应的唯一索引。删除唯一索引时,会将对应的唯一约束同时删除。默认情况下所创建的索引名和字段名一致,如果想要删除字段中已有的唯一约束,可以通过ALTER TABLE语句中的“DROP索引名”实现。
语法格式:ALTER TABLE 数据表名 DROP index 所删除的字段名 ;
删除并查看
查看
从上述执行结果查看的empno 字段对应的Key 列信息可以看出 ,empno 字段的唯一约束已经删除成功。
在MySQL中,为快速查找到表中的某条记录,可以通过设置主键约束来实现。主键约束相当于非空约束和唯一约束的组合,要求被约束字段中的值不允许重复,也不允许出现 NULL 值。
例如,在企业内部的员工管理系统中需要高频率地使用员工表中的工号字段,如果允许员工工号重复或者是NULL值,管理员工信息时就会出现混乱,系统也没有任何有效性可言,这时就可以为员工工号设置主键约束。为员工工号设置主键约束后,如果往该字段中插入已经存在的值或NULL值,所执行的插入操作会报错。
在MySQL中,主键约束是通过 PRIMARY KEY 进行设置,每个数据表中最多只能设置一个主键约束。设置主键约束的方式有两种,分别为创建数据表时设置主键约束和修改数据表时添加主键约束。
与设置唯一约束一样,可以在创建数据表时设置列级或表级的主键约束,区别在于列级只能对单字段设置主键约束,表级可以对单字段或多字段设置主键约束。
例如,在数据库中创建一个用于存放部门信息的数据表 nn (表名),部门信息中的ID编号使用最频繁,并且id字段的值不能为NULL值也不能重复;部门名称的值不能重复,部门地址的值不能为NULL值。
根据这个表创建一个数据表,并查看
查看
从上述执行结果可以看出,id字段对应的Key列的说明信息为PRI,说明创建表时字段ID成功设置了主键约束。设置主键约束成功后Key列的值会有变化,是因为字段设置主键约束时,系统会自动为对应的字段设置主键索引(PRI),并且为对应的字段自动设置非空约束。
如果数据表创建后,想要为表添加主键约束,则与修改数据表时添加唯一约束类似,可以在ALTER TABLE语句中通过使用MODIFY或CHANGE重新定义字段的方式添加,也可以通过ALTER TABLE语句中的ADD添加。不同的是,添加主键约束之前需要确保数据表中不存在主键约束,否则会添加失败。
语法结构:ALTER TABLE 数据表名 ADD PRIMARY KEY( 字段名);
先创建一个新的表,并查看
添加
查看
从上述执行结果可以看出,字段deptno 的Key 列为PRI ,说明字段deptno 成功添加了主键。
对于设置错误或者不再需要的主键约束,可以通过ALTER TABLE语句中的DROP进行删除。由于主键约束在数据表中只能有一个,因此不需要指定主键约束对应的字段名称,直接删除即可。删除主键约束时,也会自动删除主键索引。
语法格式:ALTER TABLE 数据表名 DROP PRIMARY KEY ;
查看
从上述执行结果可以看出,deptno字段的Key列没有内容了,但是Null列还是显示NO,说明删除主键约束时自动将主键索引删除了,但字段的非空约束并没有被同时删除。
默认值约束用于给数据表中的字段指定默认值,即当在表中插入一条新记录时,如果没有给这个字段赋值,那么数据库系统会自动为这个字段插入指定的默认值。
例如,在企业的员工管理系统中需要记录每个员工的在职状态,以确定员工当前是否在职。如果每次办理员工入职时需要手动设置在职状态,则显得比较烦琐。这时就可以为员工状态设置默认值约束,这样新增员工信息时,即使不填写员工在职状态,数据库也会为员工在职状态插入设置的默认值。
字段的默认值约束可以再创建数据表时进行设置,也可以在修改数据表时进行添加。
语法格式:<字段名> <数据类型> DEFAULT <默认值> ;
根据下面的表创建一个数据表,并查看
查看表
从上述执行结果可以看出,status字段中Default列对应的信息为1,说明创建数据表 rr ( 表名 )时成功地为status字段设置了默认值约束,默认值为1。
修改数据表时添加默认值约束与修改数据表时添加非空约束类似,可以在ALTER TABLE语句中通过使用MODIFY或CHANGE重新定义字段的方式添加默认值约束。
语法格式:ALTER TABLE 数据表名 MODIFY 字段名 字段类型 DEFAULT 默认值 ;
修改默认值,运行成功
查看
从上述执行结果可以看出,STATUS字段中Default列对应的信息为1,说明修改数据表rr ( 表名 )时成功地为STATUS字段添加了默认值约束,默认值为2
从上述执行结果可以看出,sal字段中Default列对应的信息为0.00,说明修改数据表rr ( 表名 )时成功地为sal字段添加了默认值约束,默认值为1.00
当数据表中的某列不需要设置默认值时,可以通过修改表的语句删除默认值约束。删除默认约束也是通过ALTER TABLE语句中的MODIFY或CHANGE重新定义字段的方式实现。
语法格式:ALTER TABLE 数据表名 CHANGE 字段名 字段名 字段类型 ;
运行成功
查看结果
从上述执行结果来看,sal 字段中Default 列对应的信息为NULL ,说明修改数据表rr (表名)时成功删除了sal 字段默认值约束。
在企业开发中,有时想要数据表为插入的新记录自动生成唯一的ID。例如,在员工管理系统中,当公司HR每次添加员工信息时,如果都需要手动填写员工工号,则会导致新增之前还需要想办法查询最新的工号是多少,也有可能查询出最新工号再进行手动插入时,发现该工号已被其他HR提前添加。此时,可以使用AUTO_INCREMENT解决这类问题,AUTO_INCREMENT可以为新行自动生成唯一标识。
在字段中设置 AUTO_INCREMENT 的基本语法格式。
语法格式:字段名 数据类型 AUTO_INCREMENT ;
使用AUTO_INCREMENT时,需要注意以下4点
(1)一个数据表中只能有一个字段设置AUTO_INCREMENT,设置AUTOINCREMENT字段的数据类型可以是整数和浮点类型,并且该字段必须定义为键,如UNIQUE 、PRIMARY KEY。
(2)如果为自动增长字段插入NULL,则该字段会自动增长值;如果插入的是一个具体值,则不会自动增长值。
(3)默认情况下,设置AUTO_INCREMENT的字段的值是从1开始自增。如果插入一个大于自动增长值的具体值,则下次自动增长的值为字段中的最大值加1。
(4)使用DELETE删除记录时,自动增长值不会减少或填补空缺。
根据这个表创建一个数据表
查看
从上述执行结果来看,由empno 字段中Extra 列对应的信息可以看出,创建数据表tt (表名)时成功地给字段empno 设置主键值的自动增长。