[精讚] [會員登入]
15407

[Mysql/Mariadb] 利用phpMyAdmin 建立關聯式資料表

利用phpMyAdmin 建立關聯式資料表

分享此文連結 //n.sfs.tw/10850

分享連結 [Mysql/Mariadb] 利用phpMyAdmin 建立關聯式資料表@新精讚
(文章歡迎轉載,務必尊重版權註明連結來源)
2019-10-25 09:57:24 最後編修
2017-03-03 11:39:44 By 張○○
 

自動目錄

想用 phpMyAdmin 建立關聯式資料表一直不得其門而入,以前我就有學到 foreign key 的觀念,但是奇怪,console怎麼設都錯誤,而 phpMyAdmin 上也找不到選項,後來只好用程式來解決關聯的問題,這也是低等級程設師常做的事,繞過問題而不去花時間解決問題。至於什麼是關聯式資料庫,網路上很多理論說明,不再贅言。

後來經過瑩光兄一點,才恍然大悟,原來資料表的引擎要用 innoDB 才能建立關聯式資料表,怪不得我以前怎麼試都失敗 + +。以下是建立關聯式資料表的簡單範例及說明。

一、建立一個資料庫,例如 hades,在裡面建立兩個表。

這個是主要表,例如我現在建立一個身體部位的資料表,裡面的主鍵是 bID 格式 smallint(6) ,只要是具有唯一鍵性質的欄位,就可以被當成是 foregin key,例如主鍵、唯一鍵,而子表中的欄位只有主鍵、唯一鍵或是索引鍵可以和 foregin key建立關聯。

-- 資料表格式: `bodyparts`
--

CREATE TABLE IF NOT EXISTS `bodyparts` (
  `bID` smallint(6) NOT NULL auto_increment,
  `bname` varchar(24) collate utf8_bin NOT NULL,
  PRIMARY KEY  (`bID`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_bin ROW_FORMAT=DYNAMIC AUTO_INCREMENT=7 ;
 

這是子表,他要和主表 `bodyparts` 建立關聯。如此當主表該筆foreign key 刪除時,子表有關聯到的欄位也要一併刪除,或是主表修改bID時,子表有關聯到的欄位`syndrome`.`bID`= `bodyparts`.`bID` 也要一併修改,以免久而久之遺留很多找不到關聯的垃圾記錄或是資料不同步。

--
-- 資料表格式: `syndrome`
--

CREATE TABLE IF NOT EXISTS `syndrome` (
  `sID` smallint(9) NOT NULL auto_increment,
  ...
  `bID` smallint(9) NOT NULL,
  PRIMARY KEY  (`sID`),
  KEY `bID` (`bID`)

) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_bin ROW_FORMAT=DYNAMIC AUTO_INCREMENT=3 ;

二、在子資料表 `syndrome`建立關連到主表

ALTER TABLE `syndrome`
  ADD CONSTRAINT `syndrome_ibfk_1` FOREIGN KEY (`bID`) REFERENCES `bodyparts` (`bID`) ON DELETE CASCADE ON UPDATE CASCADE;

觀察重點:子表上 bID 並不一定要唯一鍵,而『關聯檢視』的連結要innoDB引擎才會出現

點選「關聯檢視」後,將bID的foregin key指到: `bodyparts`(`bID`)。

後面兩個是當主表的 `bodyparts`(`bID`) 發生刪除或修改時,要採取的行為。其中有下列選項:

CASCADE  階層狀異動:主表刪子表就刪;主表修子表就修。
SET NULL 主表想要更動時(刪或修),子表將該欄位設為空值
NO ACTION 什麼都不做,那還建關聯幹嘛?
RESTRICT 這個玩意就是限制,當主表想要更動時(刪或修),子表有設為 RESTRICT,主表的更動會受到限制,產生錯誤

感謝

這篇文章的產生,得感謝外埔國小陳瑩光師的指導


原文 2009-12-04 23:58:28

END

你可能感興趣的文章

[Mysql/MariaDB] 使用Memory引擎修改及設定最大值的方法 Mysql/MariaDB 使用Memory引擎預設是16MB,修改及設定最大值的方法。

[Mysql] 建立叢集式資料庫3/4 -- DB1設置及DB PROXY 使用galera建立Mysql的叢集式資料庫 ,繼續修正第1DB及運作PROXY

[Mysql] 建立叢集式資料庫2/4 -- DB2、DB3設定 使用galera建立Mysql的叢集式資料庫 ,繼續建立第2,第3台DBs

[Mysql] 建立叢集式資料庫1/4 -- 安裝及設定DB1 使用galera建立Mysql的叢集式資料庫 (GALERA CLUSTER FOR MYSQL THE TRUE MULTI-MASTER)

[Mysql] 建立叢集式資料庫4/4--觀察及測試 觀察及測試haproxy+galera建立Mysql的叢集式資料庫,並進行壓力測試

[Mysql/Mariadb] Left Join 和 Right Join 合併表單 SQL語法中的 Left Join 和 Right Join 很常用,但是我常會忘記,所以寫下來備忘。

我有話要說

>>

限制:留言最高字數1000字。 限制:未登入訪客,每則留言間隔需超過10分鐘,每日最多5則留言。

訪客留言

[無留言]

隨機好文

使用Google尋找你的手機 這近發現google竟然可以用來找android的手機,而且不需要經過什麼設定或安裝軟體。

[CodeIgniter3] 解決無法上傳特定檔案(.sb2)的問題 上傳時出現The filetype you are attempting to upload is not allowed,要怎麼解決?

維修冰箱 維修冰箱

世紀帝國征服者新版本--被遺忘的帝國 世紀帝國征服者新版本--被遺忘的帝國 世紀二代的征服者是精典遊戲中的精典,aofe更好玩...

設計的工作絕不接受比價 拿買陽春麵的價格想買牛肉麵,寧願倒掉也不賣