MySQL主主复制 外键_MySQL 外键 一对一 一对多 多对多 复制

#外键

## 1,学习外键首先要明白表与表之间的关系

? 首先要换位思考 在考虑了这边 还要考虑另一边

? 然后在下定论### 判断表关系的语法

#### 图书与出版社

? 一本书可不可以有多个出版社 不可以

? 一个出版社可不可以出版多本书 可以

? 这就是一对多关系#### 图书与作者

? 一本书可不可以有多个作者 可以

? 一个作者可不可以写多本书 可以

? 多对多的关系### 作者与作者信息

? 一个作者可不可以有多个个人信息 不可以

? 一个作者的个人信息能不能有多个作者 不可以

? 要么两个是一对一,要么没关系

primary key 主键约束,该约束的意思就是,该字段的值非空且不能重复

关键字 references 建立表与表之间的关系

foreign key 外键约束,意思就是该字段与另外一张表有联系.好比儿子必定有爸爸,要是有人想把爸爸K掉,儿子就肯定不干了!反之没儿子的人如果要被K,就没人管啦## 2,一对多

?#foreign key会带来什么效果

?1,在创建表的时候,先创建 被关联的表不带有foreign key

? 创建完在创建带有foreign key

```python

create table dep(

id int primary key auto_increment,

dep_name char(10),

dep_comment char(60)

);

create table emp(

id int primary key auto_increment,

name char(15),

gender enum(‘male‘,‘female‘) not null default ‘male‘,

dep_id int,

foreign key (dep_id) references dep(id) 给这个dep_ip传入的id必须是

另一个表的id 而 referencnces 就是链接起另一张表 dep 里面一般都放的是令一张表的主键 且在给dep_id 传值的时候必须是另一张表有的id 如果没有就报错

on update cascade

on delete cascade

);

insert into dep (dep_name,dep_comment) values

(‘教学部‘,‘辅导学生,教授python‘),

(‘外交‘,‘中国形象大屎‘),

(‘技术部门‘,‘技术能力有限部门‘);

insert into emp (name,gender,dep_id) values

(‘jason‘,‘male‘,1),

(‘egon‘,‘male‘,2),

(‘taken‘,‘female‘,3);

```## 3,多对多

```python#图书表与作者表之间的关系

"""仍然站在两张表的角度:

1.站在图书表:一本书可不可以有多个作者,可以!那就是书多对一作者

2.站在作者表:一个作者可不可以写多本书,可以!那就是作者多对一书

双方都能一条数据对应对方多条记录,这种关系就是多对多!"""

#先来想如何创建表?图书表需要有一个外键关联作者,作者也需要有一个外键字段关联图书。问题来了,先创建谁都不合适!如何解决?#建立第三张表,该表中有一个字段fk左表的id,还有一个字段是fk右表的id

create table author (

id int primary key auto_increment,

name char(10));

create table book(

id int primary key auto_increment,

bname char(10),

price int);

insert into author (name) values

(‘egon‘),

(‘jason‘),

(‘yangxin‘),

(‘alex‘);

insert into book (bname,price) values

(‘php从入门到消失‘,1000),

(‘葵花宝典‘,553),

(‘小泽玛利亚大战苍井空‘,200009),

(‘小泽精选‘,20000),

(‘小仓精选‘,2222);

create table author2book(

id int primary key auto_increment,

author_id int,

book_id int,

foreign key (author_id) references author(id)

on update cascade

on delete cascade,

foreign key (book_id) references author(id)

on update cascade

on delete cascade);

insert into author2book(author_id,book_id) values

(1,2),

(2,3),

(3,4),

(1,4),

(4,2);

```## 4,一对一

用户名 和用户信息

?

```python

左边的表记录唯一对应右边的一条记录,反之也一样

create table username(

id int primary key auto_increment,

name char(10) notnull,

age intnotnull);

insert into username(name,age) values

(‘jason‘,98),

(‘yangxin‘,18),

(‘wukai‘,10);

create table card(

id int primary key auto_increment,

identity int unique,#该字段唯一

username_id int unique,#该字段唯一

foreign key (card_id) references username(id)

on delete cascade

on update cascade);

insert into card(identity,username_id) values

(‘170020‘,1),

(‘125435‘,2),

(‘146547‘,3);

```## 5修改表

```python#mysql对大小写不敏感!!!

语法:1. 修改表名

ALTER TABLE 表名

RENAME 新表名;2. 增加字段

ALTER TABLE 表名

ADD 字段名 数据类型 [完整性约束条件…],                           ADD 字段名 数据类型 [完整性约束条件…];

ALTER TABLE 表名

ADD 字段名 数据类型 [完整性约束条件…]  FIRST;       ALTER TABLE 表名

ADD 字段名 数据类型 [完整性约束条件…]  AFTER 字段名;3. 删除字段

ALTER TABLE 表名

DROP 字段名;4. 修改字段  #modify只能改字段数据类型完整约束,不能改字段名,但是change可以!

ALTER TABLE 表名

MODIFY 字段名 数据类型 [完整性约束条件…];

ALTER TABLE 表名

CHANGE 旧字段名 新字段名 旧数据类型 [完整性约束条件…];      ALTER TABLE 表名

CHANGE 旧字段名 新字段名 新数据类型 [完整性约束条件…];

```## 6复制表

?

```python#复制表 语法 create table 表名 select *from 被复制的表名#只能复制表的结构+记录 不会复制 主键 外键 和索引

```

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值