Skip to content

MySQL学习笔记

函数

字符串函数

函数 功能
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表示可以解决的问题

image-20240714162158263

查看隔离级别

SELECT @@TRANSACTION_ISOLATION

设置隔离级别

SET [SESSION|GLOBAL] TRANSACTION ISOLATION LEVEL {READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ | SERIALIZABLE}
-- 设置[仅当前会话|全局] 隔离级别[读未提交|读已提交|可重复度|串行化]