MySQL学习三、MySQL函数与事务

五、MySQL函数

5.1 常用函数

-- ==================== 常用函数 ========================

-- 数学运算
select abs(-8);             -- 绝对值
select ceiling(9.4);        -- 向上取整
select floor(9.4);          -- 向下取整
select rand();              -- 返回0-1随机数
select sign(-10);           -- 判断符号 (0 - 0    -   -1    +  1)

-- 字符串函数
select char_length('你猜我有几位');
select concat('我','爱','你们');        -- 拼接字符串
select insert('我爱MySQL',2,2,'你好');  -- 替换
select lower('ABCdef');                -- 小写字母
select upper('ABCdef');                -- 大写字母
select instr('abcdefg','a');           -- 返回索引(第一次出现)
select replace('你好啊,你好','你好','Hello');       -- 替换指定字符串
select substr('abcdefg',4,2);                     -- (字符串,截取的位置,截取的长度)
select reverse('abc');                            -- 反转字符串

-- 时间和日期函数
select current_date();                 -- 获取当前日期
select curdate();                      -- 获取当前日期
select now();                          -- 获取当前的时间
select localtime();                    -- 本地时间
select sysdate();                      -- 系统时间

select year(now());
select month(now());
select day(now());
select hour(now());
select minute(now());
select second(now());

-- 系统
select system_user();

5.2 聚合函数

函数名称 描述
COUNT() 计数
SUM() 求和
AVG() 平均值
MAX() 最大值
MIN() 最小值
.... ....
-- ============================== 聚合函数 ================================
-- 都能够统计 表中的数据
select count(name) from student;        -- count(字段),会忽略所有的null值
select COUNT(1) from student;           -- 不会忽略null值
select COUNT(*) from student;

select sum(id) as 总和 from student;
select avg(id) as 平均 from student;
select max(id) as 最大 from student;
select min(id) as 最小 from student;

5.3 数据库级别的MD5加密(拓展)

MD5:

增强算法复杂度和不可逆性

MD5 不可逆,具体的值的md5 是一样的

MD5破解网站的原理:背后有一个字典,MD5加密后的值 加密前的值

-- ============================= 测试MD5 加密 ==================================
create table `TestMD5` (
    `id` int(4) not null,
    `name` varchar(20) not null,
    `pwd` varchar(50) not null,
    primary key (`id`)
)engine = InnoDB default charset = utf8;

-- 明文密码
insert into TestMD5 values
                           (1,'张三','123456'),
                           (2,'李四','123456'),
                           (3,'王五','123456'),
                           (4,'刘大','123456');

-- 加密
update testmd5 set pwd=md5(pwd) where id = 1;
-- 全部加密
update testmd5 set pwd=md5(pwd);

-- 插入的时候加密
insert into testmd5 (id, name, pwd)
values (5,'匿名','123456');

insert into testmd5 (id, name, pwd)
values (6,'匿名2',md5('123456'));

-- 如何校验:将用户传递进来的密码,进行MD5加密,然后比对加密后的值

六、事务

6.1 什么是事务

要么都成功,要么都失败


1、SQL执行 A给B转账 A 1000 ----> 200 B 200

2、SQL执行 B收到A的钱 A 800 -----> B 400


将一组SQL放在一个批次中去执行~

事务原则:ACID原则 原子性,一致性,隔离性,持久性

原子性 (Atomicity)

要么都成功,要么都失败

一致性 (Consistency)

事务前后的数据完整性要保证一致,1000

持久性 (Durability) --- 事务提交

事务一旦提交则不可逆,被持久化到数据库中!

隔离性 (Isolation)

事务的隔离性是多个用户并发访问数据库时,数据库为每一个用户开启的事务,

不能被其他事务的操作数据所干扰事务之间要相互隔离

隔离所导致的一些问题

脏读:

指一个事务读取了另外一个事务未提交的数据。

不可重复读:

在一个事务内读取表中的某一行数据,多次读取结果不同。

虚读:

指在一个事务内读取到了别的事务插入的数据,导致前后读取不一致。

执行事务

-- ========================= 事务 ==========================
-- mysql事务默认开启 自动提交
set autocommit = 0;         -- 关闭
set autocommit = 1;         -- 开启(默认)

-- 手动处理事务
set autocommit = 0;         -- 关闭自动提交
-- 事务开启
start TRANSACTION;          -- 开启事务 从这个之后的事务都在同一事务中

-- 提交:  持久化
commit;
-- 回滚:  失败
rollback;

-- 事务结束
set autocommit = 1;         -- 开启事务

-- 了解
savepoint 保存点名;    -- 设置一个事务的保存点
rollback to savepoint 保存点名;     -- 回滚到保存点
release savepoint 保存点名;         -- 撤销保存点

模拟场景

-- 模拟转账:事务
set autocommit = 0;     -- 关闭自动提交
start transaction;        -- 开启一个事务(一组事务)

update account set money = money - 500 where name = '纪烁';       -- 纪烁减500
update account set money = money + 500 where name = '张磊';       -- 张磊加500

commit;         -- 提交事务 (事务持久化!)
rollback;       -- 回滚事务

set autocommit = 1;     -- 恢复默认值

猜你喜欢

转载自www.cnblogs.com/yfyyy/p/12431942.html
今日推荐