Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Nie moge usunac wpisu ze wzgledu na klucz obcy
misty
post 2.02.2012, 11:55:36
Post #1





Grupa: Zarejestrowani
Postów: 366
Pomógł: 0
Dołączył: 2.01.2007

Ostrzeżenie: (0%)
-----


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

Ten post edytował misty 2.02.2012, 12:01:30
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 7)
skowron-line
post 2.02.2012, 11:58:17
Post #2





Grupa: Zarejestrowani
Postów: 4 340
Pomógł: 542
Dołączył: 15.01.2006
Skąd: Olsztyn/Warszawa

Ostrzeżenie: (0%)
-----


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

Tak


--------------------
I'm so fast that last night I turned off the light switch in my hotel room and was in bed before the room was dark - Muhammad Ali.
Peg jeżeli chcesz uprawiać sex to dzieci muszą wyjść, a jeżeli chcesz żeby był dobry ty też musisz wyjść - Al Bundy.

QueryBuilder, Mootools.net, bbcradio1::MistaJam
http://www.phpbench.com/
Go to the top of the page
+Quote Post
nospor
post 2.02.2012, 11:59:57
Post #3





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
misty
post 2.02.2012, 12:02:27
Post #4





Grupa: Zarejestrowani
Postów: 366
Pomógł: 0
Dołączył: 2.01.2007

Ostrzeżenie: (0%)
-----


no to ja tego troche nie kumam. przeciez skoro jest NO ACTION to NO ACTION.
Go to the top of the page
+Quote Post
nospor
post 2.02.2012, 12:03:24
Post #5





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Przeczytaj jeszcze raz uważnie moj ostatni post


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
misty
post 2.02.2012, 12:11:01
Post #6





Grupa: Zarejestrowani
Postów: 366
Pomógł: 0
Dołączył: 2.01.2007

Ostrzeżenie: (0%)
-----


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

?
Go to the top of the page
+Quote Post
nospor
post 2.02.2012, 12:32:30
Post #7





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




http://dev.mysql.com/doc/refman/5.0/en/show-index.html
Moze to ci pomoze


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
misty
post 2.02.2012, 12:40:09
Post #8





Grupa: Zarejestrowani
Postów: 366
Pomógł: 0
Dołączył: 2.01.2007

Ostrzeżenie: (0%)
-----


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.. :/
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 24.07.2025 - 19:08