第四章:MySQL的约束
1、了解什么是约束
约束是一种限制,它通过对表的行或列的数据做出限制,来确保表的数据的完整性、唯一性。
图书编号(book_id) | 类别编号(book_category_id) | 书名(book_name) | 作者(author) |
20150201 | 3 | Java编程思想 | (美)埃克尔 |
20150202 | 4 | PHP和MySQL Web开发 | LukeWelling等 |
20150301 | 3 | Sping源码深度解析 | 郝佳 |
20160801 | 5 | 中医儿科学 | 汪受传 |
20170401 | 5 | 小儿推拿秘笈 | 李德修 |
2、约束的类型
MySQL中常用的几种约束类型:
约束类型: | 非空约束 | 主键约束 | 唯一约束 | 默认约束 | 外键约束 | 自增 |
---|---|---|---|---|---|---|
关键字: | not null | primary key | unique | default | foreign key | auto_increment |
1)、非空约束 not null :非空约束用于确保当前列的值不为空值,非空约束只能出现在表对象的列上。
2)、主键约束 primary key:主键约束相当于 唯一约束 + 非空约束 的组合,主键约束列不允许重复,也不允许出现空值。
每个表最多只允许一个主键,建立主键约束可以在列级别创建,也可以在表级别创建。
当创建主键的约束时,系统默认会在所在的列和列组合上建立对应的唯一索引。
3)、 唯一约束unique:唯一约束是指定table的列或列组合不能重复,保证数据的唯一性。
唯一约束不允许出现重复的值,但是可以为多个null。
同一个表可以有多个唯一约束,多个列组合的约束。
在创建唯一约束时,如果不给唯一约束名称,就默认和列名相同。
唯一约束不仅可以在一个表内创建,而且可以同时多表创建组合唯一约束。
4)、默认约束 default :当插入时没有插入值时,会自动插入默认值。默认值约束相对于非空约束而说。
5)、外键约束 foreign key:外键约束是保证一个或两个表之间的参照完整性,外键是构建于一个表的两个字段或是两个表的两个字段之间的参照关系
1、理解非空约束的作用;
2、掌握添加和删除非空约束的方法;
空值与非空值
NULL:字段控制可以为空。
NOT NULL:字段值禁止为空。
非空值约束(Not Null constraint)指字段的指不能为空。对于使用了非空约束的字段如果用户在添加数据时,没有指定值,数据系统会报错。
3、语法规则:
列名 数据类型 NOT NULL
1)、创建表时添加非空约束
CREATE TABLE bookinfo(
book_id INT,
book_name VARCHAR(20) NOT NULL
);
2)、通过修改表为指定列添加非空约束
AlTER TABLE bookinfo MODIFY book_name VARCHAR(20) NOT NULL;
3)、删除非空约束
ALTER TABLE bookinfo MODIFY book_name VARCHAR(20);
本节目标:
1、理解主键约束的作用
主键约束(Primary Key Constraint)要求主键列的数据唯一,并且不允许伟空,主键能够唯一地标识表中的一条记录。
一张表单中最多有一个主键约束;
2、掌握添加和删除主键约束的方法
主键的类型:单字段主键和多字段联合主键。
单字段主键是由一个字段(列)组成。
①、在定义列的同时指定主键
列名 数据类型 PRIMARY KEY
②、在定义列的后边指定主键
[CONSTRAINT <约束名>] PRIMARY KEY(列名);
▶多字段联合主键(或者叫复合主键),主键由多个字段(列)联合组成。
PRIMARY KEY (字段1,字段2,……字段n);
例:
CREATE TABLE borrowinfo(
book_id int,
card_id CHAR(18),
PRIMARY KEY (book_id,card_id)
);
▶通过修改表为列添加主键
CREATE TABLE bookinfo(
book_id INT,
book_name VARCHAR(20) NOT NULL
);
AlTER TABLE bookinfo MODIFY book_id INT PRIMARY KEY;
AlTER TABLE bookinfo ADD PRIMARY KEY(book_id);
AlTER TABLE bookinfo ADD CONSTRAINT PK_ID PRIMARY KEY(book_id);
▶删除主键
ALTER TABLE bookinfo DROP PRIMARY KEY;
本节目标
1、理解唯一约束的作用
唯一约束(Unique Constraint)要求该列唯一,允许为空,唯一约束可以确保一列或者几列不出现重复值。
2、掌握添加和删除唯一约束的方法
语法规则如下:
①、定义完列之后直接定义唯一约束:
列名 数据类型 UNIQUE
②、定义完所有列之后指定唯一约束:
[CONSTRAINT <约束名>] UNIQUE(<列名>)
▶创建表时添加唯一约束:
create table bookinfo(
book_id INT PRIMARY KEY,
book_name varchar(20) UNIQUE NOT NULL
);
或者:
CREATE TABLE bookinfo(
book_id INT PRIMARY KEY,
book_name VARCHAR(20) NOT NULL,
CONSTRAINT uk_bname UNIQUE (book_name)
);
▶修改表时添加唯一约束
ALTER TABLE bookinfo MODIFY book_name varchar(20) UNIQUE;
ALTER TABLE bookinfo ADD UNIQUE(book_name);
ALTER TABLE bookinfo ADD CONSTRAINT uk_bname UNIQUE(book_name);
▶删除唯一约束
ALTER TABLE bookinfo DROP INDEX uk_bname;
ALTER TABLE bookinfo DROP KEY uk_bname;
▶唯一约束和主键约束的区别
一个表中可以有多个UNIQUE声明,但只能有一个PRIMARY KEY 声明。
声明为PRIMARY KEY 的列不允许有空值;
但是声明为UNIQU的列允许空值。
本节目标:
1、理解主键约束的作用
默认约束(Default Constraint)指定某列的默认值。
语法规则:
列名 数据类型 DEFAULT 默认值
2、掌握添加和删除默认约束的方法
▶创建表时添加约束
CREATE TABLE bookinfo(
book_id INT PRIMARY KEY,
press VARCHAR(20) DEFAULT '机械工业出版社'
);
▶修改表时添加约束
ALTER TABLE bookinfo
MODIFY press VARCHAR(10) DEFAULT '机械工业出版社';
ALTER TABLE bookinfo
ALTER COLUMN press SET DEFAULT '机械工业出版社';
▶删除约束
ALTER TABLE bookinfo MODIFY press VARCHAR(20);
ALTER TABLE bookinfo
ALTER COLUMN press DROP DEFAULT;
本节目标
1、理解外键约束的作用
外键用来再两个表的数据之间建立链接,它可以是一列或者多列。一个表可以又一个或多个外键。
外键对应的是参照完整性,一个表的外键可以为空值,若不为空值,则每一个外键值必须等于另一个表中主键的某个值。
外键的作用是保持数据的一致性、完整性。
先有父表才会有子表;
2、掌握添加和删除外键约束的方法
▶使用外键约束
语法格式:
[CONSTRAINT<外键约束名>] FOREIGN KEY (列名)
references<主表名>(主键)
▶创建表时添加外键约束
CREATE TABLE bookcategory(
category_id INT PRIMARY KEY,
category VARCHAR(20),
parent_id INT
);
CREATE TABLE bookinfo(
book_id INT PRIMARY KEY,
book_category_id INT,
CONSTRAINT fk_cid FOREIGN KEY (book_category_id) REFERENCES bookcategory(category_id)
);
▶修改表时添加外键约束
ALTER TABLE bookinfo
ADD FOREIGN KEY(book_category_id)
REFERENCES bookcategory(category_id);
▶删除外键约束
ALTER TABLE bookinfo DROP FOREIGN KEY fk_cid;
▶外键约束的参照操作
CASCADE:从父表删除或更新且自动删除或更新子表中匹配的行。
CREATE TABLE bookinfo(
book_id INT PRIMARY KEY,
book_category_id INT,
CONSTRAINT fk_cid FOREIGN KEY (book_category_id) REFERENCES bookcategory(category_id) ON DELETE CASCADE