一、实验简介
约束是一种限制,它通过对表的行或列的数据做出限制,来确保表的数据的完整性、唯一性。
二、实验内容
1、约束分类
约束类型 | 主键 | 默认值 | 唯一 | 外键 | 非空 |
---|---|---|---|---|---|
关键字 | PRIMARY KEY | DEFAULT | UNIQU | FORENGIN KEY | NOT NULL |
2、建立含约束表
1.可以使用git命令将需要的数据文件下载到本地文件夹:
git clone http://git.shiyanlou.com/shiyanlou/SQL3
2.在MySQL控制台中,加载sql数据文件
source /home/shiyanlou/Desktop/SQL3/MySQL-03-01.sql
3、主键
主键 (PRIMARY KEY)是用于约束表中的一行,作为这一行的标识符,在一张表中通过主键就能准确定位到一行,因此主键十分重要。
注意:行中的主键不能有重复且不能为空。
4、默认值约束
默认值约束 (DEFAULT) 规定,当有 DEFAULT 约束的列,插入数据为空时,将使用默认值。
注意:DEFAULT 约束只会在使用 INSERT 语句时体现出来,INSERT语句中,如果被 DEFAULT 约束的位置没有值,那么这个位置将会被 DEFAULT 的值填充。
5、唯一约束
唯一约束 (UNIQUE) 比较简单,它规定一张表中指定的一列的值必须不能有重复值,即这一列每个值都是唯一的。
注意:当 INSERT 语句新插入的数据和已有数据重复的时候,如果有 UNIQUE约束,则 INSERT 失败
6、外键约束
外键 (FOREIGN KEY) 既能确保数据完整性,也能表现表之间的关系。
一个表可以有多个外键,每个外键必须 REFERENCES (参考) 另一个表的主键,被外键约束的列,取值必须在它参考的列中有对应值。
注意:在 INSERT 时,如果被外键约束的值没有在参考列中有对应,则INSERT 失败
7、非空约束
非空约束 (NOT NULL),听名字就能理解,被非空约束的列,在插入值时必须非空。
注意:在MySQL中违反非空约束,不会报错,只会警告,标记为0值
CREATE TABLE department
(
dpt_name CHAR(20) NOT NULL, //非空约束
people_num INT(10) DEFAULT '10', //默认值约束
CONSTRAINT dpt_pk PRIMARY KEY (dpt_name) //主键约束
//CONSTRAINT 可自定义主键名 dpt_pk == dpt_name 均作为该表主键
);
CREATE TABLE employee
(
id INT(10) PRIMARY KEY, //主键约束 id 作为该表主键
name CHAR(20),
age INT(10),
salary INT(10) NOT NULL, //非空约束
phone INT(12) NOT NULL, //非空约束
in_dpt CHAR(20) NOT NULL, //非空约束
UNIQUE (phone), //唯一值约束,phone值在该表中唯一
CONSTRAINT emp_fk FOREIGN KEY (in_dpt) REFERENCES department(dpt_name)
//外键约束 in_dpt,并自定义外键名 emp_fk 参考department表 dpt_name 列
//使用INSERT语句时,该表in_dpt列值必须在department表dpt_name中存在
);
CREATE TABLE project
(
proj_num INT(10) NOT NULL,
proj_name CHAR(20) NOT NULL,
start_date DATE NOT NULL,
end_date DATE DEFAULT '2015-04-01', //默认约束
of_dpt CHAR(20) REFERENCES department(dpt_name), //外键约束
CONSTRAINT proj_pk PRIMARY KEY (proj_num,proj_name)
//复合主键约束(proj_num,proj_name),并自定义主键名proj_pk
);