Open2

外部キー制約やCASCADE設定を持つテーブルの調査について

まさぴょんまさぴょん

特定の外部キー制約を付与しているテーブルを探す

users テーブルのuser_idを外部キー制約として付与されているテーブルを探す

SELECT TABLE_NAME, COLUMN_NAME, CONSTRAINT_NAME
FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE
WHERE REFERENCED_TABLE_SCHEMA = DATABASE()
  AND REFERENCED_TABLE_NAME = 'users'
  AND REFERENCED_COLUMN_NAME = 'user_id';
まさぴょんまさぴょん

特定の外部キー制約があり、CASCADE 設定も入っているテーブルを探す

users テーブルの user_id を外部キー制約として付与されており CASCADE 設定が入っているテーブルを探す

SELECT kcu.TABLE_NAME, kcu.COLUMN_NAME, kcu.CONSTRAINT_NAME, 
       rc.UPDATE_RULE, rc.DELETE_RULE
FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE AS kcu
JOIN INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS AS rc
  ON kcu.CONSTRAINT_SCHEMA = rc.CONSTRAINT_SCHEMA
  AND kcu.CONSTRAINT_NAME = rc.CONSTRAINT_NAME
WHERE kcu.REFERENCED_TABLE_SCHEMA = DATABASE()
  AND kcu.REFERENCED_TABLE_NAME = 'users'
  AND kcu.REFERENCED_COLUMN_NAME = 'user_id'
  AND (rc.DELETE_RULE = 'CASCADE' OR rc.UPDATE_RULE = 'CASCADE');

特定の外部キー制約があり、CASCADE 設定が入っていないテーブルを探す

users テーブルの user_id を外部キー制約として付与されているが、CASCADE 設定が入っていないテーブルを探す

SELECT kcu.TABLE_NAME, kcu.COLUMN_NAME, kcu.CONSTRAINT_NAME, 
       rc.UPDATE_RULE, rc.DELETE_RULE
FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE AS kcu
JOIN INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS AS rc
  ON kcu.CONSTRAINT_SCHEMA = rc.CONSTRAINT_SCHEMA
  AND kcu.CONSTRAINT_NAME = rc.CONSTRAINT_NAME
WHERE kcu.REFERENCED_TABLE_SCHEMA = DATABASE()
  AND kcu.REFERENCED_TABLE_NAME = 'users'
  AND kcu.REFERENCED_COLUMN_NAME = 'user_id'
  AND (rc.DELETE_RULE = 'CASCADE' OR rc.UPDATE_RULE = 'CASCADE');