MySQL里面这些已经名存实亡的SQL语句修饰符,你知道吗?
MySQL是非常流行的数据库,它的SQL语法除了继承标准的SQL语法外,还引入了很多特有的SQL语法,但是随着MySQL版本的不断更新,以前特有一些的SQL语句或者修饰符似乎都已经名存实亡了。
LOW_PRIORITY
从字面意思来看,就是低优先级,它是一个指示符,我们能够在MySQL官方文档的DELETE、UPDATE、INSERT等等语句里面看到这个修饰符的身影,这个修饰符之前被很多程序员使用过,是因为它能够提高一定的数据库性能,毕竟将插入、删除、更新等等后执行,但是一个问题是,这个修饰符仅仅对表锁的存储引擎有效,比如MyISAM、MEMOR、MERGE等,但是随着MySQL数据库的更新,我们发现默认存储引擎都是INNODB了,所以从某种程度上来说,这个修饰符已经名存实亡了,同样的道理,和LOW_PRIORITY一样的修饰符QUICK也是一样名存实亡了,虽然它们之前都一定程度上帮助我们程序员优化了一定的性能,但是我们还是不得不和它们说byebye。
(UN)LOCK TABLES
在MyISAM的时代,我们发现很多开源软件,比如discuz等等,在处理一下数据安全的时候,都是使用LOCK TABLES来完成的,这是因为它不支持事务的原因,但是随着我们不断的抛弃这个存储引擎而使用支持事务的存储引擎INNODB之后,我们发现很多程序员或者DBA都在慢慢的将这两个锁表和解锁表的语句慢慢的封存在记忆里面。
SQL_CALC_FOUND_ROWS
对于WEB程序员来说,统计数据或者分页是经常需要做的事情,于是获取某个表或者满足某个查询条件的记录总数就是经常需要做的,对于获取总数,或许我们程序员第一想到的是COUNT,因为我们经常使用它,但是其实还能够使用SQL_CALC_FOUND_ROWS,但是它和count的区别是,这个指示符会忽略limit的存在,因为从官方文档看不到该指示符的优势,所以这个指示符对于我们程序员来说,基本上一直都是空白的,同时这里补充一点,这个指示符是和SELECT语句一起工作的,而且仅仅支持SELECT,使用之后,用SELECT FOUND_ROWS()来返回结果。
随着MySQL的更新,MySQL应该会引入很多新的特征,它会尽可能的减轻我们程序员的负担,希望大家多看看MySQL官方文档。