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

Pytanie o MYSQL ON DUPLICATE KEY UPDATE

ON DUPLICATE KEY UPDATE po prostu wykonuje SET oświadczenia, które mu dostarczysz w przypadku duplikatu klucza. Nie porównuje wartości poszczególnych kolumn, a jedynie aktualizuje wartości różniące się. Wygląda na to, że będzie działać dla tego, co chcesz zrobić, o ile masz odpowiednie kolumny zdefiniowane jako UNIQUE KEY lub PRIMARY KEY .

Jednak to, co zwykle robię, to uruchamianie wstawiania, a następnie przechwytywanie błędu i wykonywanie innej akcji, jeśli zajdzie taka potrzeba. Ma to wadę polegającą na wysyłaniu 2 zapytań, jeśli istnieje duplikat, ale moim zdaniem jest to znacznie łatwiejsze w utrzymaniu.

Przykład:

$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. Sterownik QMYSQL dostępny, ale nie załadowany

  2. SQL Wybierz tylko wiersze, w których istnieje dokładnie wiele relacji

  3. MySql na temat kasowania koncepcji kaskadowej?

  4. Dziwne znaki w mysql dbase

  5. Programowa aktualizacja zamówień Woocommerce