MySQL主主复制 外键_mysql 之外键,复制表,以及列的操作

1.外键:建立关联表(从表) 与 被关联表(主表)之间的关系

2.外键的三种对应关系:一对多,一对一,多对多

3.语法及规则

一对多的实现方式:从表设置外键去关联主表

多对多: 一个从表设置两个外键去关联两个主表

一对一: 分表 使用频率高的设置外键为从表    且外键设置为唯一

注: 无级联关系时删除:  一对多 要先删除从表中的数据,再删除主表中的数据

多对多:要先删除从表中的关系,再删除主表中的数据

有级联关系:删除主表,即可删除从表中的所有关联关系

总结:无级联关系  先删从表后删主表,有级联关系 直接删除主表从表数据一并删除,另一个主表不受影响

语法及规则:

外键: 语法: foreign key(当前表中建立关系的外键字段) references 被关联表名(id)

规则:创建原则:先创建被关联表(主表),在创建关联表(从表); 删除更新原则(无联级删除):先删除、更新关联表中的关联的数据,再删除被关联的表中的数据

级联删除: 为了解决删除限制问题:直接删除被关联表(主表)中的关联关系,即可连关联表(从表)中的数据一并删除

级联语法: 在关联表创建外键时加上on update cascade on delete cascade

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

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.修改表的操作

8f900a89c6347c561fdf2122f13be562.png表的重命名和列的修改操作

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;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值