教你mysql如何增加外來鍵約束
本教程操作環境:windows7系統、mysql8版本、Dell G3電腦。
MySQL 外來鍵約束(FOREIGN KEY)是表的一個特殊欄位,經常與主鍵約束一起使用。對於兩個具有關聯關係的表而言,相關聯欄位中主鍵所在的表就是主表(父表),外來鍵所在的表就是從表(子表)。
外來鍵用來建立主表與從表的關聯關係,為兩個表的資料建立連線,約束兩個表中資料的一致性和完整性。
定義外來鍵時,需要遵守下列規則:
主表必須已經存在於資料庫中,或者是當前正在建立的表。如果是後一種情況,則主表與從表是同一個表,這樣的表稱為自參照表,這種結構稱為自參照完整性。
必須為主表定義主鍵。
主鍵不能包含空值,但允許在外來鍵中出現空值。也就是說,只要外來鍵的每個非空值出現在指定的主鍵中,這個外來鍵的內容就是正確的。
在主表的表名後面指定列名或列名的組合。這個列或列的組合必須是主表的主鍵或候選鍵。
外來鍵中列的數目必須和主表的主鍵中列的數目相同。
外來鍵中列的資料型別必須和主表主鍵中對應列的資料型別相同。
外來鍵約束可以在修改表時新增,但是新增外來鍵約束的前提是:從表中外來鍵列中的資料必須與主表中主鍵列中的資料一致或者是沒有資料。
在修改資料表時新增外來鍵約束的語法格式如下:
ALTER TABLE <資料表名> ADD CONSTRAINT <外來鍵名> FOREIGN KEY(<列名>) REFERENCES <主表名> (<列名>);
修改資料表 tb_emp2,將欄位 deptId 設定為外來鍵,與資料表 tb_dept1 的主鍵 id 進行關聯
mysql> ALTER TABLE tb_emp2 -> ADD CONSTRAINT fk_tb_dept1 -> FOREIGN KEY(deptId) -> REFERENCES tb_dept1(id); Query OK, 0 rows affected (1.38 sec) Records: 0 Duplicates: 0 Warnings: 0
mysql> SHOW CREATE TABLE tb_emp2\G *************************** 1. row *************************** Table: tb_emp2 Create Table: CREATE TABLE `tb_emp2` ( `id` int(11) NOT NULL, `name` varchar(30) DEFAULT NULL, `deptId` int(11) DEFAULT NULL, `salary` float DEFAULT NULL, PRIMARY KEY (`id`), KEY `fk_tb_dept1` (`deptId`), CONSTRAINT `fk_tb_dept1` FOREIGN KEY (`deptId`) REFERENCES `tb_dept1` (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=gb2312 1 row in set (0.12 sec)
注意:在為已經建立好的資料表新增外來鍵約束時,要確保新增外來鍵約束的列的值全部來源於主鍵列,並且外來鍵列不能為空。
使用外來鍵約束的時機
老實說,在MySQL中使用InnoDB表的時候,不一定非用外來鍵約束不可,然而,為了外來鍵約束在某些情況下的功用,我們將透過前面提到的例子的程式碼進行具體說明。它包括兩個MyISAM表,分別用於存放部落格文章和評論。
定義資料庫模式時,我們要在這兩個表之間建立起一對多的關係,方法是在存放評論的表中建立一個外來鍵,以將其中的資料行(即評論)對應到特定的部落格文章。下面是建立示例MyISAM表的基本SQL程式碼:
DROP TABLE IF EXISTS `test`.`blogs`; CREATE TABLE `test`.`blogs` ( `id` INT(10) UNSIGNED AUTO_INCREMENT, `title` TEXT, `content` TEXT, `author` VARCHAR(45) DEFAULT NULL, PRIROSE KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; DROP TABLE IF EXISTS `test`.`comments`; CREATE TABLE `test`.`comments` ( `id` INT(10) UNSIGNED AUTO_INCREMENT, `blog_id` INT(10) UNSIGNED DEFAULT NULL, `comment` TEXT, `author` VARCHAR(45) DEFAULT NULL, PRIROSE KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
到此這篇關於mysql增加外來鍵約束具體方法的文章就介紹到這了。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69901823/viewspace-2851617/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- MySQL禁用恢復外來鍵約束MySql
- Oracle定義約束 外來鍵約束Oracle
- mysql 刪除老是報外來鍵約束MySql
- mysql不能新增外來鍵約束怎麼辦MySql
- mysql啟動和關閉外來鍵約束MySql
- SQL的主鍵和外來鍵約束SQL
- mysql資料庫匯入外來鍵約束問題MySql資料庫
- oracle外來鍵約束的總結Oracle
- Mysql-基本練習(06-唯一約束、外來鍵約束、新增、刪除單列)MySql
- MySQL·捉蟲動態·DROPDATABASE外來鍵約束的GTIDBUGMySqlDatabaseTiDB
- AppBoxFuture(七): 分散式外來鍵約束APP分散式
- SQL外來鍵約束的含義及建立SQL
- Oracle外來鍵約束中NULL的處理OracleNull
- 詳解外來鍵約束(foreign key)
- 【實驗】【外來鍵】小議外來鍵約束對應用程式的影響
- PostgreSQL11preview-支援陣列外來鍵約束SQLView陣列
- 外來鍵約束drop table cascade constraintsAI
- SQL SERVER中找出拙劣的約束,索引,外來鍵SQLServer索引
- 【MySQL】MySQL進階(外來鍵約束、多表查詢、檢視、備份與恢復)MySql
- 資料完整性約束:主鍵、外來鍵、各種約束的建立刪除語句
- 修改外來鍵為validate時需要驗證資料是否符合外來鍵約束
- 遷移後處理外來鍵約束的問題
- mysql中外來鍵約束級聯更新與刪除MySql
- 資料庫約束 主鍵-唯一性-Check-外來鍵資料庫
- mysql啟動和關閉外來鍵約束的方法(FOREIGN_KEY_CHECKS)MySql
- 查詢外來鍵約束、子表欄位等資訊的SQLSQL
- 生成指令碼,得到所有表的外來鍵約束,然後刪除並重建這些約束指令碼
- 解決無法刪除表,提示被外來鍵約束引用
- 查詢(看)表的主鍵、外來鍵、唯一性約束和索引索引
- 關於外來鍵約束和對應主鍵資訊的查詢指令碼指令碼
- oracle主外來鍵鎖_lock_約束Oracle
- Mysql關於資料庫是否應該使用外來鍵約束詳解說明創磅MySql資料庫
- 【Foreign Key】Oracle外來鍵約束三種刪除行為Oracle
- (轉)oracle資料庫中所有外來鍵約束失效SQL語句Oracle資料庫SQL
- 分散式資料庫環境中,外來鍵約束的問題??分散式資料庫
- ORACLE: 查詢(看)表的主鍵、外來鍵、唯一性約束和索引Oracle索引
- 批量刪除MSSQL 中主外來鍵約束SQL
- MYSQL的外來鍵MySql