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' 

       

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