Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Câu hỏi CẬP NHẬT KHÓA MYSQL TRÊN DUPLICATE KEY

ON DUPLICATE KEY UPDATE chỉ cần thực hiện SET các câu lệnh mà bạn cung cấp cho nó trong trường hợp có một khóa trùng lặp. Nó không so sánh các giá trị cột riêng lẻ và chỉ cập nhật những giá trị khác nhau. Có vẻ như nó sẽ hoạt động cho những gì bạn muốn làm miễn là bạn có (các) cột thích hợp được xác định là UNIQUE KEY hoặc PRIMARY KEY .

Tuy nhiên, những gì tôi thường làm là chạy bộ chèn và sau đó bắt lỗi và thực hiện một hành động khác nếu tôi cần. Điều này có mặt trái của việc đưa ra 2 truy vấn nếu có một bản sao nhưng theo ý kiến ​​của tôi thì nó dễ bảo trì hơn nhiều.

Ví dụ:

$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. Thiết kế cơ sở dữ liệu:Khóa tổng hợp so với khóa chính một cột

  2. Các cách tốt nhất để sửa chữa bảng InnoDB bị hỏng trong MySQL

  3. Tôi nên đặt COLLATE nào để sử dụng tất cả các loại ngôn ngữ có thể?

  4. Lưu nội dung tệp văn bản vào DB:Giá trị chuỗi không chính xác:'\ xEF \ xBB \ xBF # W ...' cho cột 'nội dung' ở hàng 1

  5. Mối quan hệ JPA OneToMany / ManyToOne không hoạt động - Tôi đang thiếu điều gì?