四个取整,各取各的
ROUND 四舍五入,TRUNCATE 直接砍掉。
重 点
TRUNCATE(3.19,1) 是 3.1,ROUND(3.19,1) 是 3.2,一个砍一个进。
想一想
算钱的时候该用哪一个?
ROUND 四舍五入,TRUNCATE 直接砍掉。
TRUNCATE(3.19,1) 是 3.1,ROUND(3.19,1) 是 3.2,一个砍一个进。
算钱的时候该用哪一个?
LENGTH 数字节,CHAR_LENGTH 数字符,中文差三倍。
一个汉字在 utf8mb4 里占三个字节,LENGTH('数据库') 是 9 不是 3。
第 4 章讲字符集时埋的那个坑,到这里才有函数把它数出来。
要限制姓名不超过十个字,该用哪一个函数?
格式符那一串记住 %Y %m %d 就够用了。
1 月 31 日加一个月是 2 月 28 日,MySQL 自己会往回缩到当月最后一天。
第 14 章说日期要用 DATE 不要用字符串,这一批函数就是那样做的回报。
把 tcdate 改成 VARCHAR,这些函数还能用吗?
MD5 是单向的,只能对着比,还原不回来。
MD5 出来永远是 32 位,第 14 章那个 char(32) 的密码列就是给它留的。
存摘要不存明文,库被拖走了口令也不会直接泄露,这是最起码的做法。
两个人的口令一样,库里存的摘要一样吗?
课件出的题,一句 GROUP BY 就够。
题目说的是「已选课同学」,所以只有七行,s6 一门没选就不在里面。
COUNT(列名) 不数 NULL,COUNT(*) 数,最后一句把这个差别摆出来了。
平均分那一列为什么带六位小数?
IF、IFNULL、CAST 三个,不用写存储过程也能拐弯。
IF() 是函数,写在一行里。IF…THEN 是语句,只能写在过程体里。两回事。
| 写法 | 用在哪 |
|---|---|
| IF(a,b,c) | 任何 SQL 里 |
| IF..THEN | 过程体里 |
最后一句要是成绩为空,判定列会是什么?
把这一节学的东西凑到一句里去。
第二句里没选课的同学平均分是 0 不是 NULL,因为外面套了 IFNULL。
把 IFNULL 去掉再跑一遍,就知道这一层包装挡掉了什么。
ORDER BY 后面能直接写中文别名吗?