Forum > Tematy dowolne > Pomoc z SQLem - ktoś się orientuje ?

Strona 1 z 1 1
skocz

Inferno

Wysłane 2012-09-24 16:16 , Edytowane 2012-09-24 16:17

Witam, jak napisać zapytanie, aby przy usunięciu klucza głównego, inne tabele w bazie danych się aktualizowały i też usuwały te rekordy, w których dany klucz obcy występuje ?

Np.

CREATE TABLE A
(
AID INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
Description TEXT
);

CREATE TABLE B
(
THISID INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
AID INTEGER NOT NULL,
Number INTEGER NOT NULL,
FOREIGN KEY (AID) REFERENCES A(AID) ON DELETE CASCADE
);


Tylko to nie spowoduje, że przy usunięciu w tabeli A wpisu PK=3, wpisy w tabeli B gdzie FK=3 zostaną usunięt \"\olaboga\"

PS. jest to Sqlite w wersji 3.

Netman

  • Netman
  • wiadomość Użytkownik

  • 6787 wypowiedzi

Wysłane 2012-09-24 17:00

ON DELETE CASCADE \"\hmmm\"

i7 6700k, G.Skill 16GB 3000Mhz, Asus GTX970 DirectCu II Strix, SSD Samsung 256GB, Gigabyte GA-Z170-HD3P, Xonar XD, Dell U2715h ۻۻ Galaxy Tab S ۻۻ Galaxy S8 ۻۻ

Inferno

Wysłane 2012-09-24 20:12

Gdzieś to wyczytałem, ale to nic nie działa, jacyś ludzie to sobie mieli we własnych bazach.

Netman

  • Netman
  • wiadomość Użytkownik

  • 6787 wypowiedzi

Wysłane 2012-09-24 21:16 , Edytowane 2012-09-24 21:19

@Inferno
Nie zwróciłem uwagi.
Właśnie ON DELETE CASCADE używa się do tego \"\mikolaj\"

Tu jakiś przykład [LINK]
A tu w sqllite dokładnie [LINK]
Ogółem to [LINK] \"\jezor\"

i7 6700k, G.Skill 16GB 3000Mhz, Asus GTX970 DirectCu II Strix, SSD Samsung 256GB, Gigabyte GA-Z170-HD3P, Xonar XD, Dell U2715h ۻۻ Galaxy Tab S ۻۻ Galaxy S8 ۻۻ

Inferno

Wysłane 2012-09-25 20:12

Faktycznie :P Ale jest jeden myk :P

To ON DELETE/UPDATE CASCADE wystarczy dodać, nie trzeba jakiś trigerów, Constraintów czy cokolwiek tam się jeszcze znajduje.

A myk jest taki, że trzeba najpierw wykonać zapytanie:

PRAGMA foreign_keys = ON

Chyba za każdym razem, kiedy się otworzy bazę. Przełącza ono opcję, że klucze obce są aktywne (czy coś takiego) i działa to jak klucz obcy :P Czyli nie będzie można dodać taką wartość w kluczu obcym, jeżeli nie ma jej w tabeli do której się on odnosi.

Strona 1 z 1 1
skocz

Kto jest online: 2 użytkowników, 307 gości

NetCop , salem78 ,