/* 一、数据约束
约束是一种限制,它通过对表的行或列的数据做出限制,来确保表的数据的完整性、唯一性。
MYSQL中,常用的几种约束:
约束类型: 主键 默认值 唯一 外键 非空
关键字: PRIMARY KEY DEFAULT UNIQUE FOREIGN KEY NOT NULL
*/
/*1.1、默认值约束(default)——在用用户不对默认值的字段进行数据插入时,就默认地使用默认字段
特别注意:默认字段是可以为空的,也就是说当用户插入空(NULL)或''时是被允许的。
*/
CREATE TABLE student(
sid int,
sname VARCHAR(10),
gender VARCHAR(2) DEFAULT '男'
)
/*1.2、非空(NOT NULL)
被非空约束的列,在插入值时必须非空。
在MySQL中违反非空约束,不会报错,只会有警告.
*/
CREATE TABLE student(
sid int NOT NULL,
sname VARCHAR(10),
gender VARCHAR(2) DEFAULT '男'
)
/*1.3、唯一约束(UNIQUE)比较简单,它规定一张表中指定的一列的值必须不能有重复值,即这一列每个值都是唯一的。
当INSERT语句新插入的数据和已有数据重复的时候,如果有UNIQUE约束,则INSERT失败.
注意:唯一的字段是可以为空的(NULL),且NULL不受唯一约束。也就是说可以存在多条字段为NUll的数据。
*/
CREATE TABLE student(
sid int UNIQUE,
sname VARCHAR(10),
gender VARCHAR(2) DEFAULT '男'
)
/* 1.4、主键(PRIMARY KEY)是用于约束表中的一行,作为这一行的标识符,在一张表中通过主键就能准确定位到一行,
因此主键十分重要。主键要求这一行的数据不能有重复且不能为空。
还有一种特殊的主键——复合主键。主键不仅可以是表中的一列,也可以由表中的两列或多列来共同标识
通常情况下,每一张表都会设置一个主键的字段,用于标记每一条记录的唯一性。
*/
CREATE TABLE student(
sid int PRIMARY KEY,
sname VARCHAR(10),
gender VARCHAR(2) DEFAULT '男'
)
/*1.5、自增长(AUTO_INCREMENT)
当只增长字段有位数要求时,可以使用 ZEROFILL进行填充
*/
CREATE TABLE student(
sid int PRIMARY KEY AUTO_INCREMENT,
sname VARCHAR(10),
gender VARCHAR(2) DEFAULT '男'
)
/*1.6、外键约束
外键(FOREIGN KEY)既能确保数据完整性,也能表现表之间的关系。
一个表可以有多个外键,每个外键必须REFERENCES(参考)另一个表的主键,
被外键约束的列,取值必须在它参考的列中有对应值。
在INSERT时,如果被外键约束的值没有在参考列中有对应,比如以下命令,
参考列(department表的dpt_name)中没有dpt3,则INSERT失败
*/
CONSTRAINT `FK_kfaoihyj5oll835mvidvgsxp` FOREIGN KEY (`DEPARTMENT_ID`) REFERENCES `ssh_department` (`ID`)
关键字 外键名称 外键字段 关联表(字段)
其中ssh_employee为副表,ssh_department为主表
注意:
(1)、当外键存在时,添加数据的顺序:先主表后副表;
(2)、当外键存在时,修改数据的顺序:先副表后主表;
/*1.7、级联操作
当我们设置了外键约束后,必须先修改或者删除副表中的所有关联数据,才能修改或者删除主表。
但很多时候,我们希望直接修改或删除主表的数据,从而影响副表数据。因此就需要级联设置来完成。
*/
CONSTRAINT emlyee_dept_fk FOREIGN KEY(deptId) REFERENCES dept(id) ON UPDATE CASCADE ON DELETE CASCADE
-- ON CASCADE UPDATE :级联修改
-- ON DELETE CASCADE :级联删除
-- 注意: 级联操作必须在外键基础上使用
mysql数据库的约束(三)
最新推荐文章于 2023-06-06 23:51:00 发布