爱站网关键词怎么挖掘,下拉框代码自做生成网站,前端需要掌握哪些知识,车培训网站建设事务的概念 事务是一种机制#xff0c;一个操作序列。包含了一组数据库的操作命令#xff0c;所有的命令都是一个整体#xff0c;向系统提交或者撤销的操作#xff0c;要么都执行#xff0c;要么都不执行。
是一个不可分割的单位 事务的ACID特点 ACID#xff0c;是指在可… 事务的概念 事务是一种机制一个操作序列。包含了一组数据库的操作命令所有的命令都是一个整体向系统提交或者撤销的操作要么都执行要么都不执行。
是一个不可分割的单位 事务的ACID特点 ACID是指在可靠数据库管理系统(DBMS) 中事务(transaction)应该具有的四个特性原子性(Atomicity) 、一致性(Consistency )、隔离性(Isolation) 、持久性(Durability) 。这是可靠数据库所应具备的几个特性。 A原子性 原子性的最大作用就是保证事务的整体性避免外界因素对原本数据更改执行的影响
原子性作为最小单位必须作为一个整体事务里的所有条件都是一个整体不可分割。要么都成功要么都失败。
os: 比如在银行中进行转账这边已经转款成功结果此时因外界因素中断对方的余额并未增加而自己的账户扣款就属于重大的数据事故。所以必须保证转帐的整个过程是一体的要么转账成功按预计发生变化。要么转账失败双方余额保持不变。
C一致性
一致性事务开始之前和事务结束之后数据库的完整性约束没有被破坏。
事务完成时数据必须处于一致状态。
事务开始前数据库中的存储数据处于一致状态。
进行中的事务数据可能处于不一致状态
在事务完成最终完成时必须再次回到已知的一致状态
os对银行转帐事务不管事务成功还是失败应该保证事务结束后表中A和B的存款总额跟事务执行前一致。例如A的账户有1000元B的账户有1000元现在A转账200元给B不管事务成功还是失败转账前后A和B的存款总额都应该是2000元。 I 隔离性 隔离性只在并发环境中不同事务同时操作相同数据时每个事务都有各自完整的数据空间。对数据进行修改的所有并发事务是彼此隔离的表明事务必须 是独立的。
修改数据的事务可以另一个使用相同数据的事务开始之前访问这些数据。或者在另一个使用相同的事务结束之后访问这些数据 当多个用户进行同时操作 如果不存在隔离性的事务就会出现以下状况 1脏读 当一个事务正在访问数据并且对数据进行了修改而这种修改还没有提交到数据库中这时另外一个事务也访问这个数据然后使用了这个数据。 2不可重复读 指在一个事务内多次读同一数据。 在这个事务还没有结束时另外一个事务也访问该同一数据。那么在第一个事务中的两次读数据之间由于第二个事务的修改那么第一个事务两次读到的的数据可能是不一样的。这样就发生了在一一个事务内两次读到的数据是不一样的因此称为是不可重复读。( 即不能读到相同的数据内容) 3幻读
一个事务对一个表中的数据进行了修改这种修改涉及到表中的全部数据行。同时另一个事务也修改这个表中的数据这种修改是向表中插入一行新数据。 那么操作前一个 事务的用户会发现表中还有没有修改的数据行就好象发生了幻觉一样 。 4 丢失更新
两个事务同时读取同一条记录A先修改记录B也修改记录(B不知道A修改过)B提交数据后B的修改结果覆盖了A的修改结果。 事务的隔离级别
事务的隔离级别决定了事务之间可见的级别。
MySQL事务支持如下四种隔离用以控制事务所做的修改并将修改通告至其它并发的事务
1未提交读Read UncommittedRU
允许脏读即允许一个事务可以看到其他事务未提交的修改。
2提交读Read Committed RC)
允许一个事务只能看到其他事务已经提交的修改未提交的修改是不可见的。防止脏读。
3可重复读Repeatable ReadRR——mysql默认的隔离级别
确保如果在一个事务中执行两次相同的SELECT语句都能得到相同的结果不管其他事务是否提交这些修改。可以防止脏读和不可重复读。
4串行读serializable——相当于锁表
完全串行化的读将一个事务与其他事务完全地隔离。每次读都需要获得表级共享锁读写相互都会阻塞。可以防止脏读不可重复读取和幻读事务串行化会降低数据库的执行效率。
事务隔离级别的作用范围
1.全局级对所有的会话有效
show GLOBAL VARIABLES like %isolation;select global.tx_isolation; 全局修改
set global TRANSACTION isolation level read UNCOMMITTED;
select global.tx_isolation; 临时修改
临时
select global.tx_isolationread uncommitted; 2.会话级只对当前的会话有效
show session variables like %isolation;select session.tx_isolation;修改会话
set session TRANSACTION isolation level read UNCOMMITTED;
select session.tx_isolation; 以上这些情况如何避免
1.权限控制普通用户只能查
2.根据情况来使用隔离级别
生产环境---最好是提交读
测试环境---无所谓
3.生产环境上 只能允许一个人对一个事务进行操作。其他人不允许操作。 D持久性
持久性在事务完成以后该事务所对数据库所作的更改便持久的保存在数据库之中并不会被回滚。
指不管系统是否发生故障事务处理的结果都是永久的。一旦事务被提交事务的效果会被永久地保留在数据库中。 事务的控制语句
BEGIN 或 START TRANSACTION 显式地开启一个事务。 COMMIT 或 COMMITWORK 提交事务并使已对数据库进行的所有修改变为永久性的。 ROLLBACK 或 ROLLBACK WORK 回滚会结束用户的事务并撤销正在进行的所有未提交的修改。 SAVEPOINT S1 使用SAVEPOINT 允许在事务中创建一个回滚点一个事务中可以有多个SAVEPOINT“S1”代表回滚点名称。 ROLLBACK TO [SAVEPOINT] S1 把事务回滚到标记点。
一个事务的完整完成的过程中只要有一个begin事务起始标志和commit事务提交。
begin start transaction
#都可以作为显示的开启事务commit commit work
#都可以作为提交事务rollback rollback work
#都可以作为回滚可以撤销正在进行的所有未提交的修改savepoint s1(名字自定义)
#创建回滚点还原点一个事务可以又多个回滚点rollback to s1
#回滚到还原点 修改全局事务和修改会话
set global transaction isolation level read uncommitted;
#设置全局事务的隔离级别。全局修改set global.tx_isolationread uncommitted;
#设置全局事务的隔离级别。临时修改。重启及失效set session transaction isolation level read uncommitted;
#修改会话。全局修改。set session.tx_isolationread uncommitted;
#修改会话临时修改。重启及失效
修改全局事务和修改会话
set global transaction isolation level read uncommitted;
#设置全局事务的隔离级别。全局修改set global.tx_isolationread uncommitted;
#设置全局事务的隔离级别。临时修改。重启及失效set session transaction isolation level read uncommitted;
#修改会话。全局修改。set session.tx_isolationread uncommitted;
#修改会话临时修改。重启及失效
我们先创一个简单的表 进行数据修改 终端查看结果并未修改 commit提交之后 终端结果刷新后修改 如何设置还原点
begin
#开启事务update test set moneymoney-30 where id 2;
#修改信息savepoint s1;
#设置回滚点1select * from test;update test set moneymoney-20 where id 1;
#修改信息savepoint s2;
#设置回滚点2rollback to s1;
#回滚到回滚点1select * from test;rollback to s2;
#回滚到回滚点2select * from test; 多点还原
多点还原begin
#开启事务update test set moneymoney-80 where id 1;savepoint s1;select * from test;update test set moneymoney-50 where id 2;savepoint s2;select * from test;insert into test values(3,40);select * from test;rollback to s2;select * from test;rollback to s1;select * from test;commit;rollback to s1; 一旦提交所有还原点将全部消失
如果有回滚点 s1 s2回到s1则s2消失。因为回到s1时并未有s2。 总结 事务的ACID特性
原子性(Atomicity)一致性(Consistency )隔离性(Isolation)持久性(Durability)
这是可靠数据库所应具备的几个特性。
事务之间的相互影响
当多个客户端并发地访问同一个表时可能出现下面的一致性问题
脏读不可重复读幻读丢失更新
事务的隔离级别 1未提交读Read UncommittedRU 允许脏读。
2提交读Read Committed RC) 防止脏读。
3可重复读Repeatable ReadRR—mysql默认的隔离级别防止脏读和不可重复读。
4串行读serializable—相当于锁表可以防止脏读、不可重复读和幻读事务串行化会降低数据库的执行效率。
查询全局事务隔离级别
show global variables like %isolation%select global.tx_isolation;
查询会话事务隔离级别
show session variables like %isolation%;select session.tx_isolation;select tx_isolation;
设置全局事务隔离级别
set global transaction isolation level 隔离级别 #永久生效示例 set global transaction isolation level read committed;
设置会话事务隔离级别
set session transaction isolation level 隔离级别 #退出连接后失效示例set session transaction isolation level read committed;
事务控制语句
BEGIN 或 START TRANSACTION 显式地开启一个事务。 COMMIT 或 COMMITWORK 提交事务并使已对数据库进行的所有修改变为永久性的。 ROLLBACK 或 ROLLBACK WORK 回滚会结束用户的事务并撤销正在进行的所有未提交的修改。 SAVEPOINT S1 使用SAVEPOINT 允许在事务中创建一个回滚点一个事务中可以有多个SAVEPOINT“S1”代表回滚点名称。 ROLLBACK TO [SAVEPOINT] S1 把事务回滚到标记点。
使用 set 设置控制事务 set autocommit0 #禁止自动提交仅针对当前会话
set autocommit1 #开启自动提交仅针对当前会话Mysql默认为1
set global autocommit0 #禁止自动提交针对全局事务
set global autocommit1 #开启自动提交针对全局事务Mysql默认为1
show variables like autocommit; #查看当前会话的autocommit值
show global variables like autocommit; #查看全局事务的autocommit值