完美解决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中使用Oracle数据库(2)
Oct 09 PHP
php 面试碰到过的问题 在此做下记录
Jun 09 PHP
使用php计算排列组合的方法
Nov 13 PHP
phpQuery占用内存过多的处理方法
Nov 13 PHP
php遍历目录输出目录及其下的所有文件示例
Jan 27 PHP
显示youtube视频缩略图和Vimeo视频缩略图代码分享
Feb 13 PHP
PHP取余函数介绍MOD(x,y)与x%y
May 15 PHP
PHP定时执行任务实现方法详解(Timer)
Jul 30 PHP
YII动态模型(动态表名)支持分析
Mar 29 PHP
php+redis在实际项目中HTTP 500: Internal Server Error故障排除
Feb 05 PHP
PHP序列化的四种实现方法与横向对比
Nov 29 PHP
php pdo连接数据库操作示例
Nov 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
openPNE常用方法分享
2011/11/29 PHP
php随机输出名人名言的代码
2012/10/07 PHP
PHP输出时间差函数代码
2013/01/28 PHP
Laravel 5.3 学习笔记之 安装
2016/08/28 PHP
Laravel框架Eloquent ORM删除数据操作示例
2019/12/03 PHP
彪哥1.1(智能表格)提供下载
2006/09/07 Javascript
Javascript倒计时代码
2010/08/12 Javascript
关于js datetime的那点事
2011/11/15 Javascript
js中document.getElementByid、document.all和document.layers区分介绍
2011/12/08 Javascript
JavaScript实现移动端滑动选择日期功能
2016/06/21 Javascript
jQuery实现打开页面渐现效果示例
2016/07/27 Javascript
解决node.js安装包失败的几种方法
2016/09/02 Javascript
深入理解ES7的async/await的用法
2017/09/09 Javascript
微信小程序实现图片滚动效果示例
2018/12/05 Javascript
微信小程序BindTap快速连续点击目标页面跳转多次问题处理
2019/04/08 Javascript
Angular如何由模板生成DOM树的方法
2019/12/23 Javascript
解决vue项目router切换太慢问题
2020/07/19 Javascript
基于Python实现的百度贴吧网络爬虫实例
2015/04/17 Python
python使用pil生成图片验证码的方法
2015/05/08 Python
python 类详解及简单实例
2017/03/24 Python
Python 机器学习库 NumPy入门教程
2018/04/19 Python
tensorflow实现简单的卷积神经网络
2018/05/24 Python
使用urllib库的urlretrieve()方法下载网络文件到本地的方法
2018/12/19 Python
Python读写压缩文件的方法
2020/07/30 Python
python实现录音功能(可随时停止录音)
2020/10/26 Python
python3访问字典里的值实例方法
2020/11/18 Python
导出HTML5 Canvas图片并上传服务器功能
2019/08/16 HTML / CSS
Solid & Striped官网:美国泳装品牌
2019/06/19 全球购物
学生个人的自我评价分享
2013/11/05 职场文书
企业文化标语口号
2014/06/09 职场文书
伦敦奥运会口号
2014/06/13 职场文书
2014年食堂工作总结
2014/11/20 职场文书
2015年清剿火患专项行动工作总结
2015/07/27 职场文书
开业庆典致辞
2015/08/01 职场文书
XX部保密工作制度范本
2019/08/27 职场文书
90行Python代码开发个人云盘应用
2021/04/20 Python