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

Мога ли да използвам ON DUPLICATE KEY UPDATE със заявка INSERT, използвайки опцията SET?

Използвах ON DUPLICATE KEY UPDATE много. В някои ситуации наистина си струва да използвате нестандартно SQL разширение.

Първо, трябва да се уверите, че имате уникално ключово ограничение. ON DUPLICATE KEY UPDATE функцията се активира само ако е имало уникално нарушение на ключ.

Ето често използван формат:

 $query = "INSERT INTO $table (column1, column2, column3)
 VALUES ('value-1', 'value-2', 'value-3')
 ON DUPLICATE KEY UPDATE
 column1 = values(column1),
 column2 = values(column2),
 column3 = values(column3);"

column1 = values(column1) означава "Актуализиране на колона 1 със стойността, която би била вмъкната, ако заявката не беше попаднала в нарушението на дублирания ключ." С други думи, това просто означава актуализиране на колона 1 до това, което би било, ако вмъкването работи.

Гледайки този код, не изглежда правилно, че актуализирате и трите колони, които се опитвате да вмъкнете. Коя от колоните има уникално ограничение за него?

РЕДАКТА

По принцип да се използва ON DUPLICATE KEY UPDATE , вие просто пишете израза за вмъкване както обикновено, но добавяте ON DUPLICATE KEY UPDATE клауза, прикрепена към края. Вярвам, че трябва да работи по следния начин:

INSERT INTO $table 
    set column1 = 'value-1',
        column2 = 'value-2',
        column3 = 'value-3'
ON DUPLICATE KEY UPDATE
    column1 = values(column1),
    column2 = values(column2),
    column3 = values(column3);

Отново една от колоните, които вмъквате, трябва да има уникален индекс (или комбинация от колоните). Това може да се дължи на факта, че един от тях е първичен ключ или защото в таблицата има уникален индекс.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Създадени ли са таблици със CREATE TEMPORARY TABLE в памет или на диск?

  2. Множество външни ключа в една и съща таблица

  3. MySQL ODBC 5.1 Задайте имена, които не са разрешени от драйвера

  4. Neo4j - Избиране на данни с MATCH с помощта на Cypher

  5. Docker не може да свърже приложение с MySQL