MySQL 自己带的一大堆现成工具
数学、字符串、日期、系统、聚合、加密、其他。

数学、字符串、日期、系统、聚合、加密、其他。

ROUND 四舍五入,TRUNCATE 直接砍掉。

| 函数 | 3.19 变成 |
|---|---|
| ROUND(x,1) | 3.2 |
| TRUNCATE(x,1) | 3.1 |
| CEILING(x) | 4 |
| FLOOR(x) | 3 |
算钱的时候用哪一个要想清楚,差一分钱账就对不上。
银行算利息该用 ROUND 还是 TRUNCATE?
数长度那两个不一样,中文差三倍。

LENGTH 数的是字节,CHAR_LENGTH 数的是字符。一个汉字三个字节。
第 4 章讲字符集时埋的那个坑,到这里才有函数把它数出来。
限制姓名不超过十个字,该用哪一个?
存的时候用 DATE,这一批函数才用得上。

1 月 31 日加一个月是 2 月 28 日,MySQL 自己会缩到当月最后一天。
第 14 章说日期不要用字符串存,这一批函数就是那样做的回报。
记住四个常用的,剩下的用时再查。

版本、当前库、当前用户、连接号。

出问题时先敲这几条,很多时候答案就是「连错库了」。
这几个函数不带参数,括号也不能省。

USER() 是你连进来时报的名字,CURRENT_USER() 是服务器实际认下的账号。
第 8 章讲过这两个不一定一样,匿名账号那一节就是拿它俩看出来的。
什么情况下这两个会不一样?
这一节多了标准差和方差两个。

COUNT(列名) 不数 NULL,COUNT(*) 数。这一条第 6 章讲过,还是常错。
| 写法 | 空值算吗 |
|---|---|
| COUNT(*) | 算 |
| COUNT(score) | 不算 |
一句 GROUP BY 就做完了。

题目说的是「已选课同学」,所以只有七行,一门没选的那位不在里面。
平均分带六位小数,是因为 score 是 DECIMAL(5,2),AVG 会往后加四位。
要把没选课的也列出来,该怎么改?
所以密码列存的是摘要,不是明文。

MD5 出来永远 32 位,第 14 章那个 char(32) 的密码列就是给它留的。
登录时把用户输入的口令再算一次 MD5,跟库里那一串对着比就行。
两个人口令一样,库里存的摘要一样吗?
在一句 SQL 里就能拐弯,不用写存储过程。

| 写法 | 用在哪 |
|---|---|
| IF(a,b,c) | 任何 SQL 里 |
| IF…THEN | 过程体里 |
IFNULL(x,0) 把空值换成零,报表里最常用的一个函数。
LENGTH 数字节。utf8mb4 里一个汉字占三个字节,三个字就是 9。数字数用 CHAR_LENGTH。