您的位置:首页 > 数据库 > MySQL

MySQL学习笔记 第五讲:实体和外键

2013-07-14 17:48 281 查看
第五讲:实体和外键

1. 1:1关系:两个实体表内,存在相同的主键字段
如果记录的主键值等于另一个关系表内记录的主键值,则两条记录对应1:1
2.1:n关系:一个实体对应多个其他实体
例:一个班级对应多个学生
设计:在多的那端增加一个字段,用于指向该实体所属的另外实体的标识
3.m:n关系:多对多
设计:典型的方法:利用一个中间表表示实体之间的对应关系,中间表的每个记录,表示一个关系
可以分析:一个m:n通过1:m 1:n来实现
4.外键(foreign key)
如果一个实体的某个字段(student:class_id),指向(引用)另个实体(class:class_id)的主键,就称student实体的class_id是外键
①被指向的实体称为主实体(主表),也叫做父实体(父表);(class)
负责指向的实体称为从实体(从表),也叫子实体(子表);(student)
②作用:用于约束处于关系内的实体
约束:增加字表记录,是否有与之对应的父表记录,在删除或更新主表记录时,子表应该如何处理相关的记录
③定义外键:在从表上增加一个外键字段,指向主表主键,使用关键字foreign key
foreign key (class_id) references incast_class (class_id);
当前表id 关联 目标表id
④设置级联操作
ⅰ. 在主表数据发生改变时,与之关联的从表数据应该如何处理:
主表更新 on update :只有主表的主键发生变化,才会对从表产生影响
主表删除 on delete
ⅱ.允许级联动作:cascade关联操作,若主表被更新、删除,从表也会执行相关的操作
set null设置为null,表示从表不指向任何主表记录
restrict:拒绝主表相关操作
⑤修改外键
先删除,再新建,通过修改表完成
ⅰ.alter table tbl_name drop foreign key (class_id);
删除外键需要通过外键名称达到目的,可以通过在创建外键时,制定名称或者使用mysql默认生成的名称
ⅱ.alter table tbl_name add foreign key (class_id) references iccast_class(class_id) on delete null;
删除时,将从表外键设为null。
若为on delete cascade;删除时,从表数据也随之删除。
若为on update restrict;更新时拒绝相关操作。
5.存储引擎
①表类型:默认的服务器类型,通过my.ini可以配置:
default - storage - engine = INNODB
注:在创建表时,或者编辑表时,可以指定表的存储引擎,利用表属性:engine 引擎类型
engine myisam engine innodb
例:alter table tbl_name engine myisam;
②innodb & myisam的区别
ⅰ.myisam:一个表三个文件:
tbl_name.frm 结构
tbl_name.myd 数据
tbl_name.myi 索引
ⅱ.innodb:一个表一个文件
tbl_name.frm 结构
注:所有的innodb表都使用相同的innodb存储表空间保存数据和索引
③ 选择存储引擎依据:性能和功能
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: