日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

MySQL数据库之-foreign key 外键(一对多、多对多、一对一)、修改表、复制表

發布時間:2024/9/30 数据库 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MySQL数据库之-foreign key 外键(一对多、多对多、一对一)、修改表、复制表 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

閱讀目錄

  • 一、引言:
  • 二、一對多(foreign key)
  • 三、多對多:
  • 四、一對一:
  • 五、修改表:
  • 六、復制表:

摘要:

  • 外鍵 一對多
  • 外鍵 多對多
  • 外鍵 一對一
  • 一、引言:

    我們在同一數據庫創建的表時候,很多時候會出現相同數據的冗余問題,也就是說幾個id會有一個或者同n個相同字段,這樣就導致數據表結構數據重復冗余,

    冗余還無所謂,關鍵是如果我要改其中一個相同的字段信息,其他跟他相同字段的信息也都要同步修改,這就增加了很多工作量,特別是如果要處理大量數據的時候

    所以需要有一種解決方式來處理這種顯而易見的問題。
    例如:
    很顯然,上表的id為2/3/4的人員同屬于一個字段名(部門)教育部,部門描述也是一樣。解決方法:拆分為2個表

    --------------------------------------------------------------------注:如果你對python感興趣,我這有個學習Python基地,里面有很多學習資料,感興趣的+Q群:895817687 -------------------------------------------------------------------+----+-------+--------+--------+ | id | name | gender | dep_id | +----+-------+--------+--------+ | 1 | jason | male | 1 | | 2 | egon | male | 2 | | 3 | kevin | male | 2 | | 4 | tank | male | 2 | | 5 | jerry | female | 3 | +----+-------+--------+--------++----+-----------+--------------------------+ | id | dep_name | dep_desc | +----+-----------+--------------------------+ | 1 | 外交部 | 形象代言人 | | 2 | 教育部 | 教書育人 | | 3 | 技術部 | 技術負責人 | +----+-----------+--------------------------+ 復制代碼 復制代碼 """ 把所有數據都存放于一張表的弊端 1.組織結構不清晰 2.浪費硬盤空間 3.擴展性極差 """ # 上述的弊端產生原因類似于把代碼全部寫在一個py文件中,你應該怎么做?>>>解耦合!將上述一張表拆成員工和部門兩張表!# 分析表數據之間的關系:多個用戶對應一個部門,一個部門對應多個用戶。禁止一個用戶對應多個部門# 如何查找表與表之間的關系 """ 老師與課程表 1.站在老師表的角度:一名老師能否教授多門課程(限制死,不能,一名老師只能教python,不能同時教python和linux) 2.站在課程表的角度:一門課程能否可以被多個老師教,完全可以! 那就是課程表多對一老師表,如何表示這種關系?在課程表中創建一個字段(tea_id)指向老師表的id字段學生與班級表 1.站在學生表的角度:??? 2.站在班級表的角度:??? 那就是學生表多對一班級表,如何表示這種關系?在學生表中創建一個字段(class_id)指向班級表的id字段 """

    二、一對多(foreign key)

    foreign key 會將本表中的一個字段與另外一個表的字段(通常是主鍵字段)進行關聯。

    在創建表時,必須先建被關聯的表dep,才能建關聯表emp create database foreign_ts; # 創建數據庫 use foreign_ts; # 進入數據庫 # 先創建被關聯表: create table dep(id int primary key auto_increment, # 設置主鍵,自增長dep_name char(16),dep_desc char(16));# 再創建關聯表emp: create table emp(id int primary key auto_increment, # 設置主鍵,自增長name char(16),gender enum('male','female','others'),dep_id int,foreign key(dep_id) references dep(id) # 外鍵 關聯on update cascade # 同步更新on delete cascade # 同步刪除);# 插入數據: 在插入記錄時,必須先插入被關聯的表dep,才能插關聯表emp insert into dep(dep_name,dep_desc) values('外交部','形象代言人'),('教育部','教書育人'),('技術部','技術能力有限部門');insert into emp(name,gender,dep_id) values ('jason','male',1), ('egon','male',2), ('kevin','male',2), ('tank','male',2), ('jerry','female',3);

    三、多對多

    一對多是A表中多個字段關聯B表中一個字段。

    而多對多就是在此基礎上B表中也有多個字段關聯A表中一個字段。

    此時如果依然以上面一對多的形式去創建表格的話,就會出現互相矛盾的問題,也就是我再關聯你的時候你還沒有被創建的情況。

    示例:

    # 圖書表與作者表之間的關系 """ 仍然站在兩張表的角度: 1.站在圖書表:一本書可以有多個作者 2.站在作者表:一個作者可以寫多本書 雙方都能一條數據對應對方多條記錄,這種關系就是多對多! """ # 先來想如何創建表?圖書表需要有一個外鍵關聯作者,作者也需要有一個外鍵字段關聯圖書。問題來了,先創建誰都不合適!如何解決? # 建立第三張表,該表中有一個字段fk左表的id,還有一個字段是fk右表的id ---------------------------------- 先將2個表建起了: mysql> create table author( #建作者表,id和name足以-> id int primary key auto_increment,-> name char(16)-> );mysql> create table book( # 建書表,id、書名、價格-> id int primary key auto_increment,-> title char(16),-> price int-> ); 插入表數據: mysql> insert into author(name) values-> ('唐家三少'),-> ('金庸'),-> ('蕭鼎')-> ;mysql> insert into book(title,price) values-> ('光之子',99),-> ('冰火魔廚',88),-> ('斗羅大陸',77),-> ('倚天屠龍記',98),-> ('神雕俠侶',96),-> ('誅仙',100); mysql> select* from author; # 查看建表結果 +----+--------------+ | id | name | +----+--------------+ | 1 | 唐家三少 | | 2 | 金庸 | | 3 | 蕭鼎 | +----+--------------+ mysql> select* from book; # 查看建表結果 +----+-----------------+-------+ | id | title | price | +----+-----------------+-------+ | 1 | 光之子 | 99 | | 2 | 冰火魔廚 | 88 | | 3 | 斗羅大陸 | 77 | | 4 | 倚天屠龍記 | 98 | | 5 | 神雕俠侶 | 96 | | 6 | 誅仙 | 100 | +----+-----------------+-------+ -------------------------------------------------------------------------- 建立第三張表,這張表作用就是關聯author表和book表。 mysql> create table book2author(-> id int primary key auto_increment,-> book_id int,-> foreign key(book_id) references book(id) on update cascade on delete cascade, # 設置外鍵-> author_id int,-> foreign key(author_id) references author(id) on update cascade on delete cascade # 設置外鍵-> ); # 插入關聯數據 mysql> insert into book2author(book_id,author_id) values-> (1,1),-> (2,1),-> (3,1),-> (4,2),-> (5,2),-> (6,3); # 查看結果: mysql> select * from book2author; +----+---------+-----------+ | id | book_id | author_id | +----+---------+-----------+ | 1 | 1 | 1 | | 2 | 2 | 1 | | 3 | 3 | 1 | | 4 | 4 | 2 | | 5 | 5 | 2 | | 6 | 6 | 3 | +----+---------+-----------+這樣就將book表和author表之間通過第三張表建立了多對多外鍵關聯。

    四、一對一:

    A表的字段與B表中的某一唯一字段形成一對一的關聯

    示例:

    # 我們可以通過客戶表和投保人之間的關系來描述一對一 保險銷售人員有個客戶表,在每天的不斷努力經營客戶之下,促進了多個客戶成為了投保人,這個多個投保人作為一張投保人表,他們之間的關系可以說是一對一關系: 或者說是一種類似于集合的父集與子集的關系。 mysql> create table customer(-> id int primary key auto_increment,-> name char(16),-> age int,-> sex enum('male','female','other'),-> wechart char(16)-> );mysql> create table holder( # 創建投保人表-> id int primary key auto_increment,-> name char(16),-> holder_price int,-> customer_id int unique, # 將客戶id設為唯一,因為客戶表中客戶id必須唯一-> foreign key(customer_id) references customer(id) on update cascade on delete cascade-> ); # 客戶id與客戶表中id進行關聯。同步改刪 -------------------------------------------------- 插入數據:(先插入客戶表(被關聯),再插入投保人表) mysql> insert into customer(name,age,sex,wechart) values-> ('張三豐',18,'male','17375898'),-> ('張小凡',16,'male','65652456'),-> ('陸雪琪',17,'female','62612384'),-> ('秦祥林',25,'male','545654655'),-> ('至尊寶',999,'male','66666666'),-> ('韋小寶',30,'male','475247124');mysql> insert into holder(name,holder_price,customer_id) values-> ('張小凡',5000000,2),-> ('陸雪琪',10000000,3),-> ('韋小寶',990000,6);# 查看結果: mysql> select * from customer; +----+-----------+------+--------+-----------+ | id | name | age | sex | wechart | +----+-----------+------+--------+-----------+ | 1 | 張三豐 | 18 | male | 17375898 | | 2 | 張小凡 | 16 | male | 65652456 | | 3 | 陸雪琪 | 17 | female | 62612384 | | 4 | 秦祥林 | 25 | male | 545654655 | | 5 | 至尊寶 | 999 | male | 66666666 | | 6 | 韋小寶 | 30 | male | 475247124 | +----+-----------+------+--------+-----------+ mysql> select * from holder; +----+-----------+--------------+-------------+ | id | name | holder_price | customer_id | +----+-----------+--------------+-------------+ | 1 | 張小凡 | 5000000 | 2 | | 2 | 陸雪琪 | 10000000 | 3 | | 3 | 韋小寶 | 990000 | 6 | +----+-----------+--------------+-------------+

    五、修改表:

    語法: 1. 修改表名ALTER TABLE 表名 RENAME 新表名;2. 增加字段ALTER TABLE 表名ADD 字段名 數據類型 [完整性約束條件…],ADD 字段名 數據類型 [完整性約束條件…];ALTER TABLE 表名ADD 字段名 數據類型 [完整性約束條件…] FIRST;ALTER TABLE 表名ADD 字段名 數據類型 [完整性約束條件…] AFTER 字段名; 3. 刪除字段ALTER TABLE 表名 DROP 字段名; 4. 修改字段ALTER TABLE 表名 MODIFY 字段名 數據類型 [完整性約束條件…];ALTER TABLE 表名 CHANGE 舊字段名 新字段名 舊數據類型 [完整性約束條件…];ALTER TABLE 表名 CHANGE 舊字段名 新字段名 新數據類型 [完整性約束條件…];

    六、復制表:

    在創建表的時候 通過select * from 表名 來獲取復制表的來源

    # 復制表結構+記錄 (key不會復制: 主鍵、外鍵和索引) create table new_service select * from service;# 只復制表結構 select * from service where 1=2; //條件為假,查不到任何記錄create table new1_service select * from service where 1=2; create table t4 like employees;

    總結

    以上是生活随笔為你收集整理的MySQL数据库之-foreign key 外键(一对多、多对多、一对一)、修改表、复制表的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 亚洲一二三区av | 日本护士体内she精2xxx | 致单身男女免费观看完整版 | 韩国一区二区视频 | 日韩另类 | 日韩九九九 | 国产乱码精品 | 亚洲精品综合精品自拍 | 黄色.com | 成人影| 欧洲一级黄色片 | 黑人操少妇| 91色交| 国产精品久久久久久久免费看 | 小镇姑娘高清播放视频 | 国产人妖av| 国产伦精品一区二区三区免费 | 国精产品一区一区三区有限公司杨 | 狠狠夜| 久久久久成人精品 | 午夜草草 | 视频免费在线 | aaaa免费视频 | 免费黄色小视频 | 亚洲激情av | 无码人妻少妇色欲av一区二区 | 国产片淫乱18一级毛片动态图 | 欧美专区第二页 | 久久久精品综合 | 亚洲国产aⅴ精品一区二区 日韩黄色在线视频 | 在线免费观看一区 | 国产日韩欧美在线 | 亚洲一区二区三区四区五区午夜 | 亚洲美女一区 | 欧美三级 欧美一级 | 777色 | 在线只有精品 | 怡红院成人av | 少妇搡bbbb搡bbb搡澳门 | 欧美视频一区二区三区四区 | 欧美极品在线观看 | 最新一区二区三区 | 精品国产午夜福利 | 亚洲人妻电影一区 | 国产不卡一区二区视频 | 青青操视频在线观看 | 免费视频一二三区 | 91免费高清在线观看 | 国产精品老牛影院99av | 久久久成人精品视频 | 日本爽爽爽爽爽爽在线观看免 | 久久久国际精品 | 污污网站在线 | 又爽又黄视频 | 少妇综合| 国产精品人人人人 | 日韩欧美中文在线 | 丰满熟妇乱又伦 | 日本wwwxx | 射婷婷| 五月婷婷网站 | 玖玖视频在线 | 国产av人人夜夜澡人人爽麻豆 | 不卡av在线免费观看 | 精久久久久久久 | 日本高清不卡在线 | 天降女子在线 | 在线免费国产 | av天堂永久资源网 | 五月天婷婷久久 | 日韩精品在线观看AV | 69精品视频 | 国产黄色大片在线观看 | 欧美日韩综合一区二区 | 亚洲日本国产精品 | 天天干,天天爽 | 国产精品久久久久久吹潮 | 高h乱l高辣h文短篇h | 97久久免费视频 | 国产a级片 | 在线视频久 | 91麻豆精品在线 | 亚洲精品一区二区三区精华液 | 亚洲国产精品久久AV | 久久福利影视 | 特级一级黄色片 | 国产亚洲精品久久久久久打不开 | 波多野结衣日韩 | 亚洲免费观看av | a级片毛片 | 亚洲综合色成人 | 成人午夜视频免费看 | 亚洲综合激情 | 亚洲综合色视频 | 亚洲中国色老太 | 爱爱爱免费视频 | 欧美性猛交xx乱大交 | 国产乱人乱偷精品视频 | av成人在线观看 |