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存储表空间保存数据和索引
③ 选择存储引擎依据:性能和功能
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存储表空间保存数据和索引
③ 选择存储引擎依据:性能和功能
相关文章推荐
- MySQL学习笔记20151007数据类型主键外键多对多设计思想
- Mysql入门学习笔记(2)----外键约束
- MySQL学习笔记--DQL、DML、DDL、TCL语句,约束(主键、外键)
- 53.笔记 MySQL学习——外键和引用完整性
- [进阶]MySQL学习笔记四数据表外键ForeignKey
- mysql 数据库学习笔记 3 外键 和 select 子查询
- MySQL学习笔记(8)之实体间的联系
- MySql学习笔记----索引,外键
- MySQL学习笔记(9)之外键约束
- mysql学习笔记(六)--- 多表查询之外键、表连接、子查询、索引
- mysql学习笔记 ----外键.myisam和innodb的区别
- mysql学习笔记--插入日期--case--ifnull--if--lower、upper--concat--建立外键关联表
- (MYSQL学习笔记1)给数据库设置外键
- Mysql学习笔记(八):日期转换-int转date和date转int
- node.js学习笔记——练习使用mysql
- Mysql学习笔记(一) 并发控制
- MySQL学习笔记2:数据库的基本操作(创建删除查看)
- MySQL学习笔记之三:单表查询(Select)和常用函数
- MySQL高性能学习笔记
- 【原创】Mysql存储过程学习笔记1