Mam tabelę, której klucz podstawowy jest wymieniony w kilku innych tabelach jako klucz obcy. Na przykład:
CREATE TABLE `X` (
`X_id` int NOT NULL auto_increment,
`name` varchar(255) NOT NULL,
PRIMARY KEY (`X_id`)
)
CREATE TABLE `Y` (
`Y_id` int(11) NOT NULL auto_increment,
`name` varchar(255) NOT NULL,
`X_id` int DEFAULT NULL,
PRIMARY KEY (`Y_id`),
CONSTRAINT `Y_X` FOREIGN KEY (`X_id`) REFERENCES `X` (`X_id`)
)
CREATE TABLE `Z` (
`Z_id` int(11) NOT NULL auto_increment,
`name` varchar(255) NOT NULL,
`X_id` int DEFAULT NULL,
PRIMARY KEY (`Z_id`),
CONSTRAINT `Z_X` FOREIGN KEY (`X_id`) REFERENCES `X` (`X_id`)
)
Teraz nie wiem, ile tabel w bazie danych zawiera klucze obce do X, takich jak tabele Y i Z. Czy istnieje zapytanie SQL, którego mogę użyć do zwrócenia:
- Lista tabel, które mają klucze obce do X
- I które z tych tabel faktycznie mają wartości w kluczu obcym
mysql
foreign-keys
Mel
źródło
źródło
Podręcznik MySQL 5.5: „Ograniczenia InnoDB i ZAGRANICZNE”
źródło
To rozwiązanie wyświetla nie tylko wszystkie relacje, ale także nazwę ograniczenia, które jest wymagane w niektórych przypadkach (np. Ograniczenie upuszczenia):
Jeśli chcesz sprawdzić tabele w określonej bazie danych, dodaj:
źródło
Wszystkie informacje związane ze schematem można znaleźć w mądrze nazwanej
information_schema
tabeli.Możesz sprawdzić tabelę
REFERENTIAL_CONSTRAINTS
iKEY_COLUMN_USAGE
. Pierwsza z nich mówi, do których tabel odwołują się inni; ten drugi powie ci, jak powiązane są ich pola.źródło
Lista wszystkich kluczy obcych w bazie danych wraz z opisem
ograniczenie do określonej kolumny w tabeli tabeli
źródło
Napisałem trochę bash onliner , który możesz napisać do skryptu, aby uzyskać przyjazny wynik:
mysql_references_to:
Wykonanie:
mysql_references_to transaccion
(gdzie transaccion jest losową nazwą tabeli) daje wynik taki jak ten:źródło
Najłatwiejszy:
1. Otwórz phpMyAdmin
2. W lewym rogu kliknij nazwę bazy danych
3. W prawym górnym rogu znajdź zakładkę „Projektant”
Wszystkie ograniczenia zostaną tam pokazane.
źródło