完美解决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代码
Dec 06 PHP
php继承的一个应用
Sep 06 PHP
解析php获取字符串的编码格式的方法(函数)
Jun 21 PHP
高性能PHP框架Symfony2经典入门教程
Jul 08 PHP
PHP exif扩展方法开启详解
Jul 28 PHP
php实现给图片加灰色半透明效果的方法
Oct 20 PHP
php实现把url转换迅雷thunder资源下载地址的方法
Nov 07 PHP
PHP网站开发中常用的8个小技巧
Feb 13 PHP
Zend Framework缓存Cache用法简单实例
Mar 19 PHP
php图片添加水印例子
Jul 20 PHP
PHP获取对象属性的三种方法实例分析
Jan 03 PHP
使用laravel的Eloquent模型如何获取数据库的指定列
Oct 17 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
discuz图片顺序混乱解决方案
2015/07/29 PHP
Laravel 的数据库迁移的方法
2017/07/31 PHP
用js实现随机返回数组的一个元素
2007/08/13 Javascript
jquery 倒计时效果实现秒杀思路
2013/09/11 Javascript
ajax与302响应代码测试
2013/10/23 Javascript
用javascript添加控件自定义属性解析
2013/11/25 Javascript
nodejs分页类代码分享
2014/06/17 NodeJs
Javascript递归打印Document层次关系实例分析
2015/05/15 Javascript
Jquery注册事件实现方法
2015/05/18 Javascript
Angularjs通过指令监听ng-repeat渲染完成后执行脚本的方法
2016/12/31 Javascript
多个上传文件用js验证文件的格式和大小的方法(推荐)
2017/03/09 Javascript
Vue框架中正确引入JS库的方法介绍
2017/07/30 Javascript
js 只比较时间大小的实例
2017/10/26 Javascript
JavaScript作用域、闭包、对象与原型链概念及用法实例总结
2018/08/20 Javascript
vue-awesome-swiper 基于vue实现h5滑动翻页效果【推荐】
2018/11/08 Javascript
js+html实现周岁年龄计算器
2019/06/25 Javascript
Flutter实现仿微信底部菜单栏功能
2019/09/18 Javascript
jQuery Raty星级评分插件使用方法实例分析
2019/11/25 jQuery
python实现操作文件(文件夹)
2019/10/31 Python
CSS Grid布局教程之网格单元格布局
2014/12/30 HTML / CSS
女士时装鞋:Chinese Laundry
2018/08/29 全球购物
HelloFresh奥地利:立即订购烹饪盒
2019/02/22 全球购物
实习自我评价怎么写
2013/12/02 职场文书
高中的职业生涯规划书
2013/12/28 职场文书
村优秀党员事迹材料
2014/01/15 职场文书
红领巾广播站广播稿
2014/02/01 职场文书
军训自我鉴定范文
2014/02/13 职场文书
小学优秀班主任事迹材料
2014/05/17 职场文书
扬尘污染防治方案
2014/06/15 职场文书
2014年售票员工作总结
2014/11/19 职场文书
会计试用期工作总结2015
2015/05/28 职场文书
一行代码python实现文件共享服务器
2021/04/22 Python
mysql联合索引的使用规则
2021/06/23 MySQL
mysql分表之后如何平滑上线详解
2021/11/01 MySQL
试用1103暨1103、1101同门大比武 [ DAIWEI ]
2022/04/05 无线电
方法汇总:Python 安装第三方库常用
2022/04/26 Python