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

Làm thế nào để thực hiện CHÈN TRÊN CẬP NHẬT KHÓA DUPLICATE hay còn gọi là nâng cấp trong CakePHP 3?

Sử dụng câu trả lời được cung cấp tại https://stackoverflow.com/a/24990944/80353 , Tôi muốn diễn đạt lại điều này bằng cách sử dụng mẫu mã được đưa ra trong câu hỏi.

Để chạy upert trên các bản ghi sau

Felicia, 27
Timmy, 71

vào bảng này

+----+----------+-----+
| id | username | age |
+----+----------+-----+
|  1 | admin    |  33 |
|  2 | Timmy    |  17 |
|  3 | Sally    |  23 |
+----+----------+-----+

cách tốt nhất là viết nó là

$newUsers = [
    [
        'username' => 'Felicia',
        'age' => 27,
    ],
    [
        'username' => 'Timmy',
        'age' => 71,
    ],
];

$columns = array_keys($newUsers[0]);

$upsertQuery = $this->Users->query();

$upsertQuery->insert($columns);

// need to run clause('values') AFTER insert()
$upsertQuery->clause('values')->values($newUsers);

$upsertQuery->epilog('ON DUPLICATE KEY UPDATE `username`=VALUES(`username`), `age`=VALUES(`age`)')
                ->execute();

Kiểm tra điều này tìm hiểu chi tiết về epilog

Kiểm tra điều này để biết chi tiết về cách viết chèn nhiều bản ghi trong một truy vấn duy nhất




  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 không sử dụng chỉ mục khi kiểm tra =1, nhưng sử dụng nó với =0

  2. Cách thiết lập kết nối PDO đúng cách

  3. Sự cố với mysqldump:- tùy chọn --defaults-extra-file không hoạt động như mong đợi

  4. mysql CHỌN LIKE chỉ phải khớp toàn bộ từ với biến

  5. Hiển thị * trong bảng