Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Nie moge usunac wpisu ze wzgledu na klucz obcy
Forum PHP.pl > Forum > Bazy danych > MySQL
misty
Czesc, mam taki problem:
mam 2 tabele: users i user_to_pages. users to tablica z uzytkownikami a user_to_pages to tablica ktora trzyma konfiguracje pages dla userow, zawiera 2 pola: user_id i page_id. Jej struktura wyglada tak:

  1. CREATE TABLE user_to_pages (
  2. id INT PRIMARY KEY AUTO_INCREMENT NOT NULL,
  3. user_id INT NOT NULL,
  4. page_id INT NOT NULL,
  5. FOREIGN KEY (user_id) REFERENCES users(id) ON UPDATE CASCADE ON DELETE NO ACTION,
  6. FOREIGN KEY (page_id) REFERENCES pages(id) ON UPDATE CASCADE ON DELETE NO ACTION
  7. ) CHARACTER SET utf8 COLLATE utf8_general_ci;




jak probuje usunac rekord z tabeli users to dostaje:
  1. Cannot delete or update a parent row: a foreign key constraint fails (`dbname`.`user_to_pages`, CONSTRAINT `user_to_pages_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE NO ACTION ON UPDATE CASCADE)


dlaczego? przeciez na delete jest no action. Czy na delete tez musi byc cascade abym mogla usuwac z tabeli users?

ps. to sa InnoDb

pzdr,
misty
skowron-line
Cytat(misty @ 2.02.2012, 11:55:36 ) *
Czy na delete tez musi byc cascade abym mogla usuwac z tabeli users?

Tak
nospor
Cytat
Czy na delete tez musi byc cascade abym mogla usuwac z tabeli users?

A wystarczyło zajrzec do manuala
http://dev.mysql.com/doc/refman/5.5/en/inn...onstraints.html
:/
Cytat
NO ACTION: A keyword from standard SQL. In MySQL, equivalent to RESTRICT.
misty
no to ja tego troche nie kumam. przeciez skoro jest NO ACTION to NO ACTION.
nospor
Przeczytaj jeszcze raz uważnie moj ostatni post
misty
ok, juz kumam:

  1. NO ACTION: A keyword from standard SQL. In MySQL, equivalent to RESTRICT. InnoDB rejects the delete or update operation for the parent table if there is a related foreign key value in the referenced table.


dzieki, pzdr

A czy ja moge teraz napisac jakis automatyczny skrypt na update tych indeksow? Czy wpierw musze znalezc ich nazwe i potem recznie usunac indeks i stworzyc na nowo? Pytam poniewaz musze to zrobic w paru miejscach i fajnie by bylo przygotowac automatyczny skrypt.

tzn czy moge zrobic cos takiego ze usune wszystkie klucze obce na danej tabeli? ale w sensie ze automatycznie a nie ze wpierw sobie nazwe sprawdze i wtedy usuwam. Cos w stylu:

delete all foreign keys from table mytable

?
nospor
http://dev.mysql.com/doc/refman/5.0/en/show-index.html
Moze to ci pomoze
misty
nie, to nie pomoze, juz patrzalam. to mi zwraca liste inedksow, ale w ogole bez ich name. czyli musze recznie "show create table.." - stamtad nazwe indexu, usunac i na nowo.. masakra.. :/
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.