- Java na serwerze - kurs przetrwania. Obóz drugi. Od serwletów do Sp...Cena: 39.90 zł
- PHP7 i SQL. Programowanie dla początkujących w 40 lekcjachCena: 31.85 zł
- Antywzorce języka SQL. Jak unikać pułapek podczas programowania baz...Cena: 34.50 zł
- Wprowadzenie do systemów baz danych. Wydanie VIICena: 116.35 zł
Domyślnie w języku używane są wartości INITIALLY IMMEDIATE, których nie musimy dopisywać do zapytania, chociaż możemy; jednak nic to nie zmieni. Opcja INITIALLY DEFERRED jak z samej nazwy opóźnia tą operację.
O jakiej operacji jest mowa?
Operacja najczęściej odnosi się do deklarowania klucza obcego w tabeli. Za pomocą drugiej opcji możemy najpierw stworzyć rekordy z odwołaniami do kluczy, a dopiero potem utworzyć wpisy gdzie są przechowywane klucze. Nie wytworzy wtedy SQL żadnego błędu, jak to zazwyczaj występuje w domyślnych ustawieniach. Pamiętajmy jednak, że SQL nie będzie sprawdzał klucza obcego tylko przed zmaknięciem jakiejś tranzakcji.
CREATE TABLE student (
ucas CHAR(9) PRIMARY KEY
);
CREATE TABLE przedmiot (
kod CHAR(7) PRIMARY KEY
);
CREATE TABLE rejestracja (
ucas CHAR(9),
kod CHAR(7),
PRIMARY KEY (ucas, kod),
FOREIGN KEY (ucas) REFERENCES student INITIALLY DEFERRED,
FOREIGN KEY (code) REFERENCES przedmiot INITIALLY DEFERRED
);
//dozwolone jest tworzenie najpierw wpisu który odwołuje się do pustego klucza obcego
INSERT INTO rejestracja VALUES ('123456789','CS27020');
INSERT INTO rejestracja VALUES ('123456789','CS21120');
//przed zakończeniem tranzakcji dodajemy klucze
INSERT INTO student VALUES ('123456789');
INSERT INTO przedmiot VALUES ('CS27020');
Listing
Ranga: Administrator serwisu Punktów: 0