Nie będę się rozpisywać na temat tego, czym są klucze obce. Jeśli ktoś nie miał okazji się z nimi zetknąć, zapraszam do Google. Chciałbym natomiast napisać o tym, jakie wymogi muszą być spełnione, aby klucz obcy mógł zostać utworzony. Nie do końca jest to jasne, a świadczy o tym choćby fakt pojawienia się na jednym z czytanych przeze mnie forów opisu problemu z tworzeniem takiego klucza.

Załóżmy, że mamy dwie tabele, które tworzymy w następujący sposób:

CREATE TABLE tab1 (tab1_id SERIAL, tab2_id INT, CONSTRAINT pk PRIMARY KEY (tab1_id)) ENGINE=InnoDB;
CREATE TABLE tab2 (tab2_id SERIAL, kol INT, CONSTRAINT pk2 PRIMARY KEY (tab2_id)) ENGINE=InnoDB;

Chcemy je połączyć kluczem obcym na kolumnach tab2_id. Próbujemy taki klucz obcy utworzyć:

mysql> ALTER TABLE tab1 ADD CONSTRAINT tab1_tab2_fk FOREIGN KEY (tab2_id) REFERENCES tab2(tab2_id);
ERROR 1005 (HY000): Nie można stworzyć tabeli 'test.#sql-6ed0_b0a9' (Kod błędu: 150)

Co jest nie tak?

czytaj dalej…