zoukankan      html  css  js  c++  java
  • 两种获取MySql数据库中所有表的主键和外键约束信息的Sql语句

        最近在写Rafy底层的一些东西,在数据库方面把MySql数据库集成到里面去,里面有一个需求,需要获取非系统数据库,也就是我们自己建立的数据库中所有表的主键和外键元数据列表。

         第一种方法:是网上的方法,可以直接使用,【MySQL 查看数据库中有主外键关系的表信息

    SELECT C.TABLE_SCHEMA            拥有者,
               C.REFERENCED_TABLE_NAME  父表名称 ,
               C.REFERENCED_COLUMN_NAME 父表字段 ,
               C.TABLE_NAME             子表名称,
               C.COLUMN_NAME            子表字段,
               C.CONSTRAINT_NAME        约束名,
               T.TABLE_COMMENT          表注释,
               R.UPDATE_RULE            约束更新规则,
               R.DELETE_RULE            约束删除规则
          FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE C
          JOIN INFORMATION_SCHEMA. TABLES T
            ON T.TABLE_NAME = C.TABLE_NAME
          JOIN INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS R
            ON R.TABLE_NAME = C.TABLE_NAME
           AND R.CONSTRAINT_NAME = C.CONSTRAINT_NAME
           AND R.REFERENCED_TABLE_NAME = C.REFERENCED_TABLE_NAME
          WHERE C.REFERENCED_TABLE_NAME IS NOT NULL ;     

    UPDATE/DELETE_RULE 类型:
     1. CASCADE: 从父表中删除或更新对应的行 ,同时自动的删除或更新自表中匹配的行 。ON DELETE CANSCADE和ON UPDATE CANSCADE都被InnoDB所支持 。
     2. SET NULL: 从父表中删除或更新对应的行 ,同时将子表中的外键列设为空 。注意, 这些在外键列没有被设为NOT NULL时才有效。 ON DELETE SET NULL和ON UPDATE SET SET NULL都被InnoDB所支持 。
     3. NO ACTION: InnoDB拒绝删除或者更新父表 。
     4. RESTRICT: 拒绝删除或者更新父表 。指定RESTRICT( 或者NO ACTION )和忽略ON DELETE或者ON UPDATE选项的效果是一样的 。
     5. SET DEFAULT: InnoDB目前不支持 。

    第二种方法:

    select O.CONSTRAINT_SCHEMA,O.CONSTRAINT_NAME,O.TABLE_SCHEMA,O.TABLE_NAME,O.COLUMN_NAME,O.REFERENCED_TABLE_SCHEMA,O.REFERENCED_TABLE_NAME,O.REFERENCED_COLUMN_NAME,O.UPDATE_RULE,O.DELETE_RULE,O.UNIQUE_CONSTRAINT_NAME,T.CONSTRAINT_TYPE from (
    select K.CONSTRAINT_SCHEMA,K.CONSTRAINT_NAME,K.TABLE_SCHEMA,K.TABLE_NAME,K.COLUMN_NAME,K.REFERENCED_TABLE_SCHEMA,K.REFERENCED_TABLE_NAME,K.REFERENCED_COLUMN_NAME,R.UPDATE_RULE,R.DELETE_RULE,R.UNIQUE_CONSTRAINT_NAME from information_schema.KEY_COLUMN_USAGE K LEFT join information_schema.REFERENTIAL_CONSTRAINTS R on K.CONSTRAINT_NAME=R.CONSTRAINT_NAME)
     as O inner join Information_schema.TABLE_CONSTRAINTS T on O.Table_Name=T.TABLE_NAME and T.CONSTRAINT_NAME=O.CONSTRAINT_NAME where O.CONSTRAINT_SCHEMA!='mysql' and O.CONSTRAINT_SCHEMA!='sys';

    第二种方法会列出所有的非系统数据所有表的主键信息和外键信息,第一种方法只会列出外键约束信息。

  • 相关阅读:
    PyQt5-关闭窗体显示提示框(窗口界面显示器上居中)-5
    PyQt5-按钮关闭窗体-4
    PyQt5-显示提示消息文本-3
    PyQt5-显示一个窗体,设置标题和图标-2
    [bzoj1053][HAOI2007]反素数ant【暴力】
    [bzoj1083][SCOI2005]繁忙的都市【MST】
    [bzoj1088][SCOI2005]扫雷Mine【乱搞】
    [bzoj1070][SCOI2007]修车【费用流】
    [bzoj1087][SCOI2005]互不侵犯King【dp】
    [bzoj4558][JLoi2016]方【容斥原理】【计数】
  • 原文地址:https://www.cnblogs.com/PatrickLiu/p/6269145.html
Copyright © 2011-2022 走看看