Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Aktualizacja SQL przy aktualizacji zduplikowanych kluczy

Po pierwsze, ten wielokolumnowy klucz podstawowy jest prawdopodobnie złym pomysłem; jak już się przekonałeś, utrudnia to manipulowanie poszczególnymi polami. To, co powinieneś zrobić, to dodać do tej tabeli kolumnę bigint autoincrement, która stanie się Twoim nowym kluczem podstawowym, a Twoje trzykolumnowe ograniczenie unikatowości może być zamiast tego unikalnym indeksem. Powinna działać lepiej... ale pozwoli ci również na manipulację, której potrzebujesz. Umożliwi to wykonanie modyfikacji, ale nadal pozwoli zidentyfikować oryginalne wiersze na podstawie ich indeksu całkowitego.

Jeśli to zrobisz, „jednorazową aktualizację” można teraz bezpiecznie wykonać, o ile nie masz nic przeciwko tworzeniu tabel tymczasowych do pracy. Coś takiego:

Utwórz kilka tabel tymczasowych z tym samym schematem, ale bez unikalnego indeks trzykolumnowy - możesz mieć nieunikalny indeks, ponieważ pomoże on w zapytaniach, które zamierzasz wykonać;

Skopiuj rekordy, które chcesz przetworzyć, do pierwszej tabeli (w tym unikalny klucz podstawowy liczby całkowitej);

Zaktualizuj wszystkie detail kolumny, które musisz zaktualizować w tabeli tymczasowej;

Użyj INSERT ... SELECT z SUM i GROUP BY scalić te rekordy w drugiej tabeli;

INSERT INTO temp2 (...whatever...) SELECT ...whatever..., SUM(no) FROM temp1 GROUP BY ...whatever...

Na koniec usuń wszystkie rekordy z tabeli temp1 z oryginalnej tabeli (używając klucza podstawowego liczby całkowitej) i wstaw rekordy z tabeli temp2 do oryginalnej tabeli.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kopia zapasowa bazy danych MySQL

  2. nie można ustawić wartości pola przez ustawiacz odbić

  3. Plusy i minusy nazwy tabeli zawierającej spacje

  4. jakiego zapytania mysql powinienem użyć, aby wybrać kategorię, która pasuje do WSZYSTKICH moich kryteriów?

  5. mysql CONCAT () JAKO nazwa?