mysql 命令行记录
1. 查看`show`命令的帮助。 ```MySQL ? show ``` 2. 查看有哪些帮助内容。 ```MySQL ? contents ``` 3. 获取函数的帮助。 ```MySQL ? functions ``` 4. 获取数据类型的帮助。 ```MySQL ? data types
下面的表格对MySQL几种常用的数据引擎进行了简单的对比。
| 特性 | InnoDB | MRG_MYISAM | MEMORY | MyISAM |
| ------------ | ------------ | ---------- | ------ | ------ |
| 存储限制 | 有 | 没有 | 有 | 有 |
| 事务 | 支持 | | | |
| 锁机制 | 行锁 | 表锁 | 表锁 | 表锁 |
| B树索引 | 支持 | 支持 | 支持 | 支持 |
| 哈希索引 | | | 支持 | |
| 全文检索 | 支持(5.6+) | | | 支持 |
| 集群索引 | 支持 | | | |
| 数据缓存 | 支持 | | 支持 | |
| 索引缓存 | 支持 | 支持 | 支持 | 支持 |
| 数据可压缩 | | | | 支持 |
| 内存使用 | 高 | 低 | 中 | 低 |
| 存储空间使用 | 高 | 低 | | 低 |
| 批量插入性能 | 低 | 高 | 高 | 高 |
| 是否支持外键 | 支持 | | | |
-- 补充:将表示性别的 1 和 0 处理成 “男” 和 “女” select `stu_name` as 姓名, if(`stu_sex`, '男', '女') as 性别, `stu_birth` as 出生日期 from `tb_student` where `stu_birth` between '1980-1-1' and '1989-12-31'; select `stu_name` as 姓名, case `stu_sex` when 1 then '男' else '女' end as 性别, `stu_birth` as 出生日期 from `tb_student` where `stu_birth` between '1980-1-1' and '1989-12-31'; -- 查询学分大于2的课程的名称和学分(筛选) select `cou_name`, `cou_credit` from `tb_course` where `cou_credit`>2;
mysql模糊查询
-- 查询姓“杨”的学生姓名和性别(模糊) -- % - 通配符(wildcard),它可以匹配0个或任意多个字符 select `stu_name`, `stu_sex` from `tb_student` where `stu_name` like '杨%'; -- 查询姓“杨”名字两个字的学生姓名和性别(模糊) -- _ - 通配符(wildcard),它可以精确匹配一个字符 select `stu_name`, `stu_sex` from `tb_student` where `stu_name` like '杨_'; -- 查询姓“杨”名字三个字的学生姓名和性别(模糊) select `stu_name`, `stu_sex` from `tb_student` where `stu_name` like '杨__'; -- 查询名字中有“不”字或“嫣”字的学生的姓名(模糊) select `stu_name` from `tb_student` where `stu_name` like '%不%' or `stu_name` like '%嫣%';
-- 查询姓“杨”或姓“林”名字三个字的学生的姓名(正则表达式模糊查询) select `stu_name` from `tb_student` where `stu_name` regexp '[杨林].{2}'; -- 查询没有录入籍贯的学生姓名(空值处理) select `stu_name` from `tb_student` where `stu_addr` is null; select `stu_name` from `tb_student` where `stu_addr` <=> null; -- 查询录入了籍贯的学生姓名(空值处理) select `stu_name` from `tb_student` where `stu_addr` is not null;
常用字符串函数。 | 函数 | 功能 | | --------------------------- | ----------------------------------------------------- | | `CONCAT` | 将多个字符串连接成一个字符串 | | `FORMAT` | 将数值格式化成字符串并指定保留几位小数 | | `FROM_BASE64` / `TO_BASE64` | BASE64解码/编码 | | `BIN` / `OCT` / `HEX` | 将数值转换成二进制/八进制/十六进制字符串 | | `LOCATE` | 在字符串中查找一个子串的位置 | | `LEFT` / `RIGHT` | 返回一个字符串左边/右边指定长度的字符 | | `LENGTH` / `CHAR_LENGTH` | 返回字符串的长度以字节/字符为单位 | | `LOWER` / `UPPER` | 返回字符串的小写/大写形式 | | `LPAD` / `RPAD` | 如果字符串的长度不足,在字符串左边/右边填充指定的字符 | | `LTRIM` / `RTRIM` | 去掉字符串前面/后面的空格 | | `ORD` / `CHAR` | 返回字符对应的编码/返回编码对应的字符 | | `STRCMP` | 比较字符串,返回-1、0、1分别表示小于、等于、大于 | | `SUBSTRING` | 返回字符串指定范围的子串 | 常用数值函数。 | 函数 | 功能 | | -------------------------------------------------------- | ---------------------------------- | | `ABS` | 返回一个数的绝度值 | | `CEILING` / `FLOOR` | 返回一个数上取整/下取整的结果 | | `CONV` | 将一个数从一种进制转换成另一种进制 | | `CRC32` | 计算循环冗余校验码 | | `EXP` / `LOG` / `LOG2` / `LOG10` | 计算指数/对数 | | `POW` | 求幂 | | `RAND` | 返回[0,1)范围的随机数 | | `ROUND` | 返回一个数四舍五入后的结果 | | `SQRT` | 返回一个数的平方根 | | `TRUNCATE` | 截断一个数到指定的精度 | | `SIN` / `COS` / `TAN` / `COT` / `ASIN` / `ACOS` / `ATAN` | 三角函数 | 常用时间日期函数。 | 函数 | 功能 | | ----------------------------- | ------------------------------------- | | `CURDATE` / `CURTIME` / `NOW` | 获取当前日期/时间/日期和时间 | | `ADDDATE` / `SUBDATE` | 将两个日期表达式相加/相减并返回结果 | | `DATE` / `TIME` | 从字符串中获取日期/时间 | | `YEAR` / `MONTH` / `DAY` | 从日期中获取年/月/日 | | `HOUR` / `MINUTE` / `SECOND` | 从时间中获取时/分/秒 | | `DATEDIFF` / `TIMEDIFF` | 返回两个时间日期表达式相差多少天/小时 | | `MAKEDATE` / `MAKETIME` | 制造一个日期/时间 | 常用流程函数。 | 函数 | 功能 | | -------- | ------------------------------------------------ | | `IF` | 根据条件是否成立返回不同的值 | | `IFNULL` | 如果为NULL则返回指定的值否则就返回本身 | | `NULLIF` | 两个表达式相等就返回NULL否则返回第一个表达式的值 | 其他常用函数。 | 函数 | 功能 | | -------------------------- | ----------------------------- | | `MD5` / `SHA1` / `SHA2` | 返回字符串对应的哈希摘要 | | `CHARSET` / `COLLATION` | 返回字符集/校对规则 | | `USER` / `CURRENT_USER` | 返回当前用户 | | `DATABASE` | 返回当前数据库名 | | `VERSION` | 返回当前数据库版本 | | `FOUND_ROWS` / `ROW_COUNT` | 返回查询到的行数/受影响的行数 | | `LAST_INSERT_ID` | 返回最后一个自增主键的值 | | `UUID` / `UUID_SHORT` | 返回全局唯一标识符
例子1:查询按月薪从高到低排在第4到第6名的员工的姓名和月薪。 ```SQL select * from ( select `ename`, `sal`, row_number() over (order by `sal` desc) as `rank` from `tb_emp` ) `temp` where `rank` between 4 and 6;