【发布时间】:2014-06-05 05:03:33
【问题描述】:
我的表格结构
表格:标记
我的目标: 我想用条件插入或更新多条记录
我目前正在通过此查询进行检查
第一步
SELECT * FROM `marks` WHERE `student` =115 AND `param` =1
第二步
if
records found by matching above criteria i just update record by my new values
else
insert new record into my table
它会正常工作的。但我想减少代码并将其优化为单个查询。它可能与否? 我在 MySQL 文档 INSERT ... ON DUPLICATE KEY UPDATE 上找到了这个。如果这是一个解决方案。如何通过查询实现?
注意:我使用的是 Yii 框架。也欢迎 Yii 的建议
已编辑: 此查询不会更新 rows 。但从插入正常工作中逃脱
INSERT INTO marks(`student`,`param,mark`,`created`,`lastmodified`,`status`)
VALUES
(11,30,10,'00-00-00 00:00:00','00-00-00 00:00:00','U')
ON DUPLICATE KEY UPDATE `mark`=VALUES(`mark`)
【问题讨论】:
-
第一步:在 (student, param) 上创建一个唯一索引,然后像你一样尝试插入,
ON DUPLICATE KEY UPDATE SET mark=VALUES(mark) -
@Wrikken 如何将两列组合设置为唯一的。因为不同的学生有相同的参数。 student 和 param 组合都是唯一的。我不熟悉索引。请需要更多信息。谢谢
-
@Wrikken 我编辑我的问题。请审查它。它不会更新现有记录。但它正确地跳过了重复的条目。我为字段 student 和 param 添加唯一索引。
-
ALTER TABLE marks ADD UNIQUE (student, param);,然后INSERT INTO marks (student, param, mark, created) VALUES (11,20,10,NOW()) ON DUPLICATE KEY UPDATE SET mark=VALUES(mark);应该可以工作。 -
@Wrikken 这个问题解决了。谢谢你的评论。它对其他人有用
标签: php mysql yii insert-update