Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Integralność kluczy
Forum PHP.pl > Forum > Bazy danych > MySQL
Fallout
Witam,

posiadam 2 tabele o takej strukturze:

  1. CREATE TABLE blogs (
  2. b_id Int NOT NULL AUTO_INCREMENT,
  3. u_id Int NOT NULL,
  4. b_name Char(18) NOT NULL,
  5. b_title Char(60),
  6. b_reg_date Timestamp NULL,
  7. b_counter Int,
  8. UNIQUE (b_id),
  9. UNIQUE (b_name),
  10. PRIMARY KEY (b_id)) ENGINE = InnoDB;
  11.  
  12. CREATE TABLE users (
  13. u_id Int NOT NULL AUTO_INCREMENT,
  14. u_login Char(32) NOT NULL,
  15. u_pass Char(32) NOT NULL,
  16. u_email Char(20) NOT NULL,
  17. PRIMARY KEY (u_id)) ENGINE = InnoDB;


i takich powiązaniach:

  1. ALTER TABLE blogs ADD FOREIGN KEY (u_id) REFERENCES users (u_id) ON DELETE cascade ON UPDATE cascade;
  2. ALTER TABLE friends ADD FOREIGN KEY (u_id) REFERENCES users (u_id) ON DELETE cascade ON UPDATE cascade;


i teraz zamiana/usunięcie danego id w tabeli 'users' powoduje usunięcie odpowiednich rekordów w tabeli 'blogs'. Czyli on delete i on update działa dla rodzica (parent). Ale jak zrobić to dla dziecka? (child)

dla child chyba jest tylko 'NONE' lub 'RESTRICT' a ja chcialbym cascade. Da się to zrobić w MySql? (4.1)

z góry dzięki za (p)odpowiedzi smile.gif
dr_bonzo
Nie ma takiej opcji -- usuniecie dziecka nie ma wplywu na rodzica.

Moglbys trigera napisac, ale nie w 4.1 sad.gif
Fallout
niestety moj hosting nie ma mysql 5 :/ no to lipton bede musial to recznie robic. Ale i tak dopiero odkrywam InnoDB i mi sie coraz bedziej zaczyna podobać biggrin.gif

dzięki za odp.

p.s. a jakby trigger wyglądał? Sobie na localu poćwiczę smile.gif
dr_bonzo
Cytat
a jakby trigger wyglądał? Sobie na localu poćwiczę

Nie zabraniam....(czytaj: nie wiem) smile.gif

Ale pamietaj ze usuniecie rodzica spowoduje usuwanie dzieci co znowu wywola tego samego triggera ktory to zacznie usuwac rodzicow a potem .......
cicik
Cytat(dr_bonzo @ 15.10.2006, 13:56:20 ) *
Ale pamietaj ze usuniecie rodzica spowoduje usuwanie dzieci co znowu wywola tego samego triggera ktory to zacznie usuwac rodzicow a potem .......


Nie prawda. W mysqlu przy kaskadowym usuwaniu po kluczach obcych trigegry nie sa wywolywane (poniekad niestety).
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.