完美解决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常量的详解
Jun 09 PHP
一个简单且很好用的php分页类
Oct 26 PHP
PHP中session变量的销毁
Feb 27 PHP
PHP解决URL中文GBK乱码问题的两种方法
Jun 03 PHP
JavaScript与HTML结合的基本使用方法整理
Oct 12 PHP
mysql_escape_string()函数用法分析
Apr 25 PHP
PHP生成图片验证码功能示例
Jan 12 PHP
关于PHP定时发送服务的解决办法
Apr 23 PHP
自制PHP框架之模型与数据库
May 07 PHP
php-fpm开启状态统计的方法详解
Jun 23 PHP
ThinkPHP框架整合微信支付之Native 扫码支付模式二图文详解
Apr 09 PHP
基于PHP的登录和注册的功能的实现
Aug 06 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设计模式 注册表模式(多个类的注册)
2012/02/05 PHP
关于使用coreseek并为其做分页的介绍
2013/06/21 PHP
解析关于wamp启动是80端口被占用的问题
2013/06/21 PHP
php接口与接口引用的深入解析
2013/08/09 PHP
PHP CURL 多线程操作代码实例
2015/05/13 PHP
JSON用法之将PHP数组转JS数组,JS如何接收PHP数组
2015/10/08 PHP
js控制当再次点击按钮时的间隔时间
2014/06/03 Javascript
jquery中each遍历对象和数组示例
2014/08/05 Javascript
Jquery Easyui菜单组件Menu使用详解(15)
2016/12/18 Javascript
JS简单实现移动端日历功能示例
2016/12/28 Javascript
Bootstarp基本模版学习教程
2017/02/01 Javascript
JavaScript Date对象应用实例分享
2017/10/30 Javascript
vue实现nav导航栏的方法
2017/12/13 Javascript
vue2实现搜索结果中的搜索关键字高亮的代码
2018/08/29 Javascript
Vue中的$set的使用实例代码
2018/10/08 Javascript
微信小程序后台持续定位功能使用详解
2019/08/23 Javascript
解决vue 表格table列求和的问题
2019/11/06 Javascript
基于Vant UI框架实现时间段选择器
2020/12/24 Javascript
[03:17]DOTA2-DPC中国联赛1月29日Recap集锦
2021/03/11 DOTA
跟老齐学Python之折腾一下目录
2014/10/24 Python
python分析apache访问日志脚本分享
2015/02/26 Python
解决pandas.DataFrame.fillna 填充Nan失败的问题
2018/11/06 Python
python3学生名片管理v2.0版
2018/11/29 Python
开启Django博客的RSS功能的实现方法
2020/02/17 Python
python数据库开发之MongoDB安装及Python3操作MongoDB数据库详细方法与实例
2020/03/18 Python
python eventlet绿化和patch原理
2020/11/21 Python
新奇的小玩意:IWOOT
2016/07/21 全球购物
喜诗官方在线巧克力店:See’s Candies
2017/01/01 全球购物
英国领先的野生鸟类食品供应商:GardenBird
2018/08/09 全球购物
药学专业大学生自荐信
2013/09/28 职场文书
个人求职简历中英文自我评价
2013/12/16 职场文书
优秀求职自荐信怎样写
2013/12/18 职场文书
离婚协议书范本2014
2014/10/27 职场文书
离婚协议书格式
2014/11/21 职场文书
有关花店创业的计划书模板
2019/08/27 职场文书
Python Django ORM连表正反操作技巧
2021/06/13 Python