完美解决Thinkphp3.2中插入相同数据的问题


Posted in PHP onAugust 01, 2017

问题描述

今天在使用TP3.2插入数据的时候,为了避免插入相同的数据(所谓相同的数据,其主键相同或者是唯一索引的字段相同),我创建的索引如下图,主键索引为自增字段,不可能出现重复,即唯一索引可能会出现重复,我希望的是uid,year,mounth,day 这三个字段出现相同的话,就更新当前记录。

完美解决Thinkphp3.2中插入相同数据的问题

问题解决办法

在之前面对这样的问题的时候,我们知道,MySQL提供了ON DUPLICATE KEY UPDATE或者REPLACE INTO来解决。

使用ON DUPLICATE KEY UPDATE

插入数据之前,表中就一条记录,如下图

完美解决Thinkphp3.2中插入相同数据的问题

SQL语句如下,当插入记录时候,与表中已有记录相同,则更新改条记录,否则插入记录。

INSERT INTO `work_log` (
`uid`,
`year`,
`mounth`,
`day`,
`status`
) 
VALUES
(1, 2016, 6, 3, 1) 
ON DUPLICATE KEY 
UPDATE 
`status` = 
VALUES
(`status`),
`updated_ts` = NOW();

完美解决Thinkphp3.2中插入相同数据的问题

使用REPLACE INTO

代码如下:

先执行如下代码插入一条数据

REPLACE INTO `work_log` (
`uid`,
`year`,
`mounth`,
`day`,
`status`
) 
VALUES
(1, 2016, 6, 2, 1)

效果如下图

完美解决Thinkphp3.2中插入相同数据的问题

再次执行如下代码,就会更新上面插入的代码

REPLACE INTO `work_log` (
`uid`,
`year`,
`mounth`,
`day`,
`status`
) 
VALUES
(1, 2016, 6, 2, 5)

效果如下图

完美解决Thinkphp3.2中插入相同数据的问题

ON DUPLICATE KEY UPDATE与REPLACE INTO区别

当出现相同的值时候,ON DUPLICATE KEY UPDATE是更新已经存在的记录,REPLACE INTO是删除之前的记录,然后插入新的记录。

Thinkphp3.2中解决办法

在Thinkphp3.2中,通过add()函数的第三个参数来处理插入相同数据的问题。

Model.class.PHP中add()方法,调用了Db.class.php中insert中方法,在insert方法中,我们可以看到有如下代码:

完美解决Thinkphp3.2中插入相同数据的问题

其中$replace 正好是add方法中第三个参数。

以上这篇完美解决Thinkphp3.2中插入相同数据的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
ASP和PHP都是可以删除自身的
Apr 09 PHP
在JavaScript中调用php程序
Mar 09 PHP
PHP下打开URL地址的几种方法小结
May 16 PHP
允许phpmyadmin空密码登录的配置方法
May 29 PHP
用来解析.htgroup文件的PHP类
Sep 05 PHP
php配置php-fpm启动参数及配置详解
Nov 04 PHP
php实现读取和写入tab分割的文件
Jun 01 PHP
浅析Yii2 gridview实现批量删除教程
Apr 22 PHP
PHP数据库编程之MySQL优化策略概述
Aug 16 PHP
PHP7匿名类的用法示例
Apr 05 PHP
PHP中的Iterator迭代对象属性详解
Apr 12 PHP
解决在laravel中leftjoin带条件查询没有返回右表为NULL的问题
Oct 15 PHP
TP3.2批量上传文件或图片 同名冲突问题的解决方法
Aug 01 #PHP
如何修改yii2.0自带的user表为其它的表
Aug 01 #PHP
修改yii2.0用户登录使用的user表为其它的表实现方法(推荐)
Aug 01 #PHP
Nginx下ThinkPHP5的配置方法详解
Aug 01 #PHP
PHP读取word文档的方法分析【基于COM组件】
Aug 01 #PHP
[原创]PHP正则匹配中英文、数字及下划线的方法【用户名验证】
Aug 01 #PHP
php中文乱码问题的终极解决方案汇总
Aug 01 #PHP
You might like
五款常用mysql slow log分析工具的比较分析
2011/05/22 PHP
hadoop常见错误以及处理方法详解
2013/06/19 PHP
百度地图API应用之获取用户的具体位置
2014/06/10 PHP
laravel框架中表单请求类型和CSRF防护实例分析
2019/11/23 PHP
一个用js实现的页内搜索代码
2007/05/23 Javascript
js parsefloat parseint 转换函数
2010/01/21 Javascript
javascript event 事件解析
2011/01/31 Javascript
你必须知道的JavaScript 变量命名规则详解
2013/05/07 Javascript
JQuery设置和去除disabled属性的5种方法总结
2013/05/16 Javascript
jsp js鼠标移动到指定区域显示选项卡离开时隐藏示例
2013/06/14 Javascript
javascript去掉前后空格的实例
2013/11/07 Javascript
JavaScript函数获取事件源的小例子
2014/05/14 Javascript
JavaScript控制图片加载完成后调用回调函数的方法
2015/03/20 Javascript
js阻止浏览器默认行为的简单实例
2016/05/15 Javascript
js弹出窗口返回值的简单实例
2016/05/28 Javascript
jquery-mobile基础属性与用法详解
2016/11/23 Javascript
原生JS实现左右箭头选择日期实例代码
2017/03/14 Javascript
JavaScript对JSON数据进行排序和搜索
2017/07/24 Javascript
laravel5.4+vue+element简单搭建的示例代码
2017/08/29 Javascript
详解Vue webapp项目通过HBulider打包原生APP
2018/06/29 Javascript
在create-react-app中使用sass的方法示例
2018/10/01 Javascript
jQuery动态生成的元素绑定事件操作实例分析
2019/05/04 jQuery
layui使用数据表格实现购物车功能
2019/07/26 Javascript
Vue.js中provide/inject实现响应式数据更新的方法示例
2019/10/16 Javascript
python实现的DES加密算法和3DES加密算法实例
2015/06/03 Python
使用python将时间转换为指定的格式方法
2018/11/12 Python
python环境路径配置以及命令行运行脚本
2019/04/02 Python
Python Process多进程实现过程
2019/10/22 Python
使用TensorFlow-Slim进行图像分类的实现
2019/12/31 Python
老师对学生的寄语
2014/04/09 职场文书
乡镇党的群众路线教育实践活动制度建设计划
2014/11/03 职场文书
关于拾金不昧的感谢信
2015/01/21 职场文书
2015年酒店服务员工作总结
2015/05/18 职场文书
解除处分决定书
2015/06/25 职场文书
行政处罚听证告知书
2015/07/01 职场文书
Python语法学习之进程的创建与常用方法详解
2022/04/08 Python