1.外键:建立关联表(从表) 与 被关联表(主表)之间的关系
2.外键的三种对应关系:一对多,一对一,多对多
3.语法及规则
语法及规则:
外键: 语法: foreign key(当前表中建立关系的外键字段) references 被关联表名(id)
规则:创建原则:先创建被关联表(主表),在创建关联表(从表); 删除更新原则(无联级删除):先删除、更新关联表中的关联的数据,再删除被关联的表中的数据
级联删除: 为了解决删除限制问题:直接删除被关联表(主表)中的关联关系,即可连关联表(从表)中的数据一并删除
级联语法: 在关联表创建外键时加上 on update cascade on delete cascade
dep_id int not null, foreign key(dep_id) references dep2(id) on update cascade on delete cascade
auto_increment :默认从0开始,也可以在写入值得时候,写入初始值然后自增
多对多:两张被关联的表(主表)通过一张关联表(从表)的外键去实现两张表的关联关系
一对多:关联表(从表)通过外键去关联被关联表(主表) 外键不唯一
一对一:关联表(从表)通过外键唯一去关联被关联表(主表) 外键唯一 应用:一个表字段太多时分表使用,结合实例
一对多实例:
创建表 # 被关联表: dep2: create table dep2( id int primary key auto_increment, dep_name varchar(16), dep_desc varchar(255) ); # 关联表: emp2: create table emp2( id int primary key auto_increment, name varchar(16), age int, gender enum('male', 'female', 'others') default 'male', dep_id int not null, foreign key(dep_id) references dep2(id) on update cascade on delete cascade );
一对一实例:
一对一: - 两张之间的关系 一一对应,将一张数据量比较大的表,拆分成两张表。 - user_info: id, name, age, gender, hobby, id_card - user: id , name, age, detail_id(外键) - detail: id, gender, hobby, id_card user与detail表建立了 一对一的外键 关系。 foreign key 应该建在 使用频率较高的一方。 - 创建表 # 被关联表 () create table customer( id int primary key auto_increment, name varchar(16), media varchar(32) ); # 关联表(从表) create table student( id int primary key auto_increment, addr varchar(255), phone char(11), id_card char(18), # 外键必须设置为唯一的 customer_id int unique, foreign key(customer_id) references customer(id) on update cascade on delete cascade );
多对多:利用第三张表 为两张表建立多对多的外键关系
- book: create table book( id int primary key auto_increment, title varchar(20), price int, book_content varchar(255) ); - author: create table author( id int primary key auto_increment, name varchar(16), age int ); - book2author: create table book2author( id int primary key auto_increment, book_id int, author_id int, foreign key(book_id) references book(id) on update cascade on delete cascade, foreign key(author_id) references author(id) on update cascade on delete cascade );
4.修改表的操作
表的重命名和列的修改操作
5. 表的复制
复制表的操作: 复制表结构+记录 (key不会复制: 主键、外键和索引) mysql> create table new_service select * from service; 只复制表结构 # 将select * from service where 1=2; ---> 不要真实数据,需要表结构 mysql> create table new_customer select * from customer where 1=2;