常用 SQL 技巧和常见问题

1、正则表达式的使用
正则表达式(Regular Expression),是指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串。
MySQL 利用 REGEXP 命令提供给用户扩展的正则表达式功能,并且 REGEXP 在进行模式匹配时是区分大小写的。
常用 SQL 技巧和常见问题

常用 SQL 技巧和常见问题

2、巧用 RAND()提取随机行

可以利用这个函数与ORDER BY子句一起完成随机抽取某些行的功能。

3、利用 GROUP BY 的 WITH ROLLUP 子句做统计

WITH ROLLUP 反映的是一种 OLAP 思想,也就是说这一个 GROUP BY 语句执行完成后可以满足用户想要得到的任何一个分组以及分组组合的聚合信息值。

注意:1、当使用 ROLLUP 时, 不能同时使用 ORDER BY 子句进行结果排序。换言之, ROLLUP和 ORDER BY 是互相排斥的
           2、LIMIT 用在 ROLLUP 后面

4、用 BIT GROUP FUNCTIONS 做统计

使用 GROUP BY 语句和 BIT_AND、BIT_OR 函数完成统计工作。

5、数据库名、表名大小写问题

在大多数 UNIX 环境中,由于操作系统对大小写的敏感性导致了数据库名和表名对大小写敏感性,而在 Windows 中由于操作系统本身对大小写不敏感,因此在 Windows 下 MySQL 数据库名和表名对大小写也不敏感。列、索引、存储子程序和触发器名在任何平台上对大小写不敏感。默认情况下,表别名在UNIX 中对大小写敏感,但在 Windows 或 Mac OS X 中对大小写不敏感。

在 MySQL 中如何在硬盘上保存、使用表名和数据库名由 lower_case_tables_name 系统变量决定,可以在启动 mysqld 时设置这个系统变量。

常用 SQL 技巧和常见问题

注意:

1、在 UNIX 中将 lower_case_tables_name 设置为 1 并且重启 mysqld 之前,必须先将旧的数据库名和表名转换为小写。
2、尽管在某些平台中数据库名和表名对大小写不敏感,但是最好养成在同一查询中使用相同的大小写来引用给定的数据库名或表名的习惯。

6、使用外键需要注意的问题

在 MySQL 中,InnoDB 存储引擎支持对外部关键字约束条件的检查。而对于其他类型存储引擎的表,当使用 REFERENCES tbl_name(col_name)子句定义列时可以使用外部关键字,但是该子句没有实际的效果,只作为备忘录或注释来提醒用户目前正定义的列指向另一个表中的一个列。

总结

 应用正则表达式可使用户能在一段很大的字符串中找到符合自己规则的一些语句,这个功能在进行匹配查找的时候非常有用。
 RAND()函数与 ORDER BY 字句的配合使用能够实现随机抽取样本的功能,这个技巧在进行数据统计的时候很方便。
 GROUP BY 的 WITH ROLLUP 字句能够实现类似于 OLAP 的查询。
 BIT 函数与 GROUP BY 子句的联合使用在某些应用场合可以大大降低存储量,提高统计查询效率。
 MySQL 数据库名和表名的大小写与操作系统对大小写的敏感性关系密切,因此需要格外引起用户的注意。
 MySQL 的外键功能仅对 InnoDB 存储引擎的表有作用,其他类型存储引擎的表虽可以建立外键,但并不能起到外键的作用。