完美解决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 相关文章推荐
数据库相关问题
Oct 09 PHP
PHP写入WRITE编码为UTF8的文件的实现代码
Jul 07 PHP
PHP 数组遍历顺序理解
Sep 09 PHP
解析PHP中$_FILES的使用以及注意事项
Jul 05 PHP
利用中国天气预报接口实现简单天气预报
Jan 20 PHP
PHP错误Parse error: syntax error, unexpected end of file in test.php on line 12解决方法
Jun 23 PHP
Yii框架在页面输出执行sql语句以方便调试的实现方法
Dec 24 PHP
php在线解压ZIP文件的方法
Dec 30 PHP
jQuery+PHP实现的掷色子抽奖游戏实例
Jan 04 PHP
php构造方法中析构方法在继承中的表现
Apr 12 PHP
浅谈PHP值mysql操作类
Jun 29 PHP
PHP面向对象继承用法详解(优化与减少代码重复)
Dec 02 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
PHP5+UTF8多文件上传类
2008/10/17 PHP
PHP生成指定长度随机数最简洁的方法
2014/07/14 PHP
php跨站攻击实例分析
2014/10/28 PHP
thinkPHP多语言切换设置方法详解
2016/11/11 PHP
点击隐藏页面左栏或右栏实现js代码
2013/04/01 Javascript
JavaScript中的this关键字介绍与使用实例
2013/06/21 Javascript
jquery必须知道的一些常用特效方法及使用示例(整理)
2013/06/24 Javascript
在javaScript中关于submit和button的区别介绍
2013/10/20 Javascript
一个简单的jquery进度条示例
2014/04/28 Javascript
javascript 动态创建表格的2种方法总结
2015/03/04 Javascript
chrome不支持form.submit的解决方案
2015/04/28 Javascript
Vue.js实现在下拉列表区域外点击即可关闭下拉列表的功能(自定义下拉列表)
2017/05/30 Javascript
关于页面刷新vuex数据消失问题解决方案
2017/07/03 Javascript
浅谈Webpack下多环境配置的思路
2018/06/27 Javascript
Vue.js组件高级特性实例详解
2018/12/24 Javascript
JavaScript实现五子棋游戏的方法详解
2019/07/08 Javascript
Vue+Element UI+vue-quill-editor富文本编辑器及插入图片自定义
2019/08/20 Javascript
Vue+axios封装请求实现前后端分离
2020/10/23 Javascript
addEventListener()和removeEventListener()追加事件和删除追加事件
2020/12/04 Javascript
使用Python下的XSLT API进行web开发的简单教程
2015/04/15 Python
python 转换 Javascript %u 字符串为python unicode的代码
2016/09/06 Python
python利用rsa库做公钥解密的方法教程
2017/12/10 Python
Python使用wxPython实现计算器
2018/01/30 Python
实用自动化运维Python脚本分享
2018/06/04 Python
Python中list循环遍历删除数据的正确方法
2019/09/02 Python
Python实现Word表格转成Excel表格的示例代码
2020/04/16 Python
国际化的太阳镜及太阳镜配件零售商:Sunglass Hut
2016/07/26 全球购物
美国家居装饰店:Z Gallerie
2020/12/28 全球购物
Loreto Gallo英国:欧洲领先的在线药房
2021/01/21 全球购物
奖学金自我鉴定范文
2013/10/03 职场文书
合伙经营协议书范本
2014/04/18 职场文书
三方股东合作协议书范本
2014/09/28 职场文书
2014收银员工作总结范文
2014/12/16 职场文书
食品仓管员岗位职责
2015/04/01 职场文书
小学生红领巾广播稿
2015/08/19 职场文书
初一语文教学反思
2016/03/03 职场文书