Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL]Primary key na dwóch kolumnach i problem z delete
Forum PHP.pl > Forum > Przedszkole
konrados
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?
nospor
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.
konrados
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.


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.