Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Duplikat klucza, a brak rekordu
phpion
post 24.02.2016, 10:24:18
Post #1





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




Proszę o pomoc bo już wysiadam.
Mam tabelę T (MyISAM), w której klucz główny jest na standardowej kolumnie ID, a dodatkowo postawiony jest klucz unikalności na kolumnach:
K1 (MEDIUMINT(6) UNSIGNED)
K2 (MEDIUMINT(7) UNSIGNED)
K3 (MEDIUMINT(7) UNSIGNED)
K4 (DATE)
Przy wstawianiu rekordu poleceniem:
  1. INSERT INTO T (K1, K2, K3, K4, ILZKP, ILAKT) VALUES (947100, 7006066, 0, '2014-05-01', 0, 0)

otrzymuję błąd duplikatu klucza unikalnego.
Kod
Error Code: 1062. Duplicate entry '947100-7006066-0-2014-05-01' for key 'ui_T'

Dodając ON DUPLICATE KEY błąd nadal występuje.

Sprawdzając co to za rekord:
  1. SELECT * FROM T WHERE K1 = 947100 AND K2 = 7006066 AND K3 = 0 AND K4 = '2014-05-01'

w efekcie otrzymuję brak rekordów. O co może chodzić? :|
Go to the top of the page
+Quote Post
nospor
post 24.02.2016, 10:26:49
Post #2





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




To sie pieprzy tylko dla tych wartosci czy dla dowolnych innych tez?
Mozesz pokazac jak stworzyles ten klucz?

Cytat
Dodając ON DUPLICATE KEY błąd nadal występuje.
Oj, to wyglada jakby to sie pieprzylo w innym miejscu... 'Niezly tu macie burdel siostro' wink.gif


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

"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
phpion
post 24.02.2016, 10:32:44
Post #3





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




Błąd mi wyrzuciło dzisiaj, wczoraj i przedwczoraj wykonywałem eksport danych z bazy do bazy i działał prawidłowo, dziś się coś takiego zaczęło dziać. Generalnie działa to tak, że w zapytaniu docelowym i tak występuje ON DUPLICATE żeby albo nadpisać rekord, albo wstawić nowy.

Klucz jest postawiony standardowo:
  1. CREATE TABLE T (...
  2. UNIQUE KEY `ui_T` (`K1`,`K2`,`K3`,`K4`)
  3. ...);

Sprawdziłem jeszcze jeden myk. Na tej samej maszynie utworzyłem tabelę z kolumnami MEDIUMINT(6) UNSIGNED oraz MEDIUMINT(7) UNSIGNED, wstawiłem do nich po parze 947100 oraz 7006066 w celu sprawdzenia, czy jakimś cudem wartości nie przekraczają zakresu. Nie, nie przekraczają.

// Podobny problem:
http://stackoverflow.com/questions/1313253...duplicate-entry
Spróbuję przeładować dane z tabeli.
Go to the top of the page
+Quote Post
maly_swd
post 29.02.2016, 11:53:33
Post #4





Grupa: Zarejestrowani
Postów: 744
Pomógł: 118
Dołączył: 14.02.2009
Skąd: poziome

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


A może jakaś transakcja jest "w toku" ?

* zresetuj baze
* napraw tabele
* przeindeksuj



Ten post edytował maly_swd 29.02.2016, 11:54:29


--------------------
śmieszne obrazki
Kryzys: Ser jem spleśniały, wino piję stare i samochód mam bez dachu..
Go to the top of the page
+Quote Post
phpion
post 29.02.2016, 13:08:45
Post #5





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




Utworzyłem kopię tabeli i jak na razie rekordy wskakują do niej prawidłowo. Wcześniej próbowałem repair'a, usunąłem indeks i utworzyłem na nowo - bez skutku. Czyli podsumowując: rozwiązanie z podanego przeze mnie linka działa.
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 - 05:55