外键 foreign key
2013 年 4 月 17 日星期三
09:48
概念:
如果一个实体的( student ) 的某个字段 (student:class_id) ,
指向(引用)另个实体 (class) 的主键( class:class_id) ,
就称 Student 实体的 class_id 是外键。
被指向的实体,称之为 主实体(主表),也叫父实体(父表)。 class
负责指向的实体,称之为 从实体(从表),也叫子实体(子表)。 Student
作用:
保证数据的完整性。
用于约束处于关系内的实体。
增加子表记录时,是否有与之对应的父表记录。
在删除或者更新主表记录时,从表应该如何处理相关的记录。
定义一个外键:
在从表上,增加一个外键字段,指向主表的主键。
使用关键字 foreign key
foreign Key ( 外键字段) references 主表名 ( 关联字段 ) [主表记录删除时的动作 ]
[主表记录更新时的动作 ]
设置级联操作:
在主表数据发生改变时,与之关联 的从表数据应该如何处理:
主表更新:
主表删除:
使用关键字:
On update
On delete 来标识。
允许的级联动作:
Cascade: 关联操作,如果主表被更新或删除,那么
从表也会执行相应的操作。
Set null:设置为 null ,表示从表不指向任何主表记录。
Restrict:拒绝主表的相关操作。
修改这个外键:
先删除,在新建。通过修改表完成。
Alter table tbl_name drop foreign key 外键标识 ;
删除外键需要通过指定外键名称达到目的:
可以通过在创建外键时,制定名称,
或者使用 mysql 默认生成的名称
Alter table tbl_name add foreign key 外键定义
Set null
关联字段设置为空:
测试删除:
Cascade
级联操作 ,执行对应的操作,删除后
子数据也删除,更新后子数据也更新
删除主表数据时,从表发生了删除:
restrict
测试 On update
指的是 只有主表的主键发生变化,才会对从表反生影响
存储引擎
2013 年 4 月 17 日星期三
11:29
表类型
默认的服务器表类型, 通过 my.ini
可以配置:
default-storage-engine=INNODB
在创建表,或者编辑表时,可以指定表的存储引擎:
利用表属性: engine 引擎类型
Engine myisam
Engine innodb
创建时,指定:
Innodb & myisam
区别
保存的文件的方式不同:
myisam ,一个表,三个文件
Tbl_name.frm 结构
Tbl_name.myd 数据
Tbl_name.myi 索引
innodb :
一个表一个文件:
Tbl_name.frm 结构
所有的 innodb 表,都使用相同的 innodb 存储表空间在保存数据和索引:
innoDB&myisam:
数据和索引的保存的文件不同: MyISAM 是分开保存,而 innodb 是保存到表空
间
MyIASM 支持索引压缩,而 Innodb 索引和数据是绑定保存不压缩,体积大。
Innodb 很多时候是行级锁,而 myisam 是表级锁, innodb 的并发高。
InnoDB 不支持 FULLTEXT 类型的索引(新版本的 Inno