68素材站

TP5 Mysql中批量插入数据,有则更新,无则插入

68素材 2719 0

insertAll里面有个replace参数,操作之后发现,即使这个参数设置成true,最后的执行结果是直接把已经存在的数据删除后再插入的,相当于先delete再insert.这样导致一些不需要更新的字段也不存在了.

在网上找到一个 ON DUPLICATE KEY UPDATE 的用法 实验后是自己想要的效果.更新就是update

这里重复就更新是指的更新主键或者唯一索引重复的地方 

直接上代码
$res = Db::execute('INSERT INTO `student`(`student_name`, `student_no`,  `status`, `school_id`, `create_time`) VALUES'.$data.' ON DUPLICATE KEY UPDATE `student_name`= VALUES(student_name),`status`= VALUES(status)');

$data是拼接的字符串
原语句:

$res = Db::execute('INSERT INTO `student`(`student_name`, `student_no`,  `status`, `school_id`, `create_time`) VALUES ("张三", 123, 1, 1, 123123123),("李四", 1, 2, 1, 123123123)  ON DUPLICATE KEY UPDATE `student_name`= VALUES(student_name),`status`= VALUES(status)');

ON DUPLICATE KEY UPDATE 后面跟的就是如果主键或者惟一索引重复时,所要更新的字段


注意拼接字符串的时候 空和字符串都要用""包起来.要不然会报错.

发表评论 (已有0条评论

还木有评论哦,快来抢沙发吧~