日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

MySQL 外鍵約束和表關(guān)系相關(guān)總結(jié)

瀏覽:53日期:2023-10-01 15:40:35
目錄外鍵(Foreign Key)如何確定表關(guān)系如何建立表關(guān)系一對多關(guān)系 - 員工表和部門表多對多一對一表關(guān)系總結(jié)外鍵(Foreign Key)

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

如何確定表關(guān)系

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

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

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

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

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

如何建立表關(guān)系

在建立表關(guān)系時,表與表之間的關(guān)聯(lián)通常以主鍵id作為關(guān)聯(lián)字段。

一對多關(guān)系 - 員工表和部門表

在MySQL的關(guān)系在沒有多對一的概念,一對多和多對一都是一對多。在創(chuàng)建一對多表關(guān)系時需要遵循以下幾點:

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

第二,在創(chuàng)建表的時候,一定要先創(chuàng)建被關(guān)聯(lián)一方,即部門表

第三,在錄入數(shù)據(jù)的時候也必須先錄入被關(guān)聯(lián)表的數(shù)據(jù),即部門表的數(shù)據(jù)

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

-- 創(chuàng)建被關(guān)聯(lián)表,部門表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)-- 創(chuàng)建外鍵所在的表,員工表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是外鍵字段,關(guān)聯(lián)到bm表中的id字段 on update cascade # 級聯(lián)更新 on delete cascade # 級聯(lián)刪除);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)-- 插入數(shù)據(jù)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: 0mysql> 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: 0mysql> select * from yg;+----+---------+-------+| id | yg_name | bm_id |+----+---------+-------+| 2 | xu | 1 || 3 | zhuang | 2 || 4 | lili | 1 |+----+---------+-------+3 rows in set (0.00 sec)-- 外鍵關(guān)聯(lián)的數(shù)據(jù)必須在被關(guān)聯(lián)表中存在否則會報錯哦~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`))-- 如果不使用級聯(lián)更新和刪除的話會出現(xiàn)下面的錯誤,下述的SQL語句后面的文章都會介紹。。。mysql> update bm set id=5 where id=2; -- 將bm表中id=2的記錄改為id=5ERROR 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`)) 多對多

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

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

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

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

我們先來創(chuàng)建兩張表:

-- 創(chuàng)建書籍表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);-- 創(chuàng)建作者表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);

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

-- 創(chuàng)建書籍表mysql> create table book( id int primary key auto_increment, name varchar(10), price int);Query OK, 0 rows affected (0.01 sec)-- 創(chuàng)建作者表mysql> create table author( id int primary key auto_increment, name varchar(6), age int);Query OK, 0 rows affected (0.01 sec)-- 創(chuàng)建第三章表,存儲book和author表的關(guān)聯(lián)關(guān)系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)一對一

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

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

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

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

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

-- 創(chuàng)建用戶詳情表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);表關(guān)系總結(jié)

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

一對多表關(guān)系:外鍵建在多的一方

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

多對多表關(guān)系:需要單獨創(chuàng)建第三張表存儲兩張表的關(guān)聯(lián)關(guān)系

以上就是MySQL 外鍵約束和表關(guān)系相關(guān)總結(jié)的詳細內(nèi)容,更多關(guān)于MySQL 外鍵約束和表關(guān)系的資料請關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产欧美高清| 久久精品导航| 久久av在线| 亚洲夜间福利| 私拍精品福利视频在线一区| 日韩国产综合| 美女网站一区| 视频一区视频二区在线观看| 亚洲精选av| 国产亚洲精aa在线看| 国产精品综合| 久久青青视频| 欧美日韩四区| 日韩国产欧美视频| 麻豆视频一区| 久久理论电影| 亚洲丝袜美腿一区| 欧美日本二区| 色婷婷综合网| 一区二区三区四区在线看| 亚洲欧美日韩视频二区| 日韩高清一区在线| 日韩精品2区| 亚洲欧洲免费| 高清一区二区| 日av在线不卡| 成人精品国产亚洲| 在线一区二区三区视频| 精品视频一区二区三区在线观看| 欧美日韩在线播放视频| 日韩精品一级| 日韩在线第七页| 亚洲性视频在线| 精品久久久中文字幕| 亚洲网站视频| 91麻豆精品激情在线观看最新| 久久久久久夜| 婷婷精品在线观看| 91看片一区| 欧美日韩一区二区高清| 亚洲精品a级片| 欧美激情福利| 久久电影一区| 成人欧美一区二区三区的电影| 另类国产ts人妖高潮视频| 麻豆成人在线观看| 蜜桃视频在线观看一区| 精品国产第一福利网站| 日本午夜精品久久久| 日韩久久电影| 欧美久久亚洲| 国产日韩专区| 精品日韩视频| 久久99蜜桃| 亚洲涩涩av| 久久精品高清| 精品国产一区二| 青青草伊人久久| 日韩网站在线| 神马午夜在线视频| 国产精品一区二区中文字幕| 婷婷色综合网| 成人在线丰满少妇av| 亚洲人成高清| 成人羞羞视频在线看网址| 日韩精品久久理论片| 免费毛片在线不卡| 国产一区二区三区四区二区| 日韩精品a在线观看91| 九一国产精品| 国产成人精品亚洲日本在线观看| 欧美国产三级| 91亚洲精品在看在线观看高清| 国产精品三上| 久久久夜夜夜| 韩国久久久久久| 久久免费精品| 久久精品 人人爱| 亚洲精选成人| 黄色日韩精品| 欧美日中文字幕| 欧美片第1页| 日韩成人免费| 色婷婷色综合| 中文字幕一区久| 国产精品13p| 福利精品一区| 亚洲精品成人图区| 日韩大片在线观看| 国产白浆在线免费观看| 成人精品久久| www在线观看黄色| 最近高清中文在线字幕在线观看1| 精品亚洲免a| 麻豆91精品91久久久的内涵| 欧美交a欧美精品喷水| 久久99青青| 高清久久一区| 久久久久国产一区二区| 91精品一区二区三区综合在线爱| 韩国精品主播一区二区在线观看| 日韩国产网站| 99国产精品| 免费观看日韩电影| 亚洲18在线| 欧美精品观看| 麻豆高清免费国产一区| 国产一区二区三区国产精品| 精品国产aⅴ| 高清精品久久| 久久免费高清| 午夜在线精品偷拍| 日韩欧美另类中文字幕| 国产精品一线| 精品国产网站| 久久精品1区| 日韩一级网站| 日本国产亚洲| 久久久久九九精品影院| 日韩影院二区| 视频在线观看国产精品| 国产欧美日韩在线一区二区| 高清av一区| 国产亚洲毛片| 亚洲91在线| 麻豆精品在线视频| 精品亚洲美女网站| 日韩中文字幕一区二区三区| 欧美日韩亚洲一区在线观看| 精品入口麻豆88视频| 欧美a级片一区| 日韩高清一区在线| 国产网站在线| 久久大逼视频| 国产精品天天看天天狠| 神马久久午夜| 蜜臀久久99精品久久久久宅男| 国产日韩亚洲| 99tv成人| 日韩avvvv在线播放| 精品美女久久| 丝袜诱惑制服诱惑色一区在线观看| 国产精品久久| 欧美精品一区二区久久| 日韩国产在线观看一区| 欧美日韩国产v| 欧美一区二区三区免费看| 成人在线网站| 久久国产麻豆精品| 欧美+亚洲+精品+三区| 国产精品国码视频| 香蕉精品视频在线观看| 国产精品亚洲人成在99www| 国产一区日韩欧美| 国产精品xxx在线观看| 欧美日中文字幕| 欧美精品导航| 亚洲一区二区日韩| 欧洲av不卡| 久久激情综合网| 亚洲在线成人| av高清不卡| 国产欧美日韩精品一区二区免费 | 精品国产午夜| 男人的天堂久久精品| 精品视频99| 日韩中文字幕| japanese国产精品| 精品久久视频| 日本亚洲欧美天堂免费| 91精品精品| 韩国一区二区三区视频| 日韩精品一区二区三区中文字幕| 五月婷婷亚洲| 蜜桃成人精品| 精品久久在线| 国产精品一区二区美女视频免费看| 影院欧美亚洲| 韩日一区二区| 久久不卡国产精品一区二区| 亚洲日韩视频| 国产精品日本欧美一区二区三区| 日本午夜大片a在线观看| 欧美韩一区二区| 国产图片一区| 日本v片在线高清不卡在线观看| 婷婷精品视频| 国产白浆在线免费观看| 麻豆国产91在线播放| 777久久精品| 亚州av日韩av| 免费一区二区视频| 制服诱惑一区二区| 天堂中文在线播放| 久久一区国产| 国产精品777777在线播放| 深夜日韩欧美| 亚洲精品四区| 亚洲美女久久| 亚洲毛片网站|