完美解决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 print EOF实现方法
May 21 PHP
php stream_get_meta_data返回值
Sep 29 PHP
php Session存储到Redis的方法
Nov 04 PHP
zf框架db类的分页示例分享
Mar 14 PHP
跟我学Laravel之请求(Request)的生命周期
Oct 15 PHP
Linux系统中设置多版本PHP共存配合Nginx服务器使用
Dec 21 PHP
php实现图片上传、剪切功能
May 07 PHP
利用php做服务器和web前端的界面进行交互
Oct 31 PHP
如何判断php mysqli扩展类是否开启
Dec 24 PHP
PHP实现验证码校验功能
Nov 16 PHP
PHP+jQuery实现双击修改table表格功能示例
Feb 21 PHP
php实现JWT(json web token)鉴权实例详解
Nov 05 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
php中将时间差转换为字符串提示的实现代码
2011/08/08 PHP
PHP通过CURL实现定时任务的图片抓取功能示例
2016/10/03 PHP
php-msf源码详解
2017/12/25 PHP
JS 分号引起的一段调试问题
2009/06/18 Javascript
IE和firefox浏览器的event事件兼容性汇总
2009/12/06 Javascript
20个非常有用的PHP类库 加速php开发
2010/01/15 Javascript
CSS和Javascript简单复习资料
2010/06/29 Javascript
Extjs中ComboBox加载并赋初值的实现方法
2012/03/22 Javascript
使用jquery实现图文切换效果另加特效
2013/01/20 Javascript
JS实现淘宝幻灯片效果的实现方法
2013/03/22 Javascript
javascript教程:关于if简写语句优化的方法
2014/05/17 Javascript
轻松学习Javascript闭包
2017/03/01 Javascript
js基于FileSaver.js 浏览器导出Excel文件的示例
2017/08/15 Javascript
Three.js如何实现雾化效果示例代码
2017/09/27 Javascript
深入理解es6块级作用域的使用
2019/03/28 Javascript
elementUI table表格动态合并的示例代码
2019/05/15 Javascript
JavaScript 面向对象程序设计详解【类的创建、实例对象、构造函数、原型等】
2020/05/12 Javascript
学习python处理python编码问题
2011/03/13 Python
Linux下编译安装MySQL-Python教程
2015/02/02 Python
python解决Fedora解压zip时中文乱码的方法
2016/09/18 Python
简单谈谈Python中的反转字符串问题
2016/10/24 Python
Python实现调用另一个路径下py文件中的函数方法总结
2018/06/07 Python
python求质数的3种方法
2018/09/28 Python
Django Python 获取请求头信息Content-Range的方法
2019/08/06 Python
pyqt5、qtdesigner安装和环境设置教程
2019/09/25 Python
Python实现将蓝底照片转化为白底照片功能完整实例
2019/12/13 Python
python3字符串输出常见面试题总结
2020/12/01 Python
HTML5中在title标题标签里设置小图标的方法
2020/06/23 HTML / CSS
欧洲第一的摇滚和金属乐队服装网站:EMP
2017/10/26 全球购物
电子商务专业毕业生工作推荐信
2013/11/17 职场文书
护理学专业推荐信
2013/12/03 职场文书
成绩单家长评语大全
2014/04/16 职场文书
秋天的图画教学反思
2014/05/01 职场文书
师德先进个人材料
2014/12/20 职场文书
如何用python插入独创性声明
2021/03/31 Python
MySQL实现配置主从复制项目实践
2022/03/31 MySQL