MYSQL中的单引号学习

1、Esc键下面的那个键:`反单引号是用来引在表名、字段名外面的,当表名、字段名不是保留单词、不是英文以外的其它语言、符合用户自定义标识符的规范,那么是可以不用它的。

2.而'单引号(双引号效果一样)是用来引在字符串常量外面的,任何时候的表名、字段名外面都不能出现单引号,否则就是语法错误。


3、如果字段名或者字符值本身含有单双引号特殊字符,则需要使用转义符号对其进行转义使用:

\ '  
一个单引号(“ '”)符。  
\ "  
一个双引号(“ "”)符。  
\\  
一个反斜线(“\”)符。  

\0   
一个ASCII   0   (NUL)字符。   
\n   
一个新行符。   
\t   
一个定位符。   
\r   
一个回车符。   
\b   
一个退格符。   
\ '   
一个单引号(“ '”)符。   
\ "   
一个双引号(“ "”)符。   
\\   
一个反斜线(“\”)符。   
\%   
一个“%”符。它用于在正文中搜索“%”的文字实例,否则这里“%”将解释为一个通配符。   
\_   
一个“_”符。它用于在正文中搜索“_”的文字实例,否则这里“_”将解释为一个通配符。   
注意,如果你在某些正文环境中使用“\%”或“\%_”,这些将返回字符串“\%”和“\_”而不是“%”和“_”。   

有几种方法在一个字符串内包括引号:   

一个字符串内用“ '”加引号的“ '”可以被写作为“ ' '”。   
一个字符串内用“ "”加引号的“ "”可以被写作为“ " "”。   
你可以把一个转义字符(“\”)放在引号前面。   
一个字符串内用“ "”加引号的“ '”不需要特殊对待而且不必被重复或转义。同理,一个字符串内用“ '”加引号的与“ "”也不需要特殊对待。  

-------------------------------------------我是分割线------------------------------------------------

如果数据库字段值是字符串类型,哪吗建议加上引号,表明这里是字符串处理:

测试表:

复制代码 代码如下:

CREATE TABLE `foo` ( `key` varchar(10) NOT NULL, `time` int(11) NOT NULL, PRIMARY KEY (`key`)) ENGINE=MyISAM DEFAULT CHARSET=utf8;

然后插入30多万条数据,然后执行下面的SQL语句:
复制代码 代码如下:

SELECT *FROM `foo`WHERE `key` =1293322797

查询花费 0.1288 秒,大约花费这么久的时间,然后,给1293322797加上单引号:
复制代码 代码如下:

SELECT *FROM `foo`WHERE `key` ='1293322797'

查询花费 0.0009 秒,基本上相差100倍!!!也就是说不加单引号MYSQL性能损失了100倍,很震撼的比例!

后来用EXPLAIN分别跑了一下上面两条语句,见下面两张图:


没有单引号时


有单引号时

很明显,不使用单引号没有用上主索引,并进行了全表扫描,使用单引号就能使用上索引了。
后来我用大于分别进行了测试,返回的结果集相同,而他们的耗时和上面一样,用EXPLAIN测试,也和上面一样

复制代码 代码如下:

SELECT *FROM `foo`WHERE `key` >1293322797SELECT *FROM `foo`WHERE `key` >'1293322797'

加单引号和不加单引号就是这么大的差别!就是会对mysql性能产生这么大的影响。
再后来,我将字段`key`换成INT类型,这时候,加不加单引号,就没有什么差别了,EXPLAIN显示他们都同样能够用上主索引,只是key_len变短了。

 

就是这些,综上所述,我们在写SQL查询的时候还是不厌其烦的加上单引号吧,似乎那没有坏处。


  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值