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  

 

posted @ 2017-07-17 13:53  扫驴  阅读(204)  评论(0编辑  收藏  举报