1.外键:建立关联表(从表) 与 被关联表(主表)之间的关系
2.外键的三种对应关系:一对多,一对一,多对多
3.语法及规则
一对多的实现方式:从表设置外键去关联主表
多对多: 一个从表设置两个外键去关联两个主表
一对一: 分表 使用频率高的设置外键为从表 且外键设置为唯一
注: 无级联关系时删除: 一对多 要先删除从表中的数据,再删除主表中的数据
多对多:要先删除从表中的关系,再删除主表中的数据
有级联关系:删除主表,即可删除从表中的所有关联关系
总结:无级联关系 先删从表后删主表,有级联关系 直接删除主表从表数据一并删除,另一个主表不受影响
语法及规则:
外键: 语法: foreign key(当前表中建立关系的外键字段) references 被关联表名(id)
规则:创建原则:先创建被关联表(主表),在创建关联表(从表); 删除更新原则(无联级删除):先删除、更新关联表中的关联的数据,再删除被关联的表中的数据
级联删除: 为了解决删除限制问题:直接删除被关联表(主表)中的关联关系,即可连关联表(从表)中的数据一并删除
级联语法: 在关联表创建外键时加上on update cascade on delete cascade
dep_id int notnull,
foreign key(dep_id) references dep2(id)
on update cascade
on delete cascade
View Code
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 intnotnull,
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 * fromservice;
只复制表结构#将select * from service where 1=2; ---> 不要真实数据,需要表结构
mysql> create table new_customer select * from customer where 1=2;