完美解决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 相关文章推荐
新版mysql+apache+php Linux安装指南
Oct 09 PHP
用Flash图形化数据(二)
Oct 09 PHP
PHP 身份证号验证函数
May 07 PHP
php写的简易聊天室代码
Jun 04 PHP
PHP全概率运算函数(优化版) Webgame开发必备
Jul 04 PHP
php 批量替换程序的具体实现代码
Oct 04 PHP
PHP采用get获取url汉字出现乱码的解决方法
Nov 13 PHP
Zend Framework连接Mysql数据库实例分析
Mar 19 PHP
PHP后台微信支付和支付宝支付开发
Apr 28 PHP
PHP PDOStatement::bindParam讲解
Jan 30 PHP
laravel 出现command not found问题的解决方案
Oct 23 PHP
laravel框架使用FormRequest进行表单验证,验证异常返回JSON操作示例
Feb 18 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/02 PHP
PHP中call_user_func_array()函数的用法演示
2012/02/05 PHP
如何使用PHP获取指定日期所在月的开始日期与结束日期
2013/08/01 PHP
标准PHP的AES加密算法类
2015/03/12 PHP
使用PHP接受文件并获得其后缀名的方法
2015/08/05 PHP
怎么用javascript进行拖拽
2006/07/20 Javascript
pjblog中的UBBCode.js
2007/04/25 Javascript
深入理解javascript动态插入技术
2013/11/12 Javascript
JavaScript函数中关于valueOf和toString的理解
2016/06/14 Javascript
详解AngularJS中ng-src指令的使用
2016/09/07 Javascript
D3.js实现散点图和气泡图的方法详解
2016/09/21 Javascript
Javascript数组循环遍历之forEach详解
2016/11/07 Javascript
微信公众平台开发教程(四) 实例入门:机器人回复(附源码)
2016/12/02 Javascript
ajax实现动态下拉框示例
2017/01/10 Javascript
jQuery插件FusionCharts实现的3D帕累托图效果示例【附demo源码】
2017/03/25 jQuery
基于AGS JS开发自定义贴图图层
2017/03/31 Javascript
HTML5+Canvas调用手机拍照功能实现图片上传(下)
2017/04/21 Javascript
使用Vue.js和Flask来构建一个单页的App的示例
2018/03/21 Javascript
js input输入百分号保存数据库失败的解决方法
2018/05/26 Javascript
Phaser.js实现简单的跑酷游戏附源码下载
2018/10/26 Javascript
关于RxJS Subject的学习笔记
2018/12/05 Javascript
如何HttpServletRequest文件对象并储存
2020/08/14 Javascript
[41:17]完美世界DOTA2联赛PWL S3 access vs CPG 第二场 12.13
2020/12/17 DOTA
CentOS安装pillow报错的解决方法
2016/01/27 Python
python的scikit-learn将特征转成one-hot特征的方法
2018/07/10 Python
Gauss-Seidel迭代算法的Python实现详解
2019/06/29 Python
解决pycharm 工具栏Tool中找不到Run manager.py Task的问题
2019/07/01 Python
关于numpy.where()函数 返回值的解释
2019/12/06 Python
校园之声广播稿
2014/01/31 职场文书
生物科学专业职业规划书范文
2014/02/11 职场文书
搞笑婚礼主持词
2014/03/13 职场文书
支部鉴定材料
2014/06/02 职场文书
公司证明怎么写
2014/09/22 职场文书
2014城乡环境综合治理工作总结
2014/12/19 职场文书
安全生产感想
2015/08/07 职场文书
Python 如何实现文件自动去重
2021/06/02 Python