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

Въпрос на MYSQL ПРИ АКТУАЛИЗИРАНЕ НА ДУБЛИРАН КЛЮЧ

ON DUPLICATE KEY UPDATE просто изпълнява SET изявления, които му предоставяте в случай на дублиран ключ. Той не сравнява стойности на отделни колони и само актуализира различните. Звучи сякаш ще работи за това, което искате да правите, стига да имате правилните колони, дефинирани като UNIQUE KEY или PRIMARY KEY .

Но това, което обикновено правя, е да стартирам вмъкването и след това да хвана грешката и да извърша различно действие, ако трябва. Това има обратната страна на издаването на 2 заявки, ако има дубликат, но според мен е много по-поддържаемо.

Пример:

$db = new PDO($dsn, $user, $pass);
$stmt = $db->prepare('INSERT INTO some_tbl (col1,col2,col3) VALUES (?,?,?)');
$values = array('Col 1 value','Col 2 Value', 'Col 3 Value');
try {
  $db->execute($values);
} catch (PDOException $e) {
  if($e->getCode() == 23000){
    // dupe key do some other action whether update or otherwise
  } else {
    // rethrow non dupe errors
    throw $e;
  }
}


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL - Изберете ред, ако се появи повече от x пъти в друга таблица

  2. Грешки при промяна на съдържанието на променливите в зависимост от състоянието на сесията

  3. Python3.4 не може да инсталира mysql-python

  4. Изберете данни от показване на таблици MySQL заявка

  5. Грешка в MySQL 2006 (HY000) на ред 406:MySQL сървърът е изчезнал