Jak uzyskać listę wszystkich ograniczeń z określonej bazy danych?
mysql
database-design
constraints
lolajl
źródło
źródło
Odpowiedzi:
Użyj
information_schema.table_constraints
tabeli, aby uzyskać nazwy ograniczeń zdefiniowanych w każdej tabeli:select * from information_schema.table_constraints where constraint_schema = 'YOUR_DB'
Użyj
information_schema.key_column_usage
tabeli, aby pobrać pola w każdym z tych ograniczeń:select * from information_schema.key_column_usage where constraint_schema = 'YOUR_DB'
Jeśli zamiast tego mówisz o ograniczeniach klucza obcego, użyj
information_schema.referential_constraints
:select * from information_schema.referential_constraints where constraint_schema = 'YOUR_DB'
źródło
information_schema.columns.column_default
.Świetna odpowiedź od @Senseful.
Przedstawiam zmodyfikowane zapytanie dla tych, którzy szukają tylko listy nazw ograniczeń (a nie innych szczegółów / kolumn):
SELECT DISTINCT(constraint_name) FROM information_schema.table_constraints WHERE constraint_schema = 'YOUR_DB' ORDER BY constraint_name ASC;
źródło
To naprawdę pomaga, jeśli chcesz zobaczyć ograniczenia klucza podstawowego i obcego, a także reguły dotyczące tych ograniczeń, takie jak ON_UPDATE i ON_DELETE oraz nazwy kolumn i kolumn obcych razem:
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'
Możesz nawet dodać więcej informacji o tych kolumnach, po prostu dodaj to do SQL (i wybierz żądane kolumny):
źródło
SELECT * FROM USER_CONSTRAINTS WHERE TABLE_NAME = "tabnam";
źródło