完美解决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线性表顺序存储实现代码(增删查改)
Feb 16 PHP
PHP 处理TXT文件(打开/关闭/检查/读取)
May 13 PHP
基于Linux调试工具strace与gdb的常用命令总结
Jun 03 PHP
PHP微框架Dispatch简介
Jun 12 PHP
php定界符
Jun 19 PHP
php实现把url转换迅雷thunder资源下载地址的方法
Nov 07 PHP
WebQQ最新登陆协议的用法
Dec 22 PHP
php建立Ftp连接的方法
Mar 07 PHP
php递归调用删除数组空值元素的方法
Apr 28 PHP
php array_key_exists() 与 isset() 的区别
Oct 24 PHP
PHP十六进制颜色随机生成器功能示例
Jul 24 PHP
PHP实现浏览器中直接输出图片的方法示例
Mar 14 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 解决utf-8和gb2312编码转换问题
2010/03/18 PHP
php实现的RSS生成类实例
2015/04/23 PHP
JavaScript定义类或函数的几种方式小结
2011/01/09 Javascript
js取得url地址参数实例
2013/02/22 Javascript
jquery获得页面元素的坐标值实现思路及代码
2013/04/15 Javascript
如何将php数组或者对象传递给javascript
2014/03/20 Javascript
jQuery中add()方法用法实例
2015/01/08 Javascript
jQuery实现HTML表格单元格的合并功能
2016/04/06 Javascript
jQuery实现别踩白块儿网页版小游戏
2017/01/18 Javascript
node.js爬虫爬取拉勾网职位信息
2017/03/14 Javascript
详解Vue中过度动画效果应用
2017/05/25 Javascript
把vue-router和express项目部署到服务器的方法
2018/02/21 Javascript
vue 实现剪裁图片并上传服务器功能
2018/03/01 Javascript
Element MessageBox弹框的具体使用
2020/07/27 Javascript
Element-ui树形控件el-tree自定义增删改和局部刷新及懒加载操作
2020/08/31 Javascript
简单介绍Python中利用生成器实现的并发编程
2015/05/04 Python
Python 专题六 局部变量、全局变量global、导入模块变量
2017/03/20 Python
Python操作MySQL模拟银行转账
2018/03/12 Python
python基础教程项目四之新闻聚合
2018/04/02 Python
python调用OpenCV实现人脸识别功能
2018/05/25 Python
Python3 文章标题关键字提取的例子
2019/08/26 Python
TensorFlow tf.nn.conv2d实现卷积的方式
2020/01/03 Python
python实现FTP循环上传文件
2020/03/20 Python
解决python便携版无法直接运行py文件的问题
2020/09/01 Python
Python 实现集合Set的示例
2020/12/21 Python
详解Open Folder as PyCharm Project怎么添加的方法
2020/12/29 Python
Rentalcars.com中国:世界上最大的在线汽车租赁服务
2019/08/22 全球购物
Perfume’s Club澳大利亚官网:西班牙领先的在线美容店
2021/02/01 全球购物
J2EE中常用的名词进行解释
2015/11/09 面试题
公司员工检讨书
2014/02/08 职场文书
教师师德反思材料
2014/02/15 职场文书
管理部副部长岗位职责范文
2014/03/09 职场文书
领导班子三严三实心得体会
2014/10/13 职场文书
走近毛泽东观后感
2015/06/04 职场文书
导游词之徐州云龙湖
2019/11/19 职场文书
SpringCloud Alibaba 基本开发框架搭建过程
2021/06/13 Java/Android