问题描述
今天使用TP3.2插入数据时,为了避免插入相同的数据(所谓相同的数据有相同的主键或唯一索引的相同字段),我创建的索引如下。主键索引是一个自增字段,不可能重复,也就是唯一索引可能重复。我希望如果uid、年份、月份和日期这三个字段相同,那么当前记录将被更新。
问题的解决方案
以前遇到这个问题的时候,我们知道MySQL提供了ON DUPLICATE KEY UPDATE或者REPLACE INTO来解决。
使用复制密钥更新
在插入数据之前,表中只有一条记录,如下图所示
SQL语句如下:插入记录时,如果与表中已有记录相同,则更新更改文章的记录,否则插入记录。
插入“工作日志”(“uid”、“year”、“mounth”、“day”、“status ”)值(1,2016,6,3,1)开复制键更新“status ”=值(“status”),“updated _ ts ”=NOW();
使用替换成
代码如下:
执行以下代码,首先插入一段数据
替换为“工作日志”值(1,2016,6,2,1)的效果如下
再次执行下面的代码,上面插入的代码将被更新
替换为“工作日志”值(1,2016,6,2,5)的效果如下
重复密钥更新和替换成的区别
当出现相同的值时,按复制键更新是更新现有记录,替换为是删除以前的记录,然后插入新记录。
Thinkphp3.2中的解决方案
在Thinkphp3.2中,插入相同数据的问题由add()函数的第三个参数处理。
Model.class.PHP的add()方法调用Db.class.php的insert中的方法。在insert方法中,我们可以看到以下代码:
其中$replace恰好是add方法中的第三个参数。
以上文章完美解决了Thinkphp3.2中插入相同数据的问题,是边肖与大家分享的全部内容,希望能给大家一个参考和支持。