完美解决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 相关文章推荐
wordpress之wp-settings.php
Aug 17 PHP
PHP 作用域解析运算符(::)
Jul 27 PHP
PHP新手入门学习方法
May 08 PHP
PHP获取文件后缀名的三个函数
Oct 15 PHP
PHP多个文件上传到服务器实例
Oct 29 PHP
Yii中实现处理前后台登录的新方法
Dec 28 PHP
PHP类的声明与实例化及构造方法与析构方法详解
Jan 26 PHP
Yii2框架中日志的使用方法分析
May 22 PHP
php 猴子摘桃的算法
Jun 20 PHP
PHP开发实现微信退款功能示例
Nov 25 PHP
php爬取天猫和淘宝商品数据
Feb 23 PHP
PHP设计模式(五)适配器模式Adapter实例详解【结构型】
May 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
Cappuccino 卡布其诺咖啡之制作
2021/03/03 冲泡冲煮
亲密接触PHP之PHP语法学习笔记1
2006/12/17 PHP
MySql 按时间段查询数据方法(实例说明)
2008/11/02 PHP
浅析PHP安装扩展mcrypt以及相关依赖项(PHP安装PECL扩展的方法)
2013/07/05 PHP
php获取网页请求状态程序示例
2014/06/17 PHP
destoon设置自定义搜索的方法
2014/06/21 PHP
详解PHP中的Traits
2015/07/29 PHP
PHP下使用mysqli的函数连接mysql出现warning: mysqli::real_connect(): (hy000/1040): ...
2016/02/14 PHP
用JavaScript对JSON进行模式匹配(Part 1-设计)
2010/07/17 Javascript
fancybox modal的完美解决(右上的X)
2012/10/30 Javascript
图片上传插件jquery.uploadify详解
2013/11/15 Javascript
thinkphp 表名 大小写 窍门
2015/02/01 Javascript
JavaScript实现cookie的写入、读取、删除功能
2015/11/05 Javascript
深入学习jQuery Validate表单验证
2016/01/18 Javascript
浅谈js中子页面父页面方法 变量相互调用
2016/08/04 Javascript
js实现精确到毫秒的倒计时效果
2016/08/05 Javascript
javascript 实现文本使用省略号替代(超出固定高度的情况)
2017/02/21 Javascript
实例解析ES6 Proxy使用场景介绍
2018/01/08 Javascript
LayUi中接口传数据成功,表格不显示数据的解决方法
2018/08/19 Javascript
angular4笔记系列之内置指令小结
2018/11/09 Javascript
vue下载excel的实现代码后台用post方法
2019/05/10 Javascript
使用JavaScript获取扫码枪扫描得到的条形码的思路代码详解
2020/06/10 Javascript
python爬虫入门教程之点点美女图片爬虫代码分享
2014/09/02 Python
用Django实现一个可运行的区块链应用
2018/03/08 Python
Python嵌套式数据结构实例浅析
2019/03/05 Python
如何为Python终端提供持久性历史记录
2019/09/03 Python
python小程序基于Jupyter实现天气查询的方法
2020/03/27 Python
Django获取model中的字段名和字段的verbose_name方式
2020/05/19 Python
python如何写try语句
2020/07/14 Python
OpenCV图片漫画效果的实现示例
2020/08/18 Python
html5定位并在百度地图上显示的示例
2014/04/27 HTML / CSS
HTML 5.1来了 9月份正式发布 更新内容预览
2016/04/26 HTML / CSS
上课不认真检讨书
2014/09/17 职场文书
关于感恩的歌曲整理(8首)
2019/08/14 职场文书
Oracle表空间与权限的深入讲解
2021/11/17 Oracle
使用python创建股票的时间序列可视化分析
2022/03/03 Python