Mysql INSERT加入WHERE条件
案列:项目中一个基础数据,在新增的时候,已经判断过唯一的字段内容不能重复了,但是在云环境上,测试出了bug,新增时产生了两条一模一样的数据,我在本地测试时也重现了问题,快速点击新增两下,会有bug出现。代码如下:
解决方法一:加锁,很自然的选择了加锁,又不要改sql,easy的很,然而刚开始把锁加到serviceImpl里面了,导致任何锁都没有效果,锁是执行了,但是事务没有commit,第二次查还是查不到插入后的数据,后来把锁加到了Controller层,解决了问题。但是经理说这样实现方式不好,没有通过。(加锁可以解决单个服务器的并发异常,但是多个服务器的话还是会出现并发异常)
解决方法二:修改sql。在insert的时候加上where条件。本来以为也很简单呢,结果也是试了几次,查了几次才成功。
先放上成功的代码:
INSERT INTO ba_tag (id, partner_id, tag_name,tag_property, del_flag, creator,create_time, modifier, modify_time,ip_address) SELECT #{baTag.id}, #{baTag.partnerId}, #{baTag.tagName}, #{baTag.tagProperty}, #{baTag.delFlag}, #{baTag.creator}, #{baTag.createTime}, #{baTag.modifier}, #{baTag.modifyTime},#{baTag.ipAddress} WHERE NOT EXISTS (SELECT tag_name FROM ba_tag WHERE tag_name = #{baTag.tagName})
之前几个失败的代码:
1,INSERT INTO ba_tag (id, partner_id, tag_name,tag_property, del_flag, creator,create_time, modifier, modify_time,ip_address) VALUES #{baTag.id}, #{baTag.partnerId}, #{baTag.tagName}, #{baTag.tagProperty}, #{baTag.delFlag}, #{baTag.creator}, #{baTag.createTime}, #{baTag.modifier}, #{baTag.modifyTime},#{baTag.ipAddress} WHERE #{baTag.tagName} NOT IN(SELECT tag_name FROM ba_tag WHERE tag_name = #{baTag.tagName})
2,INSERT INTO ba_tag (id, partner_id, tag_name,tag_property, del_flag, creator,create_time, modifier, modify_time,ip_address) VALUES #{baTag.id}, #{baTag.partnerId}, #{baTag.tagName}, #{baTag.tagProperty}, #{baTag.delFlag}, #{baTag.creator}, #{baTag.createTime}, #{baTag.modifier}, #{baTag.modifyTime},#{baTag.ipAddress} WHERE tag_naem != #{baTag.tagName},
正确代码WHERE前面可以加上FROM DUAL也是可以正确执行的。加上FROM DUAL的代码可以在mysql 和sqlserver中执行,但是在oracle中不可以正确执行。
另补充一下:如果在设计表的时候把对应字段添加唯一约束的话,就能省很多事了(因为sql不能通用,所以最后还是修改了数据库的唯一约束,同时在页面加了遮罩效果来解决)。
示例解释:
INSERT INTO 表(
//要插入的字段 id, partner_id, tag_name,tag_property, del_flag, creator,create_time, modifier, modify_time,ip_address )
SELECT
//要插入的值,不能带括号,否则Operand should contain 1 column(s)
#{baTag.id}, #{baTag.partnerId}, #{baTag.tagName}, #{baTag.tagProperty}, #{baTag.delFlag}, #{baTag.creator}, #{baTag.createTime}, #{baTag.modifier}, #{baTag.modifyTime},#{baTag.ipAddress}
FROM DUAL
//dual是为了构建查询语句而存在的表
WHERE NOT EXISTS(SELECT tag_name FROM ba_tag WHERE tag_name = #{baTag.tagName} )
//判断tagName相同的值是否存在,存在则不添加 NOT可以根据情况省略
sql 比对-正常插入语句和insert增加判定条件语句
insert into tablename( 属性1,属性2) values ('值1',‘值2’);
insert into tablename(属性1,属性2) select '值1','值2' from dual where exists (select 1 from tablename where 子句);
Mysql INSERT加入WHERE条件相关推荐
- linux mysql 事务_linux下mysql Insert update delete 事务 用户管理
linux下mysql Insert update delete 事务 用户管理 1.INSERT插入语句格式: INSERT INTO tb_name (字段1, 字段2, ...) VALUES ...
- mysql insert into select大量数据插入比较慢_史上最全MySQL锁机制
本文主要记录学习MyISAM 和 InnoDB 这两个存储引擎. 为什么要学习锁机制 锁是计算机协调多个进程或线程并发访问某一资源的机制. 因为数据也是一种供许多用户共享的资源,如何保证数据并发访问的 ...
- MySQL关联left join 条件on与where不同
以下的文章主要讲述的是MySQL关联left join 条件on与where 条件的不同之处,我们现在有两个表,即商品表(products)与sales_detail(销售记录表).我们主要是通过这两 ...
- MySQL INSERT的4种形态
墨墨导读:MySQL中常用的四种插入数据的语句: insert ,insert select,replace into,insert into on duplicate key update,以下详述 ...
- MySQL——INSERT INTO
INSERT INTO语句: INSERT [LOW_PRIORITY | DELAYED] [IGNORE] [INTO] tbl_name [(col_name,...)] VALUES (exp ...
- MySQL学习记录04where条件子句、联表查询、子查询
文章目录 MySQL学习记录04where条件子句.联表查询.子查询 4.1DQL 4.2指定查询字段 4.3where条件子句 4.4联表查询 4.5分页和排序 4.6子查询 MySQL学习记录04 ...
- INSERT 语句 增加条件,条件成立插入,否则不插入
不推荐用本文的方法 如果可以最好是为表增加 联合主键 ,本文介绍的方法会降低运行速度. 业务层插入数据,联合主键唯一 ,如果重复就插入失败,业务层通过查询确认信息是否已经插入即可. 问题描述: 遇到一 ...
- Mysql insert into + select 插入语句
Mysql insert into + select 插入语句 语法结构 INSERT INTO 表名 (字段1, 字段2....) SELECT字段1,字段2.... FROM表名称 WHERE条件 ...
- mysql count函数加条件总结
文章目录 前言 测试环境 准备工作 条件统计 总结 前言 最近发现在处理Mysql问题时,count()函数频繁上镜,常常出现在分组统计的情景下,但是有时候并不是使用group by分好组就可以直接统 ...
最新文章
- anconda安装后命令行中安装tensorflow报错
- TEASOFT 关于远程WEICHAT命令
- SpringBoot+jquery实现post提交表单并添加隐藏域属性完成编辑功能
- 酒厂选址(codevs 1507)
- tcp连接工具_基于Swoole如何搭建TCP服务,你掌握了吗?
- Android Vendor Test Suite (VTS) 作用及测试方法
- paip. c++ 调用.net dll 最好方式powershell 使用总结.
- Matplotlib显示灰度图
- 样本空间与事件集合,事件间的关系——概率论与数理统计(宋浩)
- vim+Vundle+vim-autoformat+astyle格式化代码
- CSS设置背景颜色为透明
- 大电流输出信号隔离转换模块
- java properties文件 变量_properties文件和环境变量
- 使用铝、金、铜做电极的CCD摄像机
- SqlServer 内存篇(四)—— 各部分内存不足特征及解决方法
- mysql 分销提成计算_销售人员工资计算表-2017销售人员工资提成计算表免费版-东坡下载...
- [第二届 Google 暑期大学生博客分享大赛 - 2011 Android 成长篇]Android 应用程序定制方案(生活类)...
- 2017展望之四:运营商能否老树开新花?
- 程序性能分析及性能测试
- 深度学习以最佳纳米尺度分辨率解决重叠单个分子的3D方向和2D位置,生成蛋白质图片...