概述
1.事务
①事务是一个或者多个SQL语句组成的单元,在这个单元中,每个sql都是相互依赖的。
②事务是一个整体,里面的内容要么全部执行成功,要么都不成功,不可能存在部分执行成功的情况。
③如果执行某一条SQL语句时出现异常,整个事务将会执行回滚整个事务会回到最初的状态。
事务的语法
开启事务:start transaction;
提交事务:commit;
事务的回滚:rollback;
执行回滚,将数据回滚到事务开启时的状态,同时提交事务,此时不对表中数据产生影响。
事务的回滚点
设置回滚点:savepoint 回滚点名;
回滚到指定的回滚点,不会自动提交事务:rollbakc to 回滚点名;
事务的四大特性(ACID)
原子性(Atomicity):每个事务都是一个整体,不可再拆分,事务这所有的SQL语句要么都执行成功,要么都执行失败;
一致性(Consistency):事务在执行前数据库的状态与执行后数据库的状态保持一致,如转账前两个人的总金额是2000,转账后两个人总金额也是2000;
隔离性(Isolation):事务与事务之间不应该相互影响,执行时保持隔离的状态;
持久性(Durability):一旦事务执行成功,对数据库的修改是持久的。
当多个事务同时操作一张表时,会出现各种并发问题
①更新丢失:当事务A和事务B在操作同一个值1000时,事务A把该值更新成了800了,而此时事务B读取的值还是1000,事务B在1000的基础上进行更新,而不是在800的基础上进行更新;
②脏读:事务A把值1000更新成了800,但还没有提交。事务B此时去读取改值时,读取到了800而不是1000。事务B读取到了事务A还没有提交的数据;
③不可重复读:一个事务将数据进行查询,在第二次查询期间,另一个事务对数据进行了修改,导致第二次查询的结果不再重复;
④幻读:一个事务对全部数据进行了修改,同时另一个事务添加了一条数据。第一次操作的事务查看数据时,发现有一条没有修改的数据,以为产生了幻觉。
事务隔离级别 | 脏读 | 不可重复读 | 幻读 |
---|---|---|---|
读未提交(read-uncommitted) | 是 | 是 | 是 |
不可重复读(red-committed) | 否 | 是 | 是 |
可重复读(repeatable-read) | 否 | 否 | 是 |
串行化(serializable) | 否 | 否 | 否 |
2.存储过程
将数据库的操作进行一个封装,要使用时,可直接调用使用,可以理解为函数的声明。
存储过程的创建
create procedure 过程名(in 参数类型 ,out 参数名 参数类型)[in表示形参,out表示返回值]
begin
sql语句
end;
存储过程的调用:call 过程名(形参列表)
调用有返回值的存储过程,要给返回值传递一个变量,用于接收值。
3.触发器
概念:触发器是指在表insert/update/delete之前或者之后,触发并执行触发器中定义的SQL语句结合。
作用:可以协助应用在数据库端保证数据的完整性、日志记录、数据校验等操作。
触发器中的变量
new:表示即将要新增的数据,或者即将更新的数据;
old:表示修改之前的旧数据,或者将要删除的数据。
触发器的类型
insert型触发器、update型触发器、delete型触发器
创建触发器
create trigger 触发器名
before/after insert/update/delete 表示在增加、更新、删除操作之前或者之后执行该触发器
on 表名
[for each row] 表示行级触发器
begin
触发器要操作的SQL语句
end;
查看触发器:show triggers;
删除触发器:drop trigger 触发器名;
最后
以上就是温柔心情为你收集整理的MySQL笔记3的全部内容,希望文章能够帮你解决MySQL笔记3所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复