1、细节锦集
- 模糊查询写法:
xx like '%##%'
或xx like concat('%', '##', '%')
;
2、通用函数
参考笔记二,P12.5。
2.1 字符处理函数
length()
获取字节数,char_length()
获取字符数;strcmp(a, b)
用于比较a、b的大小。若 a 大于、等于或小于 b 时,返回1/0/-1
;
2.2 非空判断函数
isnull(a)
:若 a 为 null,返回1
,否则返回0
;ifnull(a, b)
:若 a 为 null,返回 b,否则返回 a;nullif()、case...when...then
:同 Oracle 中同名函数;coalesce(a, b, ...)
:返回第一个非 null 的值;if(a, b, c)
:若 a 为 true,返回 b,否则返回 c;
3、关于字段
3.1 使用细节
- 尽量设置为
not null
,因为查询时不必考虑null
对查询的影响; - 存储如 国家、省份、性别 这类数据的字段,可以使用外键,但多连接会导致性能降低、以及工作量的增加,这是没必要的。由于此类字段已固定数据,则数据类型可以选
enum
,且可以用一些标识表示数据,如:0=男,1=女
、CN-中国,UK-英国
。
mysql会将enum
视为“数值” \color{green}{“数值”}“数值”处理,故效率远高于字符类型。但要注意 \color{red}{注意}注意:若此字段可能用于连接 \color{purple}{连接}连接、筛选 \color{blue}{筛选}筛选,就要考虑有没有必要使用enum
,因为enum
属字符 \color{red}{字符}字符类型,查询时要加上''
(单引号)、以及进行一些字符处理(额外工作量),如:性别,使用int
优于enum
。
3.2 字符匹配
1、若字段类型为 数值 类型,可匹配字符。
示例:
1、select * from xx where id = 10; √ 2、select * from xx where id = '10'; √
2、若字段类型为 字符 类型,不可匹配数字。
示例:
1、select * from xx where no = '1001'; √ 2、select * from xx where no = 1001; ×
4、关于字符排序
参考笔记二,P12.6、P17.7。
排序在查询中时常需要的,普遍情况下(数据类型是数值)使用order by
即可解决。若数据类型为字符,排序操作如下:
- 方法一:
order by 字段 + 0
:会将数据进行数值转换后再进行比较,转换时以非数字结束,如:'58a13', + 0 → 58
、'ab' + 0 → 0
; - 方法二:
order by cast(a, b) / order by convert(a, b)
:都用于将字段值转换为另一类型再进行比较。其中,a 是字段,b 为转换类型。b 的取值:(1)unsigned
:无符号数字,不能表示小数;(2)signed
:有符号数字,可以表示小数。
留言: \color{red}{留言:}留言:当然,这两种方法都不可能完全实现字符类型字段的排序,需要根据具体数据判断(本来这种需求就很不合理。。。)。不过,这两种字符处理是有效的。
最后
如果大家想要了解一些MySQL知识点,可查阅博文《MySQL知识点锦集》。
本文持续更新中。。。