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');