330 PHP i MySQL dla każdego
CREATE TABLE Autorzy(
Id INTEGER PRIMARY KEY. Imię VARCHAR(45). Nazwisko VARCHAR(45)
Ograniczenie ze względu na klucz obcy możemy dodać wykonując instrukcję:
ALTER TABLE Książki ADD CONSTRAINT autorzy książki FOREIGN KEY (Autorld) REFERENCES Autorzy!Id)
Taką instrukcję bez problemów można wykonać na pustej tabeli Ksi azki. Jeśli jednak tabela ta będzie zawierała dane niespełniające zależności związanych z kluczem obcym, serwer zgłosi błąd: Cannot add or update a chi Id row: a foreign key constraint fails, tak jak zostało to zaprezentowane na rysunku 11.22.
mysql> ALTER TABLE Książki
-> ADD CONSTRAINT autorzy_ksiazki
-> FOREIGN KEY (autorID) REFERENCES Autorzy(Id);
ERROR 1216 (23000): Cannot ada or update a child row: a foreign key constraint f
ails
mysql>
Rysunek 11.22. Próba dodania klucza obcego do tabeli, w bazie zawierającej niespójne dane
Ograniczenie związane z kluczem obcym może być w każdej chwili usunięte przy wykorzystaniu instrukcji ALTER TABLE w schematycznej postaci:
ALTER TABLE nazwajabeli DROP FOREIGN KEY nazwa_ograniczenia\
Jeśli zatem chcemy usunąć dodane wcześniej ograniczenie autorzy_ksiazki z tabeli Książki, powinniśmy zastosować instrukcję:
ALTER TABLE Książki DROP FOREIGN KEY autorzy_ksiazki:
Podzapytania to mechanizm, który pozwala na wykorzystanie wyników jednego zapytania w innym zapytaniu. Nazywane są one również zapytaniami zagnieżdżonymi. Pełna obsługa podzapytań została wprowadzona do MySQL w wersji 4.1. Mogą być one wykorzystywane w zapytaniach typu SELECT, INSERT, UPDATE i DELETE, gdzie najczęściej są wprowadzane do klauzuli WHERE. Możemy wyróżnić dwa główne typy podzapytań:
♦ proste (ang. simple)
♦ skorelowane (ang. correlated)
Podzapytanie proste to takie podzapytanie, które jest wykonywane raz, a jego wynik jest następnie wykorzystywany w zapytaniu głównym. Załóżmy, że mamy w bazie trzy tabele: Klienci, Towary i Zamówienia, wypełnione danymi takimi, jak w przedstawione