Bagaimana cara mendapatkan daftar semua batasan dari database tertentu?
mysql
database-design
constraints
lolajl
sumber
sumber
Jawaban:
Gunakan
information_schema.table_constraints
tabel untuk mendapatkan nama-nama batasan yang ditentukan pada setiap tabel:select * from information_schema.table_constraints where constraint_schema = 'YOUR_DB'
Gunakan
information_schema.key_column_usage
tabel untuk mendapatkan kolom di masing-masing kendala tersebut:select * from information_schema.key_column_usage where constraint_schema = 'YOUR_DB'
Jika sebaliknya Anda berbicara tentang batasan kunci asing, gunakan
information_schema.referential_constraints
:select * from information_schema.referential_constraints where constraint_schema = 'YOUR_DB'
sumber
information_schema.columns.column_default
.Jawaban bagus dari @Senseful.
Saya menyajikan kueri yang dimodifikasi untuk mereka yang hanya mencari daftar nama kendala (dan bukan detail / kolom lainnya):
SELECT DISTINCT(constraint_name) FROM information_schema.table_constraints WHERE constraint_schema = 'YOUR_DB' ORDER BY constraint_name ASC;
sumber
Ini sangat membantu jika Anda ingin melihat batasan kunci utama dan asing serta aturan seputar batasan tersebut seperti ON_UPDATE dan ON_DELETE serta nama kolom dan kolom asing secara bersamaan:
SELECT tc.constraint_schema,tc.constraint_name,tc.table_name,tc.constraint_type,kcu.table_name,kcu.column_name,kcu.referenced_table_name,kcu.referenced_column_name,rc.update_rule,rc.delete_rule FROM information_schema.table_constraints tc inner JOIN information_schema.key_column_usage kcu ON tc.constraint_catalog = kcu.constraint_catalog AND tc.constraint_schema = kcu.constraint_schema AND tc.constraint_name = kcu.constraint_name AND tc.table_name = kcu.table_name LEFT JOIN information_schema.referential_constraints rc ON tc.constraint_catalog = rc.constraint_catalog AND tc.constraint_schema = rc.constraint_schema AND tc.constraint_name = rc.constraint_name AND tc.table_name = rc.table_name WHERE tc.constraint_schema = 'my_db_name'
Anda bahkan mungkin ingin menambahkan beberapa informasi lebih lanjut tentang kolom tersebut, cukup tambahkan ini ke dalam SQL (dan pilih kolom yang Anda inginkan):
sumber
PILIH * DARI USER_CONSTRAINTS DI MANA TABLE_NAME = "tabnam";
sumber