函数
字符串函数
函数 | 功能 |
---|---|
CONCAT(S1,S2,S3,…,Sn) | 字符串拼接,按顺序拼接在一起 |
LOWER(str) | 转小写 |
UPPER(str) | 转大写 |
LPAD(str,n,pad) | 用pad来对str的左边进行填充,使之长度达到n |
RPAD(str,n,pad) | 用pad来对str的右边进行填充,使之长度达到n |
TRIM(str) | 太熟悉了,去掉首尾空格 |
SUBSTRING(str,start,len) | 从start处开始截取,一共截取长度为n的子串 |
数值函数
函数 | 功能 |
---|---|
CEIL(x) | 向上取整 |
FLOOR(x) | 向下取整 |
MOD(x,y) | 返回x/y的模(余数) |
RAND() | 0~1随机数 |
ROUND(x,y) | 对x四舍五入保留y位 |
日期函数
函数 | 功能 |
---|---|
CURDATE() | 返回当前日期 |
CURTIME() | 返回当前时间 |
NOW() | 返回当前日期和时间 |
YEAR(date) | 获取指定date的年份 |
MONTH(date) | 获取balabala的月份 |
DAY(date) | balabala的天 |
DATE_ADD(date,INTERVAL exper type) | date加上一段时间间隔后的时间 |
DATEDIFF(date1,date2) | 返回时间间隔 |
DATE_ADD函数用法
栗子:从当前时间往后推70天
DATE_ADD(NOW(),INTERVAL 70 DAY)
DATEDIFF函数用法
栗子:求2024-7-12-2025-7-12间隔天数
DATEDIFF('2025-07-12','2024-07-12') # 默认使用前者减去后者
流程函数
函数 | 功能 |
---|---|
IF(value,t,f) | 如果value为true,返回t,否则返回f |
IFNULL(value1,value2) | 如果value1不为空就返回value1,否则返回value2 |
CASE WHEN [val1] THEN [res1] … ELSE [default] END | 如果val1为true就返回res1,如果val2为true就返回res2,…否则返回default |
CASE [expr] WHEN [val1] THEN [res1] … ELSE [default] END | 如果expr等于val1就返回res1,如果expr等于val2就返回res2,…否则返回default |
查询
自连接查询
假设有一个表如下
id | name | age | manager_id(领导的id) |
---|---|---|---|
1 | AAA | 18 | |
2 | BBB | 19 | 1 |
3 | CCC | 20 | 1 |
4 | DDD | 21 | 2 |
5 | EEE | 22 | 2 |
6 | FFF | 23 | 3 |
7 | GGG | 24 | 3 |
栗子:查询员工及其领导的名字
使用自连接,先对emp表给两个别名分别为a,b,a相当于员工表,b相当于领导表
SELECT a.name,b.name from emp a,emp b WHERE a.manager_id=b.id;
联合查询union
# union all 不会排除重复数据
SELECT * from table1
union all
SELECT * from table2;
# union 会排除重复数据
SELECT * from table1
union
SELECT * from table2;
事务
简单操作
开启事务
START TRANSACTION
提交事务/回滚事务
COMMIT / ROLLBACK
事务的四大特性
ACID
- 原子性
- 一致性
- 隔离性
- 持久性
并发事务问题
问题 | 描述 |
---|---|
脏读 | 一个事务读取到另一个事务还没提交的数据 |
不可重复读 | 一个事务先后读到同一记录,但两次读取的不同(两次读取之间数据被其他事务修改提交了) |
幻读 | 一个事务按条件查询数据时,没有对应的数据行,但是插入数据时,又发现这行数据已经存在,好像出现了“幻影” |
事务隔离级别
隔离级别与问题的关系(脉涩口)
√
表示会出现(无法解决的问题),x
表示可以解决的问题
查看隔离级别
SELECT @@TRANSACTION_ISOLATION
设置隔离级别
SET [SESSION|GLOBAL] TRANSACTION ISOLATION LEVEL {READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ | SERIALIZABLE}
-- 设置[仅当前会话|全局] 隔离级别[读未提交|读已提交|可重复度|串行化]