问题是这个“查找尤金•奧尼爾EUGENE O'NEILL得獎的所有細節”,不明白为什么答案的O和‘之间要加\

select * from nobel where winner = 'EUGENE O'NEILL'

转义字符,因为单引号是字符串的标识字符
select * from nobel where winner = 'EUGENE O'NEILL' 如果这么写,程序会认为'EUGENE O'是个字符串,后面的NEILL‘就是无法识别的信息,会报错。根本原因是首尾两个单引号是字符串标识字符,O后面的单引号只是字符串内容,所以加上斜杠后,程序就可以识别了,字符串中斜杠和后面的一个字符会绑定,表明斜杠后面的字符是字符串内容,以便和标识字符区分开来。

楼上说得对,我再补充一下。
你这个sql里存在三个单引号,按照从左至右的顺序来读取这个sql,会发现这个sql在第二个单引号那里被断开了,构成的是一个sql后面直接接上"NEILL'"这玩意,这是不符合sql语法的,会报语法错误,因此需要对中间那个单引号做某种处理让解析器不认为它是字符串标识符。
在很多程序语言中, 斜杠都是作为转义符存在的,但是各种数据库的sql关于转义单引号的方式其实并不一样,如果你这个题是针对某个数据库的,那么这个答案可能是正确的。但如果没指定数据库,那么我也可以说这个答案不对,因为在某些数据库中,比如oracle数据库,转义单引号的方式是再加一个单引号,或者使用q标记来全局转义单引号

img

img

img

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632