码迷,mamicode.com
首页 > 数据库 > 详细

( 10 )MySQL中的外键

时间:2017-10-30 16:56:41      阅读:163      评论:0      收藏:0      [点我收藏+]

标签:cad   结构   更新   一个   索引   基本   控制力   多个   失败   

MySQL中的外键

外键
外键: foreign key ,外面的键(键不在自己表中) , 如果一张表中有一字段(非主键)指向另外一张表的主键 , 那么该字段称之为外键.
一张表可以有多个外键.
新增外键
创建外键的两种方式:
1 创建表的时候创建外键
2 创建表之后增加创建外键
外键要求字段本身必须先是一个索引(普通索引),如果字段本身没有索引,外键先创建一个索引然后才会创建外键本身
在新增表之后增加外键: 修改表结构
基本语法:
alter table 表名 add [constraint 外键名字] foreign key (外键字段) references 父表(主键字段);
修改外键
外键不可修改 : 只能先删除后新增
删除外键
删除外键基本语法:
alter table 表名 drop foreign key 外键名;
--说明表中有多个字段但名字不能相同
外键删除不能通过查看表结构查看是否被删除 ,可以通过表创建语句查询
外键作用
外键默认的作用有两点,一个对父表,一个对子表(外键字段所在的表)
对子表约束:
子表数据进行写操作(增和改)的时候,如果对应的外键字段在父表中找不到对应的匹配,那么会操作失败(约束子表数据操作)
例: 把子表中的一个同学 放到 父表中的班级中 , 但是父表中不含有这个班级 -- 失败
对父表约束:
父表数据进行写操作(删和改:都必须涉及到主键本身)
例 : 人走茶凉
如果对应的主键在子表中已经被数据所引用 那么就不允许操作.
外键条件
1.外键要存在必须保证搜索引擎是innodb(默认的),否则外键可以创建成功,但是没有效果
2.外键字段的字段类型必须与父表的主键类型完全一致.
3.一张表中外键名字不能重复
4. 增加外键的字段(数据已经存在),必须保证数据与父表主键对应
数据已存在,不能建立外键,因为不能改变对应关系.
外键约束
所谓的外键约束就是指外键的作用,通过对外键的需求进行定制操作.
约束模式有三种: 都是对父表的操作
Distinct : 严格模式(默认的) 父表不能删除或更新一个已经被子表数据引用的记录
Cascade : 级联模式 父表的操作,对应子表关联的数据也跟着操作
Set Null : 置空模式 父表操作之后,子表对应的数据(外键字段)被置空
通常的一个合理的做法(约束模式):删除的时候子表被置空,更新的时候子表级联操作
基本语法:
foreign key (外键字段) references 父表(主键字段) on delete 约束模式 on update 约束模式
 
foreign key (外键字段) references 父表(主键字段) on delete set null on update cascade
外键使用的时候降低了程序的控制力 , 外键好用 ,但是不敢用.
 

 
 
 

( 10 )MySQL中的外键

标签:cad   结构   更新   一个   索引   基本   控制力   多个   失败   

原文地址:http://www.cnblogs.com/zslaona/p/7754993.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!