MYSQL外键约束
外键约束
-- 外键约束示例语法
CONSTRAINT fk_rl FOREIGN KEY(deptId) REFERENCES tb_dept1(id)
外键特点:
定义一个外键时,需要遵守下列规则:
- 主表必须已经存在于数据库中,或者是当前正在创建的表
- 必须为主表定义主键
- 主键不能包含控制,单允许在外键中出现空值。也就是说,只要外键的每个非空值出现在指定的主键中,这个外键的内容就是正确的。
- 在主表的表名后面指定列名和列名的组合。这个列或列的组合必须是主表的
主键
或候选键
。
外键关联的必然是主表的主键
。
- 外键中列的数目必须和主表的主键中列的数目相同
- 外键中列的数据类型必须和主表主键中对应列的数据类型相同。
多表关系:
一对一
一对多,多对一
多对多
查看创建表
-- 指定默认字符集以支持中文
-- 解决MySQL5.7字符问题
DEFAULT CHARSET=utf8mb4;
-- 查看创建表
show create table 表名;
操作外键约束
修改和删除时,中间从表
可以随便删除
和修改
,但是两边的主表
受从表
依赖的数据
不能删除或者修改。
创建表时设置外键约束
创建主表
和从表
,为从表
指定外键
-- 创建(从)表时指定外键约束
CREATE TABLE score (
id int(10) NOT NULL PRIMARY KEY auto_increment,
-- 非空,主键,自增
sid INT(10),
name varchar(50) DEFAULT NULL,
subject varchar(50) DEFAULT NULL,
score varchar(50) DEFAULT NULL,
CONSTRAINT fk_sid FOREIGN KEY(sid) REFERENCES 主表名(主表的主键字段)
-- 为本表(从表)创建外键,指定主表的主键字段
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4; -- 指定数据库引擎和数据库编码
修改表时添加外键约束
-- 修改表时添加外键约束
alter table 从表名
add CONSTRAINT 外键约束名称 FOREIGN KEY(从表列名) REFERENCES 主表名(主表主键名)
-- 示例:
alter table 表名
add CONSTRAINT fk_sid FOREIGN KEY(sid) REFERENCES studentinfo(id)
外键约束下删除数据
删除外键约束
-- 删除外键约束
ALTER TABLE 从表名 drop FOREIGN KEY 外键名