完美解决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 相关文章推荐
关于PHP中操作MySQL数据库的一些要注意的问题
Oct 09 PHP
搜索和替换文件或目录的一个好类--很实用
Oct 09 PHP
PHP 七大优势分析
Jun 23 PHP
php date()日期时间函数详解
May 16 PHP
基于HBase Thrift接口的一些使用问题及相关注意事项的详解
Jun 03 PHP
ThinkPHP中pathinfo的访问模式、路径访问模式及URL重写总结
Aug 23 PHP
twig模板常用语句实例小结
Feb 04 PHP
适合PHP初学者阅读的4本经典书籍
Sep 23 PHP
PHP简单判断iPhone、iPad、Android及PC设备的方法
Oct 11 PHP
Symfony2针对输入时间进行查询的方法分析
Jun 28 PHP
laravel csrf排除路由,禁止,关闭指定路由的例子
Oct 21 PHP
PHP数组Key强制类型转换实现原理解析
Sep 01 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
关于文本留言本的分页代码
2006/10/09 PHP
简单介绍下 PHP5 中引入的 MYSQLI的用途
2007/03/19 PHP
PHP中date()日期函数有关参数整理
2011/07/19 PHP
destoon实现会员商铺中指定会员或会员组投放广告的方法
2014/08/21 PHP
phpinfo() 中 Local Value(局部变量)Master Value(主变量) 的区别
2016/02/03 PHP
PHP Socket网络操作类定义与用法示例
2017/08/30 PHP
Alliance vs Liquid BO3 第二场2.13
2021/03/10 DOTA
JS 页面自动加载函数(兼容多浏览器)
2009/05/18 Javascript
web开发人员学习jQuery的6大理由及jQuery的优势介绍
2013/01/03 Javascript
JQuery 实现在同一页面锚点链接之间的平滑滚动
2014/10/29 Javascript
12306验证码破解思路分享
2015/03/25 Javascript
RequireJS多页面应用实例分析
2016/06/29 Javascript
微信JS-SDK自定义分享功能实例详解【分享给朋友/分享到朋友圈】
2016/11/25 Javascript
浅谈React中的元素、组件、实例和节点
2018/02/27 Javascript
Angular HMR(热模块替换)功能实现方法
2018/04/04 Javascript
vue实现表单未编辑或未保存离开弹窗提示功能
2020/04/08 Javascript
js实现搜索提示框效果
2020/09/05 Javascript
python人人网登录应用实例
2014/09/26 Python
用Python实现服务器中只重载被修改的进程的方法
2015/04/30 Python
python实现批量改文件名称的方法
2015/05/25 Python
对Python中gensim库word2vec的使用详解
2018/05/08 Python
Python设计模式之工厂方法模式实例详解
2019/01/18 Python
解决Atom安装Hydrogen无法运行python3的问题
2019/08/28 Python
python3 re返回形式总结
2020/11/20 Python
美国最大点评网站:Yelp
2018/02/14 全球购物
美国嘻哈文化生活方式品牌:GLD
2018/04/15 全球购物
美国最佳选择产品网站:Best Choice Products
2019/05/27 全球购物
飞利浦法国官网:Philips法国
2019/07/10 全球购物
说说你所熟悉或听说过的j2ee中的几种常用模式?及对设计模式的一些看法
2012/05/24 面试题
《燕子专列》教学反思
2014/02/21 职场文书
风险评估实施方案
2014/03/09 职场文书
植树节口号
2014/06/21 职场文书
介绍信格式
2015/01/30 职场文书
云台山导游词
2015/02/03 职场文书
护士医德医风心得体会
2016/01/25 职场文书
Python日志模块logging用法
2022/06/05 Python