Mysql
 sql >> база данни >  >> RDS >> Mysql

SQL актуализация при актуализация на дублиран ключ

Първо, този първичен ключ с няколко колони вероятно е лоша идея; както разбрахте, това затруднява манипулирането на отделните полета. Това, което трябва да направите, е да добавите колона с автоинкремент bigint към тази таблица, която ще стане вашият нов първичен ключ, а вашето ограничение за уникалност от три колони може да бъде уникален индекс. Би трябвало да работи по-добре... но също така ще ви позволи да правите и манипулацията, от която се нуждаете. Това ще ви позволи да извършвате модификации, но все пак ви позволява да идентифицирате оригиналните редове по техния целочислен индекс.

Ако направите това, вашата "еднократна актуализация" вече може да бъде извършена безопасно, стига да нямате нищо против да създадете някои временни таблици, с които да работите. Нещо като това:

Създайте няколко временни таблици със същата схема, но без уникалното индекс с три колони – можете да имате неуникален индекс, защото той ще помогне на заявките, които предстои да изпълните;

Копирайте записите, които трябва да обработите, в първата таблица (включително уникалния целочислен първичен ключ);

Актуализирайте всички detail колони, които трябва да актуализирате във временната таблица;

Използвайте INSERT ... SELECT с SUM и GROUP BY за да обедините тези записи във втората таблица;

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

Накрая изтрийте всички записи в таблицата temp1 от оригиналната таблица (използвайки целочисления първичен ключ) и вмъкнете записите в таблицата temp2 в оригиналната таблица.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Каква е целта на character_set_connection?

  2. Как да получите достъп до MySQL с MySQL Root потребител

  3. Връзка с MySQL от .NET с помощта на библиотека SSH.NET

  4. Автоматично опресняване на таблицата без опресняване на страницата PHP MySQL

  5. Какво е местоположението на mysql клиента .my.cnf в XAMPP за Windows?