MySQL——约束

一、外键约束

什么是约束:约束是一种限制,它通过对表的行或列的数据做出限制,来确保表的数据的完整性、唯一性

1.创建表时,同时创建外键约束

CREATE TABLE IF NOT EXISTS dept (
    did int not null auto_increment PRIMARY KEY,
    dname VARCHAR(50) not null COMMENT '部门名称'
)ENGINE=INNODB DEFAULT charset utf8;
   
CREATE TABLE IF NOT EXISTS person(
    id int not null auto_increment PRIMARY KEY,
    name VARCHAR(50) not null,
    age TINYINT(4) null DEFAULT 0,
    sex enum('','','不详') NOT NULL DEFAULT '不详',
    salary decimal(10,2) NULL DEFAULT '250.00',
    hire_date date NOT NULL,
    dept_id int(11) DEFAULT NULL,
   CONSTRAINT fk_did FOREIGN KEY(dept_id) REFERENCES dept(did) -- 添加外键约束
)ENGINE = INNODB DEFAULT charset utf8;

 

2.已经创建表后,追加外键约束

#添加外键约束
ALTER table person add constraint fk_did FOREIGN key(dept_id) REFERENCES dept(did);
 
#删除外键约束
ALTER TABLE person drop FOREIGN key fk_did;

 

定义外键的条件:

(1)外键对应的字段数据类型保持一致,且被关联的字段(即references指定的另外一个表的字段),必须保证唯一

(2)所有tables的存储引擎必须是InnoDB类型.

(3)外键的约束4种类型: 1.RESTRICT 2. NO ACTION 3.CASCADE 4.SET NULL

RESTRICT
同no action, 都是立即检查外键约束

NO ACTION
如果子表中有匹配的记录,则不允许对父表对应候选键进行update/delete操作  

CASCADE
在父表上update/delete记录时,同步update/delete掉子表的匹配记录 

SET NULL
在父表上update/delete记录时,将子表上匹配记录的列设为null (要注意子表的外键列不能为not null) 
约束类型

 

(4)建议:1.如果需要外键约束,最好创建表同时创建外键约束.

       2.如果需要设置级联关系,删除时最好设置为 SET NULL.

注:插入数据时,先插入主表中的数据,再插入从表中的数据。

       删除数据时,先删除从表中的数据,再删除主表中的数据。

二、其他约束类型

1.非空约束

 关键字: NOT NULL ,表示 不可空. 用来约束表中的字段列

create table t1(
       id int(10) not null primary key,
       name varchar(100) null
 );  

 

2.主键约束

 用于约束表中的一行,作为这一行的标识符,在一张表中通过主键就能准确定位到一行,因此主键十分重要。

create table t2(
    id int(10) not null primary key
);

 

注意: 主键这一行的数据不能重复不能为空

还有一种特殊的主键——复合主键。主键不仅可以是表中的一列,也可以由表中的两列或多列来共同标识

create table t3(
    id int(10) not null,
    name varchar(100) ,
    primary key(id,name)
);

 

3.唯一约束

 关键字: UNIQUE, 比较简单,它规定一张表中指定的一列的值必须不能有重复值,即这一列每个值都是唯一的。

create table t4(
    id int(10) not null,
    name varchar(255) ,
    unique id_name(id,name)
);
//添加唯一约束
alter table t4 add unique id_name(id,name);
//删除唯一约束
alter table t4 drop index id_name;

 

注意: 当INSERT语句新插入的数据和已有数据重复的时候,如果有UNIQUE约束,则INSERT失败. 

4.默认值约束  

关键字: DEFAULT

create table t5(
    id int(10) not null primary key,
    name varchar(255) default '张三'   
);
#插入数据
INSERT into t5(id) VALUES(1),(2);

 

注意: INSERT语句执行时.,如果被DEFAULT约束的位置没有值,那么这个位置将会被DEFAULT的值填充

posted @ 2018-02-28 16:10  有事请烧纸  阅读(157)  评论(0)    收藏  举报