1、汉字排序
默认编码是utf8mb4,所以其实数据库存储的并不是汉字文本。按照内部的存储方式
|
|
2、explain
explain 用于查看sql执行的执行的情况
|
|
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | extra |
|---|---|---|---|---|---|---|---|---|---|
| SELECT 查询的标识符 | SELECT 查询的类型. | 查询的是哪个表 | 此次查询中可能选用的索引 | 此次查询中确切使用到的索引. | 哪个字段或常数与 key 一起被使用 | 显示此查询一共扫描了多少行. 这个是一个估计值. | 额外的信息 |
select_type
- SIMPLE 表示此查询不包含 UNION 查询或子查询
- PRIMARY, 表示此查询是最外层的查询
- UNION, 表示此查询是 UNION 的第二或随后的查询
- UNION RESULT, UNION 的结果
- SUBQUERY, 子查询中的第一个 SELECT
type
可以根据type 来确定如何查询
-
system:表中只有一条数据.
-
const: 针对主键或唯一索引的等值查询扫描, 最多只返回一行数据
-
eq_ref: 唯一性索引扫描,对于每个索引键,表中只有一条记录与之匹配
1EXPLAIN SELECT * FROM user_info, order_info WHERE user_info.id = order_info.user_id -
ref: 针对于非唯一或非主键索引等值查询, 或者是使用了
最左前缀规则索引的查询.1 2EXPLAIN SELECT * FROM user_info, order_info WHERE user_info.id = order_info.user_id AND order_info.user_id = 5 # user_id 是联合索引的第一个索引 -
range: 使用索引范围查询, 通过索引字段范围获取表中部分数据记录. 这个类型通常出现在 =, <>, >, >=, <, <=, IS NULL, <=>, BETWEEN, IN() 操作中.
-
index: 表示全索引扫描(full index scan), index 类型则仅仅扫描所有的索引, 而不扫描数据.
1 2EXPLAIN SELECT name FROM user_info; # name 是索引 -
ALL: 表示全表扫描
性能:
ALL < index < range < ref < eq_ref < const < system
extra
- Using filesort: MySQL 需额外的排序操作,查询 CPœU 资源消耗大.
- Using index: 覆盖索引扫描", 表示查询在索引树中就可查找所需数据
- Using temporary: 查询有使用临时表, 一般出现于排序
count
在统计数量的时候,也进行排序。
查看表锁使用情况
|
|
查询sql 操作
|
|
函数
ASCII(s)
返回字符串中第一个字符的ACSII码
|
|
CHAR_LENGTH(s)
返回字符串的长度
|
|
CONCAT(s1,s2,…,sn)
将多个字符串合并
|
|
CONCAT_WS(x,s1,s2,…,sn)
通过字符X 将多个字符串合并
|
|
[sql函数] https://www.runoob.com/mysql/mysql-functions.html Command + click 跳转
group by
|
|
mysql操作查询结果case when then else end
–简单Case函数
CASE column
WHEN
例: CASE sex WHEN ‘1’ THEN ‘男’ WHEN ‘2’ THEN ‘女’ ELSE ‘其他’ END
–Case搜索函数
CASE
WHEN
例: CASE WHEN sex = ‘1’ THEN ‘男’ WHEN sex = ‘2’ THEN ‘女’ ELSE ‘其他’ END
(1)已知数据按照另外一种方式进行分组,分析。
SELECT SUM(population) ,
CASE country
WHEN ‘中国’ THEN ‘亚洲’
WHEN ‘印度’ THEN ‘亚洲’
WHEN ‘日本’ THEN ‘亚洲’
WHEN ‘美国’ THEN ‘北美洲’
WHEN ‘加拿大’ THEN ‘北美洲’
WHEN ‘墨西哥’ THEN ‘北美洲’
ELSE ‘其他’ END
FROM country
GROUP BY CASE country
WHEN ‘中国’ THEN ‘亚洲’
WHEN ‘印度’ THEN ‘亚洲’
WHEN ‘日本’ THEN ‘亚洲’
WHEN ‘美国’ THEN ‘北美洲’
WHEN ‘加拿大’ THEN ‘北美洲’
WHEN ‘墨西哥’ THEN ‘北美洲’
ELSE ‘其他’ END;
(2) 更新 UPDATE country set population= CASE WHEN population > 600 THEN population-200 WHEN population<500 THEN population+300 else population END;
建议加上 else ,否则如果条件都不满足的时候,属性会置为null