Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL]Primary key na dwóch kolumnach i problem z delete
konrados
post 31.05.2012, 16:55:06
Post #1





Grupa: Zarejestrowani
Postów: 623
Pomógł: 79
Dołączył: 16.01.2008

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


Witam,

Miałem dzisiaj nieprzyjemną przygodę. Otóż modyfikowałem pewien skrypt, w którym musiałem usuwać pewne rekordy w tabelce.

Tabelka 'users_privs' wygląda tak:
(int) user_id
(int) priv_id

Nie ma tam pola ID(autoincrement, primary), za to jest klucz primary postawiony na te dwie kolumy.

W tabelce są np. dane takie:
user_id:1
priv_id:7

I teraz, zapytanie:
  1. delete from user_privs where user_id=1 and priv_id=7


Czasem działa, czasem nie.

Spędziłem z kumplem kupę czasu na to, nic nie działało, mimo, że testowaliśmy na różnych wersjach mysql.

W końcu zrobiliśmy coś, co teoretycznie nie powinno pomóc, a jednak pomogło. Zlikwidowaliśmy primary key na te dwie kolumny (user_id i priv_id), założyliśmy nowe pole ID (autoincrement, primary key) i wszystko zaczęło działać.


Testowaliśmy to na różnych wersjach mysql server, efekt ten sam.

Czy może mi ktoś wytłumaczyć o co tu chodzi?

Edit:


Widzę, że nikt się nie kwapi do odpowiedzi:)

To może inaczej: Czy ktoś z was miał podobną strukturę tabeli i miał/nie miał podobnych problemów? Czy w ogóle zdarza wam się robić tabelkę, gdzie nie ma id(primary key, autoincrement) a w zamian jest tabelka gdzie primary key jest tworzone na dwa pola?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 2)
nospor
post 31.05.2012, 18:20:07
Post #2





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




Cytat
a w zamian jest tabelka gdzie primary key jest tworzone na dwa pola?
Oczywiście że tak, jest to w miare normalna sytuacja. A to że ci nie chciał kasować to może były założone relacje które nie pozwalały na kasowanie akurat tego rekordu. Ciężko w ciemno zgadywać ale na 100% nie było tak, że raz działało a raz nie działało od widzimisie mysql.


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

"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
konrados
post 31.05.2012, 18:27:29
Post #3





Grupa: Zarejestrowani
Postów: 623
Pomógł: 79
Dołączył: 16.01.2008

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


Relacje były, ale nie jako constraints, tj. mysql nie miał pojęcia o relacjach.

Cytat
Ciężko w ciemno zgadywać ale na 100% nie było tak, że raz działało a raz nie działało od widzimisie mysql


Gdy było parę rekordów, likwidował, gdy było więcej, nie likwidował. Nie było żadnego błędu, zachowywał się tak, jakby nie znalazł danego rekordu.


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: 19.07.2025 - 10:08