mysql update 单引号_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一样。

20200107223828031189.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;

后记

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

### 回答1: 在 MySQL 中,单引号是用来表示字符串的。例如,如果你想在一个 SQL 查询中使用一个字符串常量,你可以将它放在单引号中。例如: ``` SELECT * FROM my_table WHERE name = 'John'; ``` 这条 SQL 查询将会返回 `my_table` 表中所有 `name` 字段值为 `'John'` 的记录。注意,字符串常量必须用单引号括起来,否则 MySQL 会将其解析为列名或关键字。 ### 回答2: MySQL中使用单引号是为了表示字符串类型的数据。在SQL语句中,字符串通常被包裹在单引号中,以便于识别字符串的起始和结束位置。 单引号MySQL中的使用有以下几个方面: 1. 插入数据:当向数据库中插入一条记录,如果某个字段的值是字符串类型,就需要使用单引号将该值包裹起来。例如: ``` INSERT INTO table_name (column1, column2) VALUES ('value1', 'value2'); ``` 2. 更新数据:当更新数据库中的记录,同样需要使用单引号将字符串类型的新值包裹起来。例如: ``` UPDATE table_name SET column1 = 'new_value' WHERE condition; ``` 3. 查询数据:在查询语句中,如果要匹配字符串类型的值,同样需要使用单引号将要匹配的值包裹起来。例如: ``` SELECT * FROM table_name WHERE column1 = 'value'; ``` 需要注意的是,如果字符串中需要包含单引号本身,可以使用两个单引号进行转义。例如,要保存一个包含单引号的字符串,可以这样写: ``` INSERT INTO table_name (column1) VALUES ('I''m a string with a single quote'); ``` 总结来说,MySQL使用单引号是为了表示字符串类型的数据,使其在SQL语句中容易辨识和区分。同,使用两个单引号可以在字符串中包含单引号本身。 ### 回答3: MySQL 在查询语句中可以使用单引号 ' 来表示字符串值。这是因为在 MySQL 中,字符串值需要使用引号来标识,而单引号是其中一种常见的方式。 在 SQL 查询语句中,当我们需要指定一个字符串值,可以使用单引号将该值括起来。例如,如果我们要查询某个用户的姓名是 "张三" 的记录,可以通过以下语句来实现: SELECT * FROM users WHERE name = '张三'; 在这个例子中,'张三' 是一个字符串值,它被单引号括起来表示为一个字符串。 需要注意的是,如果字符串中本身含有单引号,那么在字符串值中的单引号需要进行转义。例如,如果我们要查询某个产品的名称是 "Tom's Product",由于字符串中包含单引号,所以可以使用双引号将它括起来,也可以使用转义字符来表示单引号。以下是两种写法的示例: SELECT * FROM products WHERE name = "Tom's Product"; 或者 SELECT * FROM products WHERE name = 'Tom\'s Product'; 在这两个例子中,我们都成功地使用了单引号来表示字符串值,无论字符串值中是否包含单引号,我们都可以通过适当的方式在查询语句中表示出来。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值