INSERT更新。复合键

时间:2012-08-21 19:27:56

标签: php mysql insert

我对This MySQL声明有疑问。

我是从this post

得到的

但是,当我有这样的表时,我不确定如何构造查询。

     TableA
     --------
     id ==> Auto Increment field
     question_id
     form_id
     member_id
     event_id
     admin_id 
     desc
     is_cand_field
     c_field_id

在此,question_id, form_id, memmber_id, event_id, admin_id可以是相同的。 desc, is_cand_field, c_field_id可以改变。插入时,我想检查这个组合是否存在。如果存在,我想更新最后3个字段。如果没有,我想插入一条记录。

上述查询是否可行。从页面上看不清楚。

2 个答案:

答案 0 :(得分:1)

  1. 在这些字段的组合上添加唯一键:

    ALTER TABLE `tablea` ADD UNIQUE INDEX `compound_key` (`question_id`, `form_id`, `member_id`, `event_id`, `admin_id`);
    
  2. 插入值并添加更新部分:

    INSERT INTO tablea (`question_id`, `form_id`, `member_id`, `event_id`, `admin_id`, `desc`, `is_cand_field`, `c_field_id`)
    VALUES (1, 2, 3, 4, 5, 1, 0, 1)
    ON DUPLICATE KEY UPDATE `desc` = VALUES(`desc`), is_cand_field = VALUES(`is_cand_field`), c_field_id = VALUES(`c_field_id`)
    

答案 1 :(得分:0)

您可以在ON DUPLICATE KEY UPDATE部分添加多行。

INSERT INTO TableA (form_id, member_id, event_id, admin_id, desc, is_cand_field, c_field_id)
VALUES (2, 3, 4, 5, 'b', 0, 1)
ON DUPLICATE KEY UPDATE desc='a', is_cand_field=1, c_field_id=2