完美解决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 相关文章推荐
Win2003下APACHE+PHP5+MYSQL4+PHPMYADMIN 的简易安装配置
Nov 18 PHP
PHP中实现汉字转区位码应用源码实例解析
Jun 14 PHP
php环境配置之CGI、FastCGI、PHP-CGI、PHP-FPM、Spawn-FCGI比较?
Oct 17 PHP
PHP抽象类 介绍
Jun 13 PHP
php中生成随机密码的自定义函数代码
Oct 21 PHP
php使用memcoder将视频转成mp4格式的方法
Mar 12 PHP
php实现阳历阴历互转的方法
Oct 28 PHP
php使用ffmpeg获取视频信息并截图的实现方法
May 03 PHP
PHP微信开发之文本自动回复
Jun 23 PHP
详谈php静态方法及普通方法的区别
Oct 04 PHP
php获取POST数据的三种方法实例详解
Dec 20 PHP
php获取是星期几的的一些常用姿势
Dec 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
PHP获取本周第一天和最后一天示例代码
2014/02/24 PHP
PHP中strpos、strstr和stripos、stristr函数分析
2016/06/11 PHP
网页里控制图片大小的相关代码
2006/06/13 Javascript
js操作ajax返回的json的注意问题!
2010/02/23 Javascript
jquery动态添加option示例
2013/12/30 Javascript
Bootstrap编写导航栏和登陆框
2016/05/30 Javascript
bootstrap fileinput完整实例分享
2016/11/08 Javascript
关于微信上网页图片点击全屏放大效果
2016/12/19 Javascript
Angular.js ng-file-upload结合springMVC的使用教程
2017/07/10 Javascript
微信小程序实现聊天对话(文本、图片)功能
2018/07/06 Javascript
详解vue后台系统登录态管理
2019/04/02 Javascript
详解JavaScript中的强制类型转换
2019/04/15 Javascript
基于JS开发微信网页录音功能的实例代码
2019/04/30 Javascript
js操作两个json数组合并、去重,以及删除某一项元素
2020/09/22 Javascript
[01:24:51]2014 DOTA2华西杯精英邀请赛 5 25 LGD VS NewBee第二场
2014/05/26 DOTA
python实现根据窗口标题调用窗口的方法
2015/03/13 Python
详解Swift中属性的声明与作用
2016/06/30 Python
理解Python中的绝对路径和相对路径
2017/08/30 Python
对pandas的行列名更改与数据选择详解
2018/11/12 Python
基于TensorFlow中自定义梯度的2种方式
2020/02/04 Python
Python pymysql模块安装并操作过程解析
2020/10/13 Python
Python中正则表达式对单个字符,多个字符和匹配边界等使用
2021/01/27 Python
如何用Django处理gzip数据流
2021/01/29 Python
简单总结CSS3中视窗单位Viewport的常见用法
2016/02/04 HTML / CSS
马来西亚在线购物:POPLOOK.com
2019/12/09 全球购物
C#笔试题和英文面试题
2013/02/07 面试题
儿媳婚宴答谢词
2014/01/14 职场文书
2014三八妇女节活动总结范文四篇
2014/03/09 职场文书
学生党员公开承诺书
2014/05/28 职场文书
服务标语口号
2014/07/01 职场文书
联片教研活动总结
2014/07/01 职场文书
党支部反对四风思想汇报
2014/10/10 职场文书
先进单位申报材料
2014/12/25 职场文书
九年级历史教学反思
2016/02/19 职场文书
浅谈Nginx 中的两种限流方式
2021/03/31 Servers
制作能在nginx和IIS中使用的ssl证书
2021/06/21 Servers