数据库基础---->5种约束、表关系 第四十天 2018.12.01
5种约束(constraint )
1、外键约束(froegin key)

外键:外键其他表的主键在使用表中称为外键
第一种:创建表时,同时创建外键约束
ENGINE=INNODB 为使用外键存储引擎是innodb。
存储引擎是innodb。nnoDB 是 MySQL 上第一个提供外键约束的数据存储引擎,除了提供事务处理外,InnoDB 还支持行锁,提供和 Oracle 一样的一致性的不
加锁读取,能增加并发读的用户数量并提高性能,不会增加锁的数量。InnoDB 的设计目标是处理大容量数据时最大化性能,它的 CPU 利用率是其他所有基于磁盘
的关系数据库引擎中最有效率的。
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;
第二种:已经创建表后,追加外键约束
#添加外键约束 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) 约束类型详解
注意:
1.如果需要外键约束,最好创建表同时创建外键约束
2.如果需要设置级联关系,删除时最好设置为 SET NULL
3.插入数据时,先插入主表中的数据,再插入从表中的数据
4.删除数据时,先删除从表中的数据,再删除主表中的数据
2、非空约束
关键字: NOT NULL ,表示 不可空. 用来约束表中的字段列
create table t1(
id int(10) not null primary key,
name varchar(100) null
);
3、主键约束
用于约束表中的一行,作为这一行的标识符,在一张表中通过主键就能准确定位到一行,因此主键十分重要。
主键这一行的数据不能重复且不能为空。
还有一种特殊的主键——复合主键。主键不仅可以是表中的一列,也可以由表中的两列或多列来共同标识
create table t3(
id int(10) not null,
name varchar(100) ,
primary key(id,name)
);
4、唯一约束
关键字: UNIQUE, 比较简单,它规定一张表中指定的一列的值必须不能有重复值,即这一列每个值都是唯一的。
当INSERT语句新插入的数据和已有数据重复的时候,如果有UNIQUE约束,则INSERT失败
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;
5、默认值约束
关键字: DEFAULT
INSERT语句执行时.,如果被DEFAULT约束的位置没有值,那么这个位置将会被DEFAULT的值填充
create table t5(
id int(10) not null primary key,
name varchar(255) default '张三'
);
#插入数据
INSERT into t5(id) VALUES(1),(2);
表与表的关系
一对一
一对多/多对一
多对多
数据库三范式



浙公网安备 33010602011771号