MySQL查看錶的外鍵約束關係

      在測試庫中需要對一些數據表做清空數據操作時,因爲表之間有外鍵約束,所以,想了解其約束關係,這時可以通過庫information_schema的key_column_usage表來查看。

       

       - CONSTRAINT_CATALOG: 約束所屬目錄的名稱,值始終爲def

       - CONSTRAINT_SCHAME: 約束所屬schema(database)名稱

       - CONSTRAINT_NAME: 約束名稱

       - TABLE_CATALOG: 表所屬目錄的名稱,值始終爲def

       - TABLE_SCHEMA: 表所屬schema(database)名稱

       - TABLE_NAME: 具有約束的表的名稱

       - ORDINAL_POSITION: 列在約束內的位置,而不是列在表中的位置,列位置從1開始

       - POSITION_IN_UNIQUE_CONSTRAINT: NULL對於唯一和主鍵約束,對於外鍵約束,此列是正在引用的表的鍵中的序號位置

       新建兩個測試表test_a和test_b:

       CREATE TABLE `test`.`test_a`  (
              `id` int(0) NOT NULL,
              `aa` varchar(255) NULL,
              PRIMARY KEY (`id`)
       );

       CREATE TABLE `test`.`test_b`  (
              `id` int(11) NOT NULL,
              `id_a` int(11) NULL,
              `b` varchar(255) NULL,
              PRIMARY KEY (`id`)
        );

       test_b表增加外鍵:

       ALTER TABLE `test`.`test_b` 
       ADD CONSTRAINT `fk_test_b` FOREIGN KEY (`id_a`) REFERENCES `test`.`test_a` (`id`) ON DELETE CASCADE ON      UPDATE CASCADE;

      設外鍵時,有如下幾種關係:

      CASCADE: 在父表上update/delete記錄時,同步update/delete掉字表的匹配記錄

       SET NULL: 在父表上update/delete記錄時,將子表上匹配記錄的列設爲null(要注意字表的外鍵列不能爲not null)

       NO ACTION: 如果子表中有匹配的記錄,則不允許對父表對應候選鍵進行update/delete操作

      RESTRICT: 同no action, 都是立即檢查外鍵約束

      

       這時,查看一下表test_a的外鍵關係,列關係正確:

       select * from INFORMATION_SCHEMA.KEY_COLUMN_USAGE  where REFERENCED_TABLE_NAME='test_a' 

       

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章