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



 
  
				

 
                             
 


 
                        
 
		 
	