外观
MySQL特有函数
MySQL特有函数
last_insert_id() 获取最后一次插入数据的id
select last_insert_id() from dump;
获取最后一次插入数据时的id(批量插入后为第一条的记录)
例:
select last_insert_id();
+------------------+
| last_insert_id() |
+------------------+
| 0 |
+------------------+
1 row in set (0.00 sec)
日期时间函数
获取日期
date(now())
curdate()
current_date()
获取时间
current_time()
time(now())
mysql> select now(),date(now()),curdate(),
current_date(),time(now()),current_time();
+---------------------+-------------+------------+----------------+-------------+----------------+
| now() | date(now()) | curdate() | current_date() | time(now()) | current_time() |
+---------------------+-------------+------------+----------------+-------------+----------------+
| 2021-08-17 21:09:12 | 2021-08-17 | 2021-08-17 | 2021-08-17 | 21:09:12 | 21:09:12 |
+---------------------+-------------+------------+----------------+-------------+----------------+
1 row in set (0.00 sec)
日期增加函数
date_sub(日期时间,interval,数值,类型)
例:date_sub(now(),interval 24 hour)表示当前日期时间的24小时前
mysql> select now(),date_sub(now(),interval 24 hour);
+---------------------+----------------------------------+
| now() | date_sub(now(),interval 24 hour) |
+---------------------+----------------------------------+
| 2021-08-17 21:10:40 | 2021-08-16 21:10:40 |
+---------------------+----------------------------------+
1 row in set (0.00 sec)
日期格式化
date_format(日期,'日期格式') 输出日期为指定格式
例:
mysql> select date_format(now(),'%Y-%m-%d');
+-------------------------------+
| date_format(now(),'%Y-%m-%d') |
+-------------------------------+
| 2021-08-17 |
+-------------------------------+
1 row in set (0.00 sec)
计算天数
to_days(日期) 计算日期与公元元年之间的天数
例:
mysql> select to_days(now());
+----------------+
| to_days(now()) |
+----------------+
| 738384 |
+----------------+
1 row in set (0.00 sec)
dayofyear(日期) 计算日期年份的1月1日到日期之间的天数
例:
mysql> select dayofyear(now());
+------------------+
| dayofyear(now()) |
+------------------+
| 229 |
+------------------+
1 row in set (0.00 sec)
取日期指定结果
year(日期) 取年份
quarter(日期) 取季度
month(日期) 取月份
week() 取日期在当前年份的第几周
dayofweek() 取日期在本周的第几天(以周日为0开始)
day() 取日期的日
hour() 取时间的小时
minute() 取时间的分钟
second() 取时间的秒数
例:
mysql> select year(now()) 年份,quarter(now()) 季度,month(now()) 月份,day(now()) 日,
-> week(now()) 周次,dayofweek(now()) 星期,hour(now()) 小时,minute(now()) 分钟,second(now()) 秒;
+------+------+------+------+------+------+------+------+------+
| 年份 | 季度 | 月份 | 日 | 周次 | 星期 | 小时 | 分钟 | 秒 |
+------+------+------+------+------+------+------+------+------+
| 2021 | 3 | 8 | 17 | 33 | 3 | 22 | 8 | 31 |
+------+------+------+------+------+------+------+------+------+
1 row in set (0.00 sec)
多重查询
子查询:存在于另外一个SQL语句中被小括号包着的,用作主查询的查询条件
主查询:相对于子查询来说的,在外面直接执行的查询语句
单行多列子查询
成对比较,例:
SELECT id,first_name,manager_id,dept_id,title
FROM s_emp
WHERE (dept_id,title,manager_id)=(
SELECT dept_id,title,manager_id FROM s_emp
WHERE lower(first_name)='ben'
);
主查询条件有几列,子查询结果就有几列,并一一对应
多行子查询(多行单列)
主查询条件在子查询结果集合中
例:
SELECT * FROM emp
WHERE job NOT IN(
SELECT job FROM emp
WHERE deptno=20
);
关联子查询(相关子查询)
子查询中使用了外部查询中的表或列,则这个子查询与外部查询是相关的
例:
SELECT * FROM emp e
WHERE EXISTS ( SELECT * FROM emp p WHERE lower(p.ename) = 'smith' AND p.deptno = e.deptno );
在子查询中用到了主查询的表
MySQL连接时设置字符集
mysql -u用户名 -p --defaule-charset=utf8mb4 #不认识
mysql -u用户名 -p --defaule-charscter-set=utf8mb4
设置连接时字符集为utf8mb64,临时设置