Relacje w MySQL

Zapytań SQL do bazy danych MySQL uczyłem się z dwóch książek “PHP i MySQL” M. E. Davis`a i J. A. Phillips`a, wydawnictwa Helion, oraz książki L. Thomson i L. Wellinga “PHP i MySQL. Tworzenie stron WWW”, tego samego wydawnictwa, oraz innych kursów z internetu, ale niestety rzadko są opisywane (albo ja nie mam szczęścia natrafić) relacje, a w tych książkach w ogóle ich nie ma. Wspomnę jeszcze, że do poznania SQL zmusił mnie projekt na uczelni, wcześniej próbowałem zacząć z nim przygodę, lub choćby nawet troszkę go poznać, ale brakło motywacji i skończyło się to fiaskiem, przynajmniej mniej czasu musiałem poświęcić na całą instalację, bo to już zrobiłem dawno, dawno temu. A zatem przejdźmy do meritum sprawy, utwórzmy prostą tabelę rodzica z tylko jednym wierszem, będącym kluczem podstawowym:

CREATE TABLE parent
(
parent_id INT NOT NULL,
PRIMARY KEY (parent_id)
);

A teraz stwórzmy tabelę dziecka powiązaną z tabelą rodzica przez jej klucz podstawowy:

CREATE TABLE child
(
parent_id INT NOT NULL,
child_id INT NOT NULL,
PRIMARY KEY (parent_id, child_id),
FOREIGN KEY (parent_id) REFERENCES parent (parent_id)
);

I w ten sposób możemy użyć następujących instrukcji:

INSERT INTO parent VALUES (1);

INSERT INTO child VALUES (1, 2);

Ale już instrukcja:

INSERT INTO child VALUES (6, 4);

spowoduje błąd, ponieważ pierwszy argument (czyli 6), odwołuje się do klucza obcego z tabeli parent, a klucz taki o wartości 6 nie istnieje, jest tam tylko 1.

One response to “Relacje w MySQL

  1. Pamiętajmy, że MySQL zazwyczaj jako domyślny mechanizm składowania tabeli ma ustawiony MyISAM, gdzie relacje nie mają znaczenia – w celu poprawnego działania relacji, tabela powinna być składowana np. za pomocą InnoDB

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s