约束就是对表中的数据进行限定,保证数据的正确性、有效性和完整性。在MySQL数据库中,有比较重要的4种约束,共同维护着MySQL数据库的数据。
MySQL中4大约束具体如下:
下面我们来一一讲解MySQL数据库中4大约束:
主键约束列不允许重复,即任意两行的主键值都不相同;每行都具有一个主键值,也不允许出现空值;
单列主键创建有两种方式:
一种是直接对字段加primary key关键字:
CREATE TABLE student(
id INT PRIMARY KEY,
name VARCHAR(20),
)
另外一种是通过额外加约束的方式:
CREATE TABLE student(
id INT NOT NULL,
name VARCHAR(20),
CONSTRAINT PK_STUD_ID PRIMARY KEY(id)
//PK_STUD_ID为约束的名字
)
有时候一个列的字段可能有重复,可以联合多个列设为主键。
联合主键的语句:
CREATE TABLE student(
name VARCHAR(20),
class VARCHAR(20),
CONSTRAINT PK_STUD_ID PRIMARY KEY(name,class)
)
其它操作
//删除主键约束
ALTER TABLE 表名 DROP PRIMARY KEY;
//添加主键
ALTER TABLE 表名 ADD PRIMARY KEY(列名);
//修改列为主键
ALTER TABLE 表名 MODIFY 列名 数据类型 PRIMARY KEY;
外键约束是保证一个或两个表之间的参照完整性,保持数据一致性。表的外键可以是另一表的主键(也可以是唯一索引,详情看这里), 外键可以有重复的, 可以是空值。实现一对一或一对多关系。
创建外键约束
CREATE TABLE classes(
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(20)
);
//第一种:添加关键字
CREATE TABLE student(
id INT AUTO_INCREMENT,
name VARCHAR(20),
CONSTRAINT PK_ID PRIMARY KEY(id),
class_id INT REFERENCES classes(id)
)
//第二种:额外声明
CREATE TABLE student(
id INT AUTO_INCREMENT,
name VARCHAR(20),
CONSTRAINT PK_ID PRIMARY KEY(id),
class_id INT,
CONSTRAINT fk_class_id FOREIGN KEY(classe_id) REFERENCES classes(id)
)
外键约束的要求:
父表和子表必须使用相同的存储引擎,而且禁止使用临时表,数据表的存储引擎只能为InnoDB,default-storage-engine-INNODB外键列和参照列必须具有相似的数据类型,数字的长度或是有符号位必须相同,而字符 的长度可以不同外键列和参照列必须创建索引,如果外键列不存在索引的话,MySQL将自动创建索引。设定参照列:FOREIGN KEY(id) PEFERENCES provinces(id)
外键约束的参照操作:
CASCADE:从父表删除或更新且自动删除或更新子表中匹配的行
SET NULL:从父表删除或更新行,并设置子表中的外键列为NULL,如果使用该选项,必须保证子表列没有指定NOT NULL
RESTRICT:拒绝对父表的删除或更新操作
NO ACTION:标准SQL的关键字,在MySQL中与RESTRICT相同
其它操作
//删除外键约束
ALTER TABLE 表名 DROP FOREIGN KEY 外键约束名;
(创建外键的方法没有指定约束名称,系统会默认给外键约束分配外键约束名称,命名为student_ibfk_n)
//增加外键约束
ALTER TABLE 表名 ADD FOREIGN KEY 列名 REFERENCES 父表(对应列名);
指定表中某一列或多个列不能有相同的两行或者两行以上的数据存在,
唯一约束可以保证记录的唯一性
唯一约束的字段可以为空值(允许的空值有多个,但是最终存储的只有一个)
每张数据表可以存在多个唯一约束
UNIQUE KEY的用途:主要是用来防止数据插入的时候重复。
CREATE TABLE student
(
name CHAR(20) UNIQUE KEY
);
为表中列添加UNIQUE KEY
ALTER TABLE student MODIFY CHAR(20) UNIQUE KEY;
输入值必须是非空的,需要注意的是允许控制尽量不要太多,太多会更消耗数据库性能。
CREATE TABLE student
(
name CHAR(20) NOT NULL
);
以上就是MySQL数据库中4大约束,除此之外,其实MySQL中还存在着默认约束等其他约束,但总体而言,掌握主键约束、非空约束、唯一约束、外键约束这4种约束的使用,在MySQL数据库中对数据的约束是绰绰有余的。当然,我们也可以精益求精,对自己严格要求,力求掌握MySQL数据库中的全部约束。
代码小兵57603-29 17:54
代码小兵69606-07 17:03
代码小兵22104-13 18:12
代码小兵22104-20 20:22