MYSQL数据库-约束
MYSQL中,常用的几种约束:
约束类型: | 主键 | 默认值 | 唯一 | 外键 | 非空 |
---|---|---|---|---|---|
关键字: | PRIMARY KEY | DEFAULT | UNIQUE | FOREIGN KEY |
NOT NULL |
===================================================
主键(PRIMARY KEY)是用于约束表中的一行,作为这一行的标识符,在一张表中通过主键就能准确定位到一行,因此主键十分重要。主键要求这一行的数据不能有重复且不能为空。
还有一种特殊的主键——复合主键。主键不仅可以是表中的一列,也可以由表中的两列或多列来共同标识。复合主键见project表,proj_num和proj_name共同构成了该表的主键。而前面的constraint表示给约束起个名字,就像这张表里的,复合主键的名字叫做proj_pt。这个不重要,可不起名字
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), CONSTRAINT proj_pk PRIMARY KEY (proj_num,proj_name) );
===================================================
默认值约束(DEFAULT)很简单,不解释了
===================================================
唯一约束(UNIQUE)比较简单,它规定一张表中指定的一列的值必须不能有重复值,即这一列每个值都必须是唯一的。
如employee表中的phone
===================================================
外键(FOREIGN KEY)
一个表可以有多个外键,每个外键必须REFERENCES(参考)另一个表的主键
,
如employee表有外键约束in_dpt(这个表是员工表,in_dpt字段为员工所在部门,它参考department表(部门表)的主键dpt_name)。
被外键约束的值必须在参考列中有对应。就比如在这个例子中,员工表中的外键字段只能添加部门表中存在的数据.
把employee称为从表,department为主表
默认情况下(声明外键的语句中没有on delete cascade或on delete cascade set null),部门表中的数据如果被员工表中的数据使用了,则部门表的这个数据不可以删除
而级联删除指的是:删除主表的数据时,关联的从表数据也删除。
那么就需要在建立外键约束的后面增加on delete cascade或on delete set null, 前者是级联删除,
后者是将从表的关联列的值设置为null
===================================================
非空约束(NOT NULL),听名字就能理解,被非空约束的列,在插入值时必须非空。
在MySQL中违反非空约束,不会报错,只会有警告.
1 CREATE DATABASE mysql_shiyan; 2 3 use mysql_shiyan; 4 5 CREATE TABLE department 6 ( 7 dpt_name CHAR(20) NOT NULL, 8 people_num INT(10) DEFAULT '10', 9 CONSTRAINT dpt_pk PRIMARY KEY (dpt_name) 10 ); 11 12 CREATE TABLE employee 13 ( 14 id INT(10) PRIMARY KEY, 15 name CHAR(20), 16 age INT(10), 17 salary INT(10) NOT NULL, 18 phone INT(12) NOT NULL, 19 in_dpt CHAR(20) NOT NULL, 20 UNIQUE (phone), 21 CONSTRAINT emp_fk FOREIGN KEY (in_dpt) REFERENCES department(dpt_name) on delete cascade 22 ); 23