外键之数据库
原创
©著作权归作者所有:来自51CTO博客作者开花白菜的原创作品,请联系作者获取转载授权,否则将追究法律责任
外键
一、外键的介绍
1、外键的定义:
让一张表记录的数据不要太过于冗余,在数据库中对表的关系进行解耦,尽量让表的数据单一化。
2、外键作用
外键的作用:保持数据的一致性和完整性
3、mysql 数据库中存储引擎?
innodb (外键要使用innodb存储引擎)
myisam(默认)
4、查看存储引擎
格式:show table status from 库名 where name="表名" ;
案例:show table status from hz10 where name="emp" ;
===============================
建表语句:
(1)通过建表语句来创建主键
mm 表
nn 表
mm表如下创建:
create table mm (id int(10) primary key , name varchar(10))ENGINE=innodb ; (父表)
nn表 如下创建:
create table nn (sid int(10) PRIMARY key ,sname varchar(20) , constraint fk_wj foreign key(sid) REFERENCES mm(id) )engine=innodb ; (子表)
constraint 外键名 指定外键
foreign key (子表)指定字段
REFERENCES 父表(父表字段) 引用外部表的主键
(2)直接创建键(表先建好)
创建 ss 表: (父表)
create table ss (id int(10) primary key , name varchar(10))ENGINE=innodb;
创建 cc 表:(子表)
create table cc (sid int(10) primary key , sname varchar(10))ENGINE=innodb
格式:alter table 子表 add CONSTRAINT 外键名 foreign key (子表字段名) REFERENCES 父表(父表的字段名)
案例:alter table cc add CONSTRAINT ss_key foreign key (sid) REFERENCES ss(id)
===============================
查看外键:
方法一:
方法二:
格式:show create table 表名 ;
show create table cc ;、
===============================
删除外键:
格式:alter table 表名 drop foreign key 外键名
案例:alter table cc drop foreign key ss_key ;
===============================
一、子表和父表之间关系:
1、在子表插入数据,父表不存在的数据无法插入(报错)
案例:INSERT into cc VALUES (1,"aa")
报错(父表不存在的数据,子表无法插入)
Cannot add or update a child row: a foreign key constraint fails (`hz10`.`cc`, CONSTRAINT `ss_key` FOREIGN KEY (`sid`) REFERENCES `ss` (`id`))
2、在子表插入数据,父表存在的数据才能插入
案例 :
INSERT into ss VALUES (1,"wq") ; 先插入父表
INSERT into cc VALUES (1,"aa")
3、父表和子表都为空数据,子表无法插入数据,父表可以插入数据
4、存在外键时:父表删除数据,需要先删除子表数据
4.1子表和父表数据都存在,直接删除父表,报错,无法删除
案例:DELETE from ss where id=1 ; 直接删除父表
Cannot delete or update a parent row: a foreign key constraint fails (`hz10`.`cc`, CONSTRAINT `ss_key` FOREIGN KEY (`sid`) REFERENCES `ss` (`id`))
4.1子表和父表数据都存在,直接先删除子表 ,在删除父表
DELETE from cc where sid=1 ; 先删除子表数据DELETE from ss where id=1 ; 在删除父表数据
4、主键名可以修改
alter table cc add CONSTRAINT ss foreign key (sid) REFERENCES ss(id)
===============================
总结:
1、如何创建外键?
两种方法:1、建表时创建 父表 在子表设置外键
格式:create table 表名(sid int(10) PRIMARY key ,sname varchar(20) , constraint fk_wj foreign key(sid) REFERENCES mm(id) )engine=innodb ; (子表)
2、建表后创建
格式:alter table 子表表名 add CONSTRAINT 外键名 foreign key (子表字段) REFERENCES 父表(父表字段) engine=innodb ;
2、父表和子表的关系?
(1)当父表不存在的数据,子表无法插入
(2)当两表为空时,子表无法插入数据,父表可插入
(3)当父表删除数据,需要先删除子表数据
3、公司为什么用外键?
(1)保存数据的一致性和完整性
(2)公司数据量大,造成数据重复,新旧表维护成本大,使用外键让公司数据进行分类 和管理,让基础数据放在主表上,子表单一化,这样避免数据的冗余。

提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
mysql数据库外键代码怎么写 mysql数据库外键类型
约束 1.约束保证数据的完整性和一致性 2.约束分为表级约束和列级约束 3.约束的类型包括: &nb
mysql数据库外键代码怎么写 mysql 外键 mysql外键 mysql设置外键 mysql