ef 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 被復制的表名#只能復制表的結構+記錄 不會復制 主鍵 外鍵 和索引
```
總結
以上是生活随笔為你收集整理的ef mysql 外键 一对一_MySQL 外键 一对一 一对多 多对多 复制的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: html5之api,HTML5之API(
- 下一篇: css代码优化思路,CSS代码优化方法
