MySQL事务,函数
事务
执行事务:相当于一个业务操作
例如:转账操作,一个用户转出资金,另外一个用户收到增加自己的资金,这两个步骤都需要成功执行才行)
# MySQL数据库中默认:一行SQL语句会自动提交(表中持久更新)# 事务:一组逻辑操作单元。可以在事务中书写多行SQL语句,要么全部执行成功,要么全部执行失败。
两种事务的操作方式:
手动提交:先开启,再提交
自动提交:每执行完一条一条SQL语句就会自动开启提交一次事务
TODO:事务原理
1、(客户端会连接MySQL服务,服务端对于这个用户进行安全校验,通过之后会创建一个临时的日志文件)
2、如果是自动提交的事务,则直接将SQL语句结果直接同步到数据表中去
3、如果是手动提交的事务,则将SQL语句的结果先写入临时日志文件中去
3.1、最后commit,则将SQL语句结果同步到数据库中
3.2、rollback,则直接将临时的日志文清除
手动提交事务SQL语句
开启事务:start transaction;
提交事务:commit;
回滚事务:rollback;
事务的四大特征:
# 事务的四大特征(ACID):
-- 原子性A:事务中SQL语句的操作不可以再分为一个最小的单元,要么都成功,要么都失败。
-- 一致性C:事务开始前和事务结束后,数据库的完整性没有被破坏。相当于两个人转账的过程,可能每个人的账户余额有所变化,但是两人的总的金额是没有变化的
-- 隔离性I:多个事务开启的时候,每一个事务的执行不能被其他事务干扰,多个事务之间不能互相干扰。
-- 持久性D:事务结束,对数据库的更改就是持久的,即对数据库的更改可以 survive重启。
数据库函数的引用
1、日期函数:
-- 日期函数:now()用于返回当前的系统时间
select now();
select sysdate();
-- 获取当前的日期
select curdate();
-- 获取当前的时间
select curtime();-- 获取年月日
select year(now());
select month(now());
select day(now());-- 获取一年中的第几周
select weekofyear(now());# 获取几月几日---》通过concat函数进行拼接
select concat(month(now()),'月',day(now()),'日') as '当前日期';
2、判断函数(常用):
case when 条件 then 结果 else 结果 end
#Case when:(一定要用别名代替结果)
#语法1:
case 列名
when 条件1 then 结果1
when 条件2 then 结果2
when 条件3 then 结果3
else 结果n
end as '别名'
#语法2:
case
when 条件1 then 结果1
when 条件2 then 结果2
when 条件3 then 结果3
else 结果n
end as '别名'#实例:(sex为Int类型)
select name,
case sexwhen 1 then '男'when 2 then '女'
else '未知'
end as '性别',
age from stu;#第二种写法:
select name,
case
when sex = 1 then '男'
when sex = 2 then '女'
else '未知'
end as '性别',
age from stu;
3、字符串函数
# 字符串函数(针对与varchar类型的数据进行操作)
# 获取字符串的长度:length(列名)
select length('abc');select length(name) from user;# 拼接字符串:concat(列名1,列名2)
select concat(name,'-',age) from user;
select concat(month(curdate()),' ',day(curdate()));# 获取当前日期# 转换大小写
select lower('I lovE');
select upper('I lovE');# 截取字符串:substring(字符串,起始位置,截取长度)
select substring('hello world',1,3);# 去除字符串前后的空格:trim(列名)
select trim(' hello ');
# 由于存储字符串类型的数据的时候不够长度会默认补充空格,所以去除字符串前后的空格可以用到这个函数
4、数学函数
# 数学函数(针对数字类型的数据提供功能)
# 获取随机数(0,1)之间
select rand();# 四舍五入(用法:round(数值,保留小数点后几位))
select round(12.3456,2);
select round('12.3456',3);# 去除小数的尾数
select truncate('3.1415926',2);