mysql _外键、实体关系与ER图
2018-01-16 22:04
489 查看
外键约束 概念: A实体的某个字段指向 B实体的主键, 则称A实体的那个字段为该实体的外键, 一个表里可以有多个外键 drop table if exists class; create table class( class_no int(2) unsigned zerofill primary key auto_increment comment '班级编号', class_name varchar(30) not null comment '班级名称' ); insert into class values(1, '培优班'); insert into class values(2, '普通班'); drop table if exists student; create table student( stu_no int(2) unsigned zerofill primary key auto_increment comment '学员编号', stu_name varchar(30) not null comment '学员姓名', stu_sex varchar(3) not null comment '学员性别', stu_age tinyint(2) unsigned zerofill comment '学员年代', class_no int(2) unsigned zerofill comment '所在班级编号', foreign key(class_no) references class(class_no) ); insert into student values(01, '李白', '男', 18, 01); insert into student values(02, '杜甫', '男', 20, 01); insert into student values(03, '张飞', '男', 32, 02); insert into student values(04, '韩信', '男', 26, 02); insert into student values(05, '了龙', '男', 27, 02); insert into student values(06, '大乔', '女', 17, 01); insert into student values(07, '小乔', '女', 16, 01); insert into student values(08, '胖胖', '男', 18, 03); --报错,class表里没有class_no为03的数据 ps: 一个表(student)字段(class_no) 指向另一个表class的主键(class_no), 那么student表的class_no就是外键 被指向的表称为主表(父表), 在这里也就是class表 负责指向的表称为从表(子表), 在这里也是student表 ps: 在创建的时候应该先创建主表,然后再创建从表, 插入数据时也应该先插入主表数据 ps: 在删除表的时候应该先删除从表(子表), 然后再删除主表 例:show create table student\G; --可以通过查看表的创建信息来查看外键名 例: alter table student drop foreign key student_ibfk_1; --删除外键 student_ibfk_1(外键名) 例: alter table student add constraint stu_fk_class foreign key(class_no) references class(class_no); --创建一个外键 例: alter table student drop foreign key stu_fk_class; 设置级联操作 意思是在主表发生数据改变时,与之相关的从表应该要怎么处理 可以使用关键词on update, on delete来标识 允许的级联操作有: cascade: 如果主表更新或者删除数据时,那么从表也会执行相应的操作 set null: 如果主表更新或者删除数据时, 那么从表相应的数据会设置成null restrict: 拒绝主表的操作(默认) (on update restrict --拒绝主表的操作(默认)) alter table student add constraint stu_fk_class foreign key(class_no) references class(class_no) on update restrict; ********************************************************************************************************************************** (on update cascade --如果主表更新或者删除数据时,那么从表也会执行相应的操作) alter table student add constraint stu_fk_class foreign key(class_no) references class(class_no) on update cascade; update class set class_no = 3 where class_no = 1; ********************************************************************************************************************************** (on update set null --如果主表更新或者删除数据时, 那么从表相应的数据会设置成null) alter table student add constraint stu_fk_class foreign key(class_no) references class(class_no) on update set null; update class set class_no = 1 where class_no = 3; ********************************************************************************************************************************** alter table student add constraint stu_fk_class foreign key(class_no) references class(class_no) on delete restrict; delete from class where class_no = 1; ********************************************************************************************************************************** alter table student add constraint stu_fk_class foreign key(class_no) references class(class_no) on delete cascade; delete from class where class_no = 1; ********************************************************************************************************************************** alter table student add constraint stu_fk_class foreign key(class_no) references class(class_no) on delete set null; delete from class where class_no = 2; ********************************************************************************************************************************** 实体关系模型 实体模型它有三种成分: 实休,关系,属性 什么实体: 比如一个学生,老师,一个教室等等这些就是实体,比如在student表里每一行数据表示的就是每一个实体的信息 什么属性: 属性就是实体的属性,比如学生的年龄,性别 什么关系: 关系则是实体之间的主从关系,比如一个学生与班级的关系 实体之间有三种关系 一对一关系(1:1) 如果实体集(表)A 中的每一个实休(就是每行记录),在实体集B中只有一条数据与它对应(联系); 反之实体集B 中的每一个实体,在实体A中只有一条数据与它对应 这样的实体关系主是一对一关系 一对多关系(1:n) 如果实体集A中每一个实体,在实体集B中有n个与之对应 反之在实体集B中每一个实体,在实体集A中最多只有一个实体与之对应 这样的实体就是一对多关系 多对多关系(m:n) 如果实体集A中每一个实体,在实体集B中有n个与之对应 反之如果实体集B中每一个实体,在实体集A中也有n个与之对应 这样的实体关系就是多对多关系
相关文章推荐
- 【mysql】mysql中主外键关系(详细精讲)
- MySQL里主键与外键的关系
- mysql查看数据库简历的外键关系
- mysql|中主外键关系(转)
- 外键约束 以及 数据库中实体的对应关系(1==1,1==n,n==n)
- MySQL外键与外键关系说明(简单易懂)
- MySQL学习笔记 第五讲:实体和外键
- mysql 查看 外键的依赖关系
- mysql中主外键关系
- mysql实体关系
- ASP EF框架,实体框架(EntityFramework),ModelFirst,导航属性(一对多的表关系,外键)
- mysql多对多的关系如何表示(主键也可做外键)
- Mysql系列——数据库设计(4)——实体表之间的关系
- MySQL 主外键关系
- 外键约束 以及 数据库中实体的对应关系(1==1,1==n,n==n)
- mysql中主外键关系
- MySQL 实体间的对应关系
- mysql 查询数据库的外键关系
- 【mysql】mysql中主外键关系(详细精讲)
- MySql (四) ER图与实体关系映射