INSERT ON DUPLICATE KEY UPDATE用于插入数据时,如果存在重复主键,将只更新ON DUPLICATE KEY UPDATE子句中指定的值。

语法

INSERT INTO table_name[(column_name[, …])]
[VALUES]
[(value_list[, …])]
ON DUPLICATE KEY UPDATE
   c1 = v1, 
   c2 = v2,
   ...;

示例

基本上,该语句首先尝试在表中插入新行。如果发生重复错误,它将使用ON DUPLICATE KEY UPDATE子句中指定的值更新现有行。MySQL根据其执行的操作返回受影响的行数:

  • 如果插入新行,则受影响的行数为1。
  • 如果现有行已更新,则受影响的行数为2。
  • 如果使用其当前值更新现有行,则受影响的行数为0。

插入新的一行数据。

INSERT INTO `student_course`(`id`, `user_id`, `nc_id`, `nc_user_id`, `nc_commodity_id`, `course_no`, `course_name`, `business_id`)
VALUES(277941, 11056941, '1001EE1000000043G2T5', '1001EE1000000043G2TO', '1001A5100000003YABO2', 'kckm303', '工业会计实战V9.0--55', 'kuaiji')
ON DUPLICATE KEY UPDATE
course_name = '工业会计实战V9.0--55',
business_id = 'kuaiji';

再插入一行数据,因为存在重复主键,只更新ON DUPLICATE KEY UPDATE子句中的course_name = '工业会计实战V9.0--66',business_id = 'kuaiji'

INSERT INTO `student_course`(`id`, `user_id`, `nc_id`, `nc_user_id`, `nc_commodity_id`, `course_no`, `course_name`, `business_id`)
VALUES(277942, 11056941, '1001EE1000000043G2T5', '1001EE1000000043G2TO', '1001A5100000003YABO2', 'kckm303', '工业会计实战V9.0--66', 'kuaiji')
ON DUPLICATE KEY UPDATE
course_name = '工业会计实战V9.0--66',
business_id = 'kuaiji';