MySQL 外键
来源:互联网 发布:文件夹整理软件 编辑:程序博客网 时间:2024/04/29 02:14
补充:
Comment ’注释内容’;
Set names gbk;客服端与服务器之间。
外键:
1.概念:
一个实体的某个字段指向另一个实体的主键,那么这个字段就是一个外键。
其中,被指向的实体,叫做主实体(主表),也叫父实体(父表)。
负责指向的实体,叫做从实体(从表),也叫子实体(子表)。
2.作用:
用于约束处于关系内的实体。
增加子表记录时,是否有与之对应的父表记录。
在删除或者更新主表记录时 ,从表该如何处理相关的记录。
3.语法:
Foreign key(外键字段)references表名 (主键字段)
子表建立字段指向父表主键。
4.设置级联操作(关联动作):
在主表数据发生改变时,与之关联的从表数据应该如何处理:
主表更新:On update
主表删除:On delete
允许级联动作:
Cascade :执行同联操作,如果主表被更新或者删除,那么从表也会执行相应的操作。
Set null :设置为null,表示从表不指向任何主表记录。
Restrict :拒绝主表的相关操作。
修改外键,必须先删除,再重新创建。
Ater table 表名 drop foreign key字段
删除外键需要通过指定完整的外键名称来达到目的:
可以通过在创建外键时,指定名称,
后者通过show create table 表名
来找到约束外键名称—CONSTRAINT’完整的外键名称’;
注意:此时删除的是约束条件,原本从表中的数据并不发生改变。
Ater table 表名 add foreign key字段
注意:此时新建的也是约束条件,原本从表中的数据并不发生改变。
On delete set null;删除时,将从表的外键值设置为null;
On delete cascade;删除时,从表的整条记录也将被删除;
On update ; 指的是,只有主表的主键发生变化,才会对从表产生反应;
On update restrict ;拒绝修改主表。
高级数据库管理员才使用,一般项目都不使用外键。
create table itcast_class(class_id int primary key auto_increment,class_name varchar(10) not null default '' comment '班级姓名')character set utf8;create table itcast_student(stu_id int primary key auto_increment,stu_name varchar(10),class_id int ,foreign key (class_id) references itcast_class (class_id))character set utf8;insert into itcast_student values (null,'Mike',1);/*Cannot add or update a child row: a foreign key constraint fails (`php_one`.`itcast_student`, CONSTRAINT `itcast_student_ibfk_1` FOREIGN KEY (`class_id`) REFERENCES `itcast_class` (`class_id`))没有新建class_id 为1 的班级,因此没有对应找到相应的班级。*/insert into itcast_class values(null,'php0331');insert into itcast_student values (null,'Mike',1);/*成功*/select * from itcast_student;/*对foreign的修改*/show create table itcast_student;alter table itcast_student drop foreign key itcast_student_ibfk_1; /*删除外键-完整的外键名称*/show create table itcast_student\G; /*约束字段消失*/alter table itcast_student add foreign key (class_id) references itcast_class (class_id)on delete set null;select * from itcast_class;select * from itcast_student;delete from itcast_class where class_id=1;select * from itcast_class; /*主表为empty*/select * from itcast_student; /*class_id 为null,前提是class_id可以为null*//*先维护数据*/alter table itcast_student drop foreign key itcast_student_ibfk_1; show create table itcast_student\G;alter table itcast_student add foreign key (class_id) references itcast_class (class_id)on delete cascade;delete from itcast_class where class_id=1;select * from itcast_class; /*主表为empty*/select * from itcast_student; /*从表为empty*//*先维护数据*/alter table itcast_student drop foreign key itcast_student_ibfk_1; show create table itcast_student\G;alter table itcast_student add foreign key (class_id) references itcast_class (class_id)on delete cascadeon update restrict;update itcast_class set class_id=1 where class_name='php0331'; /*有限制restrict,无法更新*/
- MySQL - 外键
- mysql外键
- mysql 外键
- mysql 外键
- MYSQL 外键
- MySql 外键
- MYSQL外键
- mysql 外键
- mysql 外键
- MySQL外键
- mysql 外键
- mysql 外键
- mysql外键
- mysql外键
- mysql外键
- mysql外键
- mysql外键
- mysql 外键
- c系列之异常的抛出
- Codeforces731C-Socks(并查集)
- 统计推断(statistical inference)
- ZooKeeper典型应用场景(转)
- const 限定符、const引用、const指针,顶层const和底层const
- MySQL 外键
- 防止JS路径跳转地址栏带参数
- js闭包
- 收起与展开效果
- Java8 lambda表达式
- Android Stduio统计项目的代码行数
- Struts2中的OGNL详解
- AVD问题 Could not initialize emulated framebuffer
- HDU2795 Billboard(线段树)