mysql 进行update时,要更新的字段中有单引号或者双引号导致不能批量生成sql的问题

前言

将数据从一张表迁移到另外一张表的过程中,通过mysql的concat方法批量生成sql时遇到了一个问题,即进行UPDATE更新操作时如果原表中的字段中包含单引号'或者双引号",那么就会生成不正确的update语句。

原因当然很简单因为update table set xxx = 'content'时content一般由英文单引号'或者双引号"包裹起来,使用单引号较多。

如果content中包含单引号'时我们需要对单引号'进行转义或者将content用双引号括起来,这样双引号"里面的单引号'就会被视为普通的字符,同理如果content中包含双引号"那么我们就可以换成单引号括起来content,这样双引号"就会被视为普通字符。但是如果content中既包含单引号'又包含双引号",这时我们就不得不对content中的内容进行转义了。

实践

学生表student中有以下四条数据,现在要把student表中的四条数据按照id更新到用户表user当中,user表的结构同student一样。

image.png

1、内容中含有单引号

有单引号的可以用双引号括起来

select concat("update user set name = '",name,"' where id = ",id,";") from student where id = 1;

2、内容中含有双引号

有双引号的可以用单引号括起来

select concat("update user set name = \"",name,"\" where id = ",id,";") from student where id = 3;

3、内容中包含双引号和单引号

需使用replace函数将content中的单引号和双引号替换为转义的形式。

函数介绍:replace(object,search,replace),把object对象中出现的的search全部替换成replace。

select concat("update user set name = '",replace(replace(name,"'","\\\'"),"\"","\\\""),"' where id = ",id,";") from student where id = 2;

对student整表应用以下sql

select concat("update user set name = '",replace(replace(name,"'","\\\'"),"\"","\\\""),"' where id = ",id,";") from student;

得到的结果是:

update user set name = '小明\"' where id = 1;
update user set name = '\'翎\"野' where id = 2;
update user set name = '\'小王' where id = 3;
update user set name = '小李' where id = 4;

后记

知无不言,言无不尽,百人誉之不加密,百人毁之不加疏。

如果对您有帮助,请不要忘了给翎野君点赞。

Image placeholder
vanGoghProvence
未设置
  82人点赞

没有讨论,发表一下自己的看法吧

推荐文章
Bash技巧:详解用$获取变量值是否要加双引号或者大括号

本篇文章介绍在Linuxbashshell中,用$获取变量值时,是否要加双引号、是否要加大括号。用$获取变量值是否要加双引号在bashshell脚本中,用$来获取变量值时,有一些不加双引号,例如$ar

《关于MySQL的一些骚操作》

概要回顾以前写的项目,发现在规范的时候,还是可以做点骚操作的。假使以后还有新的项目用到了MySQL,那么肯定是要实践一番的。为了准备,创建测试数据表(建表语句中默认使用utf8mb4以及utf8mb4

mysql 查询按照中文进行排序

在mysql中我们使用orderby来实现查询排序,如:SELECT\*FROMmemberORDERBYidASC//查询用户表并按照id正序排序 SELECT\*FROMmemberORDERBY

MySQL 性能优化:8 种常见 SQL 错误用法!

1、LIMIT语句分页查询是最常用的场景之一,但也通常也是最容易出问题的地方。比如对于下面简单的语句,一般DBA想到的办法是在type,name,create_time字段上加组合索引。这样条件排序都

Oracle/云MySQL/MsSQL“大迁移”真相及最优方案

最近一段时间碰到一些数据迁移的项目,如:Oracle迁移到MySQL,MsSQL迁移到MySQL,云MySQL迁移到本地MySQL。对于这方面做了系统的整理。包括:迁移方案的选择、如何跳出迁移遇到的坑

一条SQL语句在MySQL中如何执行的

前两天发了一条SQL慢的原因有哪些,在那篇文章我没有说到优化器之类的,我觉得如果配合一条SQL是如何执行的,会更好,所以特地找了一篇。来源:JavaGuide  |作者:木木匠本篇文章会分析一个sql

jdbcTemplate batchUpdate 使用注意事项

问题通过jdbcTemplate批量插入数据voidbatchInsert(finalListdoList){ jdbcTemplate.batchUpdate(sql,newBatchPrepare

VMware斥资27亿美元完成对Pivotal的收购

昨日,VMware公司正式宣布,已经完成对Pivotal公司的收购,这笔交易斥资27亿美元。收购完成后,Pivotal的股权结构将从纽约证券交易所退市,以VMware全资子公司的形式运营。其实,VMw

jquery获取url的参数乱码

jquery获取url的参数乱码//扩展方法获取url参数 $.getUrlParam=function(name){ varreg=newRegExp("(^|&)"+name+"=([^&]*)(

kernel的结构与命令行参数

kernel包结构在RHEL中rpm包是一种cpio格式的压缩文件,它由源文件和元数据(metadata)组成。而在rpm包中kernelrpm比较特殊,是一个只有元数据的包,在元数据中约束了以下的包

迁移上云之前,要向云提供商提出三个安全问题!

大量案例证明,企业业务迁移上云是很好的一条途径,尽管如此,许多企业领导者表示,将他们的旧系统从本地硬件转移到云上仍然存在担心。这种担心是合理的。在本地硬件上投入大量资金的公司可能不愿意在类似的部署上投

一直使用AtomicInteger?试一试FiledUpdater

1.背景在进入正题之前,这里先提出一个问题,如何在多线程中去对一个数字进行+1操作?这个问题非常简单,哪怕是Java的初学者都能回答上来,使用AtomicXXX,比如有一个int类型的自加,那么你可以

使用Jupyter NoteBook进行IB查询和交易,以及使用算法交易示例

在搞好IB盈透接口后,试了下客户端交易,但是最终目的还是使用程序化交易。发现vnpy已经提供的Script_engine来支持JupyterNoteBook交易的,而且非常方便调用。 这里就用写了基于

被美列入出口“黑名单”,华为海思凌晨发信:所有备胎芯片全转正,要科技自立

大数据文摘编辑部出品本周三,美国白宫和美国商务部双双采取行动。特朗普签署针对华为的行政令。美国商务部将华为列入管制“实体清单”,从事实上限制华为对美出售和从美采购。这些行动将禁止华为向美国市场出售技术

窝在二线城市很难受,要杀回一线城市重造吗?

01、困惑的提问小伙伴焱在「Java极客技术」星球上提问,内容如下:本人毕业一年多在广州工作了一年左右,因为一些原因离开广州到了二线城市工作,进了个小公司。虽然技术上也用到了SpringCloud、R

Nginx 之父被抓:Rambler集团声称他工作时间开发了NGINX,要求全部代码所有权

俄罗斯搜索引擎Rambler.ru声称拥有NGINX代码的全部所有权。俄罗斯警方近日突击搜查了F5Networks子公司NGINX的莫斯科办事处,NGINX公司开发了互联网上最受欢迎的Web服务器

2019年8月数据库流行度排行:双星闪耀 MySQL 成月度最大赢家

炎炎夏日,DB-Engines的8月榜单已经发布,本月积分MySQL获得了最显著的增长,较上月增加了24分,Oracle获得了18分的增长,Oracle公司的两个王牌产品,闪耀8月。以下是前10名的榜

MySQL是怎么保证数据一致性的

在《写数据库同时发mq消息事务一致性的一种解决方案》一文的方案中把分布式事务巧妙转成了数据库事务。我们都知道关系型数据库事务能保证数据一致性,那数据库到底是怎么设计事务这一特性的呢?一、MySQL事务

可能是全网最好的MySQL重要知识点

什么是MySQL?MySQL是一种关系型数据库,在Java企业级开发中非常常用,因为MySQL是开源免费的,并且方便扩展。阿里巴巴数据库系统也大量用到了MySQL,因此它的稳定性是有保障的。MySQL

MySQL 百万级数据量分页查询方法及其优化

作者|大神养成记原文|  http://t.cn/RnvCJnm方法1:直接使用数据库提供的SQL语句语句样式: MySQL中,可用如下方法:SELECT*FROM表名称LIMITM,N适应场景: 适

MySQL:死锁一例

欢迎关注我的专栏《深入理解MySQL主从原理32讲》 具体可以点击:ttps://j.youzan.com/yEY_Xi 一、问题由来这是我同事问我的一个问题,在网上看到了如下案例,本案例RCRR都可

深入理解 MySQL—锁、事务与并发控制

本文对MySQL数据库中有关锁、事务及并发控制的知识及其原理做了系统化的介绍和总结,希望帮助读者能更加深刻地理解MySQL中的锁和事务,从而在业务系统开发过程中可以更好地优化与数据库的交互。1.MyS

2019年9月数据库流行度排行:MySQL 强劲增长完成深 V 反转

导读:DB-Engines的2019年9月数据库流行度排行榜已经发布,本月最耀眼的明星是MySQL,分值大幅增长25.39分,较年初已经上升了125分,增幅达10%,完成了一次深V反转。相较之下,Or

欧洲最大MySQL用户之一,Booking.com数据库构架探秘!

吴鑫Booking.com数据库工程师TeamLead2015年加入总部位于阿姆斯特丹的Booking.com数据团队,现任数据库工程师团队负责人,主要是负责Booking.com里MySQL相关的运

为什么不建议在 MySQL 中使用 UTF-8?

最近我遇到了一个bug,我试着通过Rails在以“utf8”编码的MariaDB中保存一个UTF-8字符串,然后出现了一个离奇的错误:Incorrect string value: ‘😃