兩種獲取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';

第二種方法會列出所有的非系統數據所有表的主鍵信息和外鍵信息,第一種方法只會列出外鍵約束信息。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM