婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > MySQL 外鍵約束和表關系相關總結

MySQL 外鍵約束和表關系相關總結

熱門標簽:大眾點評星級酒店地圖標注 拉卡拉外呼系統 高清地圖標注道路 400電話可以辦理嗎 外東北地圖標注 話務外呼系統怎么樣 臨清電話機器人 云南電商智能外呼系統價格 智能外呼系統復位

外鍵(Foreign Key)

按照上述所說,一張表存儲員工信息會極大的浪費資源,重復數據太多,這個問題就類似于將所有的代碼都寫在了一個py文件中,因此我們可以將一個表拆成不同的表,在這不同的表之間建立關聯,而建立關聯就需要使用外鍵foreign key。外鍵也屬于約束條件的一種。

如何確定表關系

表與表之間的關系有三種一對多、多對多、一對一。那么如何確定表與表之間的關系呢?

在確定表與表之間的關系時建議換位思考,什么意思呢?就是分別站在兩張表的角度去考慮,比如員工表和部門表的關系:

先站在員工表的角度:員工表中一個員工能否屬于多個部門呢?答案是不能

再站在部門表的角度:部門表中一個部門能否有多個員工呢?答案是可以

因此員工表與部門表是單向的一對多,那么員工表和部門表就是一對多的關系。

如何建立表關系

在建立表關系時,表與表之間的關聯通常以主鍵id作為關聯字段。

一對多關系 - 員工表和部門表

在MySQL的關系在沒有多對一的概念,一對多和多對一都是一對多。在創建一對多表關系時需要遵循以下幾點:

第一,外鍵字段建立在多的一方,即員工表

第二,在創建表的時候,一定要先創建被關聯一方,即部門表

第三,在錄入數據的時候也必須先錄入被關聯表的數據,即部門表的數據

第四,當不同的表建立關系時,需要進行級聯更新和刪除也可以稱為同步更新同步刪除,如果不建立級聯更新和刪除的話,無法對被關聯表中被關聯的數據進行刪除或者修改id的操作,因為兩張表是相互關聯的。

-- 創建被關聯表,部門表
mysql> create table bm(
    id int primary key auto_increment, 
    bm_name varchar(10), 
    bm_desc char(64)
);
Query OK, 0 rows affected (0.01 sec)

mysql> desc bm;
+---------+-------------+------+-----+---------+----------------+
| Field   | Type        | Null | Key | Default | Extra          |
+---------+-------------+------+-----+---------+----------------+
| id      | int(11)     | NO   | PRI | NULL    | auto_increment |
| bm_name | varchar(10) | YES  |     | NULL    |                |
| bm_desc | char(64)    | YES  |     | NULL    |                |
+---------+-------------+------+-----+---------+----------------+
3 rows in set (0.01 sec)

-- 創建外鍵所在的表,員工表
mysql> create table yg(
    id int primary key auto_increment, 
    yg_name varchar(6), 
    bm_id int, 
    foreign key(bm_id) references bm(id)  -- 表示bm_id是外鍵字段,關聯到bm表中的id字段
    on update cascade  # 級聯更新
    on delete cascade  # 級聯刪除
);
Query OK, 0 rows affected (0.10 sec)

mysql> desc yg;
+---------+------------+------+-----+---------+----------------+
| Field   | Type       | Null | Key | Default | Extra          |
+---------+------------+------+-----+---------+----------------+
| id      | int(11)    | NO   | PRI | NULL    | auto_increment |
| yg_name | varchar(6) | YES  |     | NULL    |                |
| bm_id   | int(11)    | YES  | MUL | NULL    |                |
+---------+------------+------+-----+---------+----------------+
3 rows in set (0.01 sec)


-- 插入數據
mysql> insert into bm (bm_name, bm_desc) values ('python', '人生苦短'),('go', 'let us go');
Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> select * from bm;
+----+---------+--------------+
| id | bm_name | bm_desc      |
+----+---------+--------------+
|  1 | python  | 人生苦短     |
|  2 | go      | let us go    |
+----+---------+--------------+
2 rows in set (0.00 sec)


mysql> insert into yg (yg_name, bm_id) values ('xu', 1), ('zhuang', 2), ('lili', 1);
Query OK, 3 rows affected (0.09 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql> select * from yg;
+----+---------+-------+
| id | yg_name | bm_id |
+----+---------+-------+
|  2 | xu      |     1 |
|  3 | zhuang  |     2 |
|  4 | lili    |     1 |
+----+---------+-------+
3 rows in set (0.00 sec)

-- 外鍵關聯的數據必須在被關聯表中存在否則會報錯哦~
mysql> insert into yg (yg_name, bm_id) values ('xu', 3);
ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`book_manage`.`yg`, CONSTRAINT `yg_ibfk_1` FOREIGN KEY (`bm_id`) REFERENCES `bm` (`id`))

-- 如果不使用級聯更新和刪除的話會出現下面的錯誤,下述的SQL語句后面的文章都會介紹。。。
mysql> update bm set id=5 where id=2;  -- 將bm表中id=2的記錄改為id=5
ERROR 1451 (23000): Cannot delete or update a parent row: a foreign key constraint fails (`book_manage`.`yg`, CONSTRAINT `yg_ibfk_1` FOREIGN KEY (`bm_id`) REFERENCES `bm` (`id`))

mysql> delete from bm where id =2;  -- 刪除bm表中id為2的那條記錄
ERROR 1451 (23000): Cannot delete or update a parent row: a foreign key constraint fails (`book_manage`.`yg`, CONSTRAINT `yg_ibfk_1` FOREIGN KEY (`bm_id`) REFERENCES `bm` (`id`)) 

多對多

多對多的關系以書籍和作者為例進行詳細介紹,為什么書籍和作者屬于多對多的關系呢?

先站在書籍表的角度:一本書是否可以有多個作者?答案是可以

再站在作者表的角度:一個作者是否可以寫多本書?答案是可以

書籍表和作者表是雙向的一對多那么這兩張表的關系就是多對多。

我們先來創建兩張表:

-- 創建書籍表
create table book(
    id int primary key auto_increment,
    title varchar(32),
    price int,
    author_id int,
    foreign key(author_id) references author(id)
    on update cascade
    on delete cascade
);

-- 創建作者表
create table author(
    id int primary key auto_increment,
    name varchar(32),
    age int,
    book_id int,
    foreign key(book_id) references book(id)
    on update cascade
    on delete cascade
);

如果按照上述方式創建表的話肯定是不可能成功的,在創建一對多的表關系時我我們說要先創建被關聯表,也就是沒有外鍵的表,可是多對多關系是雙向的一對多,每張表中都會有外鍵的存在,怎么辦呢?解決方案就是創建第三張表,這第三張表用來專門存儲多對多關系的兩張表的關聯。

-- 創建書籍表
mysql> create table book(
    id int primary key auto_increment, 
    name varchar(10), 
    price int
);
Query OK, 0 rows affected (0.01 sec)

-- 創建作者表
mysql> create table author(
    id int primary key auto_increment, 
    name varchar(6), 
    age int
);
Query OK, 0 rows affected (0.01 sec)


-- 創建第三章表,存儲book和author表的關聯關系
mysql> create table book2author(
    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 book(id) 
    on update cascade 
    on delete cascade);
Query OK, 0 rows affected (0.02 sec)

一對一

如果一張表的字段特別多,每次查詢數據時又不是所有的字段都能用的到,我們就可以將表一一分為二,比如說用戶信息表,用戶的信息包括用戶名 密碼 用戶的年齡 用戶的性別 地址 電話等等,可能經常用的只有用戶的用戶名和密碼,這種情況我們就可以將一張用戶信息表拆分成用戶基本信息表和用戶詳細信息表,同樣判斷這兩張表的關系還是通過換位思考:

首先看用戶基本信息表:一個用戶能否有多個詳細信息?答案是不可以;

再看用戶詳情表:一個用戶詳情能否屬于多個用戶?答案是不可以;

單向的一對多都不成立,那么兩者之間的表關系就是一對一或者沒有關系。

使用SQL語句建立一對一的外鍵關系時,外鍵建在任意一方都可以,但是推薦將外鍵建在查詢頻率較高的表中,同樣的,在創建表時還是先創建被關聯表。

-- 創建用戶詳情表
create table authordetail(
	id int primary key auto_increment,
	phone int,
	addr varchar(64)
);

-- 用戶基本信息表
create table author(
	id int primary key auto_increment,
    name varchar(32),
    age int,
    authordetali_id int,
    foreign key(authordetali_id) references authordetali(id)
    on update cascade
    on delete cascade
);

表關系總結

表關系建立需要使用外鍵foreign key,判斷表與表之間的關系通過換位思考的方式。

一對多表關系:外鍵建在多的一方

一對一表關系:外鍵建在任意一方都可以,推薦建在查詢頻率高的一方

多對多表關系:需要單獨創建第三張表存儲兩張表的關聯關系

以上就是MySQL 外鍵約束和表關系相關總結的詳細內容,更多關于MySQL 外鍵約束和表關系的資料請關注腳本之家其它相關文章!

您可能感興趣的文章:
  • MySQL非空約束(not null)案例講解
  • MySQL外鍵約束(FOREIGN KEY)案例講解
  • MySQL完整性約束的定義與實例教程
  • MySQL 8.0新特性 — 檢查性約束的使用簡介
  • MySQL中外鍵的創建、約束以及刪除
  • Mysql中索引和約束的示例語句
  • MySQL外鍵約束的實例講解
  • 詳解MySQL 外鍵約束
  • mysql完整性約束實例詳解
  • MySQL約束超詳解

標簽:三明 山西 定西 福州 溫州 無錫 揚州 阿里

巨人網絡通訊聲明:本文標題《MySQL 外鍵約束和表關系相關總結》,本文關鍵詞  MySQL,外鍵,約束,和,表,關系,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《MySQL 外鍵約束和表關系相關總結》相關的同類信息!
  • 本頁收集關于MySQL 外鍵約束和表關系相關總結的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    欧美日韩中字一区| 色视频欧美一区二区三区| 日本欧美在线看| 日本一区二区不卡视频| 国产精品久久毛片av大全日韩| 99re免费视频精品全部| 成人免费精品视频| 大桥未久av一区二区三区中文| 欧美日韩亚洲不卡| 国产精品久久久久婷婷| 顶级嫩模精品视频在线看| 日韩欧美在线观看一区二区三区| 国内精品视频一区二区三区八戒| 欧美三级在线播放| 精品视频在线免费观看| 国内精品免费在线观看| 国产精品福利一区二区| 这里是久久伊人| 日韩电影免费在线看| 久久久国产一区二区三区四区小说| 国产精品一级在线| 韩国一区二区三区| 日韩欧美一区二区免费| 精品一区二区日韩| 精品国产乱码久久久久久免费| 久久丝袜美腿综合| 国产精品私房写真福利视频| 亚洲国产成人一区二区三区| av激情亚洲男人天堂| 成人免费视频在线观看| 99久久精品费精品国产一区二区| av午夜精品一区二区三区| 日本韩国欧美国产| 三级不卡在线观看| 精品欧美久久久| 久久众筹精品私拍模特| 精品国产乱码久久久久久老虎| 日韩影院精彩在线| 久久精品一区二区三区不卡 | 青青青爽久久午夜综合久久午夜| 亚洲黄一区二区三区| 一区二区三区色| 精品一区二区三区的国产在线播放 | 欧美sm极限捆绑bd| 欧美大片国产精品| 欧美一区二区视频在线观看 | 精品一区二区成人精品| 欧美精品乱人伦久久久久久| 91片黄在线观看| 在线观看日韩一区| 精品国产乱码久久久久久图片| xfplay精品久久| 成人一区二区三区中文字幕| 91精品国产美女浴室洗澡无遮挡| 一本一本大道香蕉久在线精品| 欧美专区在线观看一区| 欧美视频一区二区在线观看| 精品国产伦一区二区三区免费 | 久久人人爽爽爽人久久久| 亚洲欧美色图小说| 99v久久综合狠狠综合久久| 天天色综合成人网| 精品国产污污免费网站入口| 亚洲天堂a在线| 色吧成人激情小说| 成人理论电影网| 欧美年轻男男videosbes| 欧美日韩国产综合视频在线观看| 国产尤物一区二区在线| 亚洲精品一二三区| 国产69精品久久久久毛片| 欧美成人一区二区三区片免费| 风流少妇一区二区| 色综合久久88色综合天天免费| 在线电影一区二区三区| 亚洲欧美激情插| 精品黑人一区二区三区久久| 亚洲精品videosex极品| 亚洲自拍欧美精品| 欧美人狂配大交3d怪物一区| 亚洲欧洲日产国码二区| 成人av动漫网站| 7777精品伊人久久久大香线蕉| 国产精品久久一级| 五月综合激情网| 欧美乱妇23p| 理论电影国产精品| 国产成人综合在线| 午夜精品久久久久久久久| 国产jizzjizz一区二区| 久久精品亚洲麻豆av一区二区| 精品一区二区在线看| 欧美高清一级片在线观看| 99久久综合色| 一区二区三区av电影| 久久亚洲私人国产精品va媚药| 日韩精品欧美精品| 《视频一区视频二区| 亚洲精品v日韩精品| 热久久久久久久| 欧美日本一区二区| 日韩精品免费视频人成| 99久久综合精品| 国产精品99久久久久久宅男| 欧美精品日韩一本| 午夜日韩在线观看| 一区二区三区免费| 国产精品影视在线| 亚洲免费资源在线播放| 欧美日韩亚洲高清一区二区| av不卡免费在线观看| 日本不卡一二三| 日本系列欧美系列| 秋霞av亚洲一区二区三| 亚洲a一区二区| 爽好久久久欧美精品| 蜜桃久久精品一区二区| 精品一区二区免费看| 久久国产成人午夜av影院| 精品一区二区三区在线播放视频| 中文字幕亚洲电影| 精品国产一区a| 中文字幕电影一区| 日韩视频一区二区在线观看| 欧美日韩成人一区二区| 国产欧美精品一区二区色综合 | 一区二区三区四区中文字幕| 一区二区在线免费| 欧美sm美女调教| 欧美日韩精品是欧美日韩精品| 国产乱人伦精品一区二区在线观看| 国产精品99久久久| 成人网男人的天堂| 制服丝袜一区二区三区| 亚洲三级在线免费| 亚洲日本一区二区| 久久99精品国产.久久久久久| 成人av手机在线观看| 日韩精品专区在线影院重磅| 亚洲成人免费观看| 欧洲一区在线观看| 久久精品国产秦先生| 色成人在线视频| 亚洲欧美在线aaa| 北条麻妃一区二区三区| 亚洲午夜在线电影| 成人av网站在线观看| 色网综合在线观看| 精品99一区二区三区| 亚洲男人的天堂网| 色偷偷88欧美精品久久久| 中文字幕五月欧美| 色网站国产精品| 亚洲欧美日韩电影| 欧美军同video69gay| 亚洲综合999| 精品久久久久久久人人人人传媒| 国产精品久久久久9999吃药| 欧美日免费三级在线| 视频在线观看一区| 6080午夜不卡| av激情亚洲男人天堂| 中文字幕一区二区在线播放| 欧美色综合网站| 国产成人av电影在线| 一色桃子久久精品亚洲| 成人丝袜视频网| 中文字幕一区二区视频| 一本一道久久a久久精品综合蜜臀| 亚洲亚洲人成综合网络| 国产精品网友自拍| 色94色欧美sute亚洲13| 日韩欧美一二三四区| 麻豆传媒一区二区三区| 青青草97国产精品免费观看无弹窗版| 久久久不卡影院| 欧美最猛黑人xxxxx猛交| 亚洲成在人线在线播放| 精品国产髙清在线看国产毛片| 日韩手机在线导航| 欧美精品丝袜中出| 国产精品乡下勾搭老头1| 久久99最新地址| 精品一区二区免费在线观看| 亚洲第一主播视频| 自拍偷拍欧美精品| 成人欧美一区二区三区在线播放| 色久优优欧美色久优优| av在线播放一区二区三区| 国产宾馆实践打屁股91| hitomi一区二区三区精品| caoporen国产精品视频| 91蝌蚪porny九色| 欧美亚洲高清一区二区三区不卡| 欧美日精品一区视频| 欧美国产日韩在线观看| 国产亚洲综合色| 亚洲二区在线观看| 国产一区不卡视频| 91国偷自产一区二区使用方法|