Mysql学习笔记八,Mysql优化篇,常用sql技巧和常见问题

来源:互联网 发布:微信红包牛牛源码v8 编辑:程序博客网 时间:2024/06/05 21:00
  • 正则表达式 REGEXP
          
^
字符串开始处进行匹配
$
字符串末尾处进行匹配
.
匹配任意单一字符,包括换行符
[...]
匹配出括号内的任意字符
[^...]
匹配不出括号内的任意字符
......
......
  
 使用正则表达式 : 
select 'abcdefg' regexp '^a'; --从字符串开始进行匹配,匹配a。成功就返回1。
select 'exf' regexp '[abe]'; --字符串匹配abe中任意一个字符。 成功就返回1。
正则表达式可以使我们SQL写法更加简单易读。

  • 用rand()提取随机行。
select * from t1 order by rand(); --随机获取表t1的数据
select * from t1 order by rand() limit 2; --从表t1中随机获取2行

  • group by 的with rollup子句做统计。
详见mysql开发篇相关笔记, with rollup是用于针对每个分组进行统计
注意: 1 rollup与order by 互斥。
           2 limit用在rollup后

  • bit group functions做统计。
使用bit_and、bit_or和group by完成统计工作。 设计一个数值字段, 该字段不同位表示不同的意思, 用group by+bit_and/bit_or可以用来统计分组后统计信息, 如字段设计为客户每次购物购买的商品(第一位:牛奶,第二位:面包,第三位:土豆 等等) 。 通过bit_and+group by可以得到客户每次购物都会购买的商品。 通过bit_or+group by可以得到客户购买过什么商品。

  • 数据库表名、表名大小写问题。
windows 、mac os x对大小写不敏感, unix对大小写敏感
select * from t1 a where A.a >102; --unix中报错, windows、mac os x可以执行。
mysql如何在硬盘中保存、使用表名和数据库名由lower_case_tables_name这个系统变量来决定。

0
使用 CREATE TABLE 或 CREATE DATABASE 语句指定的大写和小写在硬盘上保存表名和数据库名。名 称对大小写敏感。在 UNIX 系统中的默认设置就是这个值
1
表名在硬盘上以小写保存,名称对大小写敏感。MySQL 将所有表名转换为小写以便存储和查找。 该值为 Windows 和 Mac OS X 系统中的默认值
2
表名和数据库名在硬盘上使用 CREATE TABLE 或 CREATE DATABASE 语句指定的大小写进行保存,但 MySQL 将它们转换为小写以便查找。此值只在对大小写不敏感的文件系统上适用

  • 使用外键的注意问题
innodb 存储引擎支持对外部关键字的约束条件检查。 其他的引擎,可以指定外键,但没有效果,只用于备忘录或注释的作用。

0 0