完美解决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+mysql扎实个人基本功
Mar 27 PHP
php启动时候提示PHP startup的解决方法
May 07 PHP
php抓取页面的几种方法详解
Jun 17 PHP
探讨:array2xml和xml2array以及xml与array的互相转化
Jun 24 PHP
php中sprintf与printf函数用法区别解析
Feb 17 PHP
PHP新建类问题分析及解决思路
Nov 19 PHP
PHP 中提示undefined index如何解决(多种方法)
Mar 16 PHP
php 数组随机取值的简单实例
May 23 PHP
PHP中多线程的两个实现方法
Oct 14 PHP
Yii CFileCache 获取不到值的原因分析
Feb 08 PHP
实例讲解PHP验证邮箱是否合格
Jan 28 PHP
laravel中Redis队列监听中断的分析
Sep 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
PHP4实际应用经验篇(2)
2006/10/09 PHP
从MySQL数据库表中取出随机数据的代码
2007/09/05 PHP
JavaScript 组件之旅(四):测试 JavaScript 组件
2009/10/28 Javascript
Javascript中克隆一个数组的实现代码
2013/12/06 Javascript
jquery高级编程的最佳实践详解
2014/03/23 Javascript
详解javascript实现瀑布流绝对式布局
2016/01/29 Javascript
JSON简介以及用法汇总
2016/02/21 Javascript
使用NodeJs 开发微信公众号(三)微信事件交互实例
2016/03/02 NodeJs
详解基于 axios 的 Vue 项目 http 请求优化
2017/09/04 Javascript
WebStorm ES6 语法支持设置&babel使用及自动编译(详解)
2017/09/08 Javascript
微信小程序使用for循环动态渲染页面操作示例
2018/12/25 Javascript
Node.js学习教程之Module模块
2019/09/03 Javascript
Vue的自定义组件不能使用click方法的解决
2020/07/28 Javascript
[04:48]DOTA2亚洲邀请赛林书豪为VGJ加油
2017/04/01 DOTA
python中的错误处理
2016/04/10 Python
快速入门python学习笔记
2017/12/06 Python
Python用imghdr模块识别图片格式实例解析
2018/01/11 Python
numpy的文件存储.npy .npz 文件详解
2018/07/09 Python
python 爬取B站原视频的实例代码
2020/09/09 Python
python操作链表的示例代码
2020/09/27 Python
美国面料纺织品商城:Fabric.com
2017/06/28 全球购物
宝拉珍选美国官网:Paula’s Choice美国
2018/01/07 全球购物
Antler英国官网:购买安特丽行李箱、拉杆箱
2019/08/25 全球购物
关于Java String的一道面试题
2013/09/29 面试题
英文版销售经理个人求职信
2013/11/20 职场文书
中药专业毕业自荐书范文
2014/02/08 职场文书
《放小鸟》教学反思
2014/04/20 职场文书
综治维稳工作承诺书
2014/08/30 职场文书
群众路线教育实践活动对照检查材料思想汇报(副处级领导)
2014/10/04 职场文书
学生违反校规检讨书
2014/10/28 职场文书
财务负责人岗位职责
2015/02/03 职场文书
水电工岗位职责
2015/02/14 职场文书
工作态度怎么写
2015/06/25 职场文书
jQuery实现影院选座订座效果
2021/04/13 jQuery
浅谈Python数学建模之数据导入
2021/06/23 Python
浅谈redis整数集为什么不能降级
2021/07/25 Redis