事务:当执行一组DML操作时,为了确保数据的完整性和一致性,避免数据库产生错误数据,就需要通过事务(Transaction)使该组DML操作同时成功或失败

示例:

create table account(
  id char(36) primary key,
  card_id varchar(20) unique,
  name varchar(8) not null,
  money float(10,2) default 0
);

set autocommit=0;
update account set money=money-100 where card_id=’1234567890′;#1
update account set money=money+100 where card_id=’0987654321′;#2
commit;
rollback;
select * from account

1、当执行第一个DML SQL语句时,事务开始,当出现以下情况时事务结束

(1)执行了commit或rollback语句;

(2)执行了DDL语句(如建表语句)或DCL语句(如给用户授权)

(3)数据库客户端程序退出或数据库崩溃时,为了保持数据一致性,也会结束事务。

注意:执行DML语句且没有结束事务时,如果需要查询数据库的真实改变情况,则要求在一个新的SQL Window窗口中执行查询语句

2、当一个用户执行DML语句时,如果其事物没有结束,则受影响的行被锁定,此时其它用户不能改变受影响行中的数据,后面用户所执行的DML语句会一直处于执行状态,直至前一个用户所执行DML语句事务结束,例如:

在一个SQL Window中执行如下SQL语句,并且不执行事务结束语句

set autocommit = 0;
update student set name='小强' where id='0e0180a3-ec2f-4a72-b1ae-28d5f2be36ea';

然后再在一个新的SQL Window中执行如下SQL语句

set autocommit = 0;
delete from student where id='0e0180a3-ec2f-4a72-b1ae-28d5f2be36ea';

由于update语句执行后没有结束事务,所以delete语句执行后一致处于执行状态,当update语句的事务结束,则delete语句结束执行状态。

事务四大特性(ACID):

原子性(Atomicity):数据库中原子性强调事务是一个不可分割的整体,事务开始后所有操作要么全部成功,要么全部失败,不可能停滞在中间某个环节。

一致性(Consistency):事务必须使数据库从一个一致性状态变换到另一个一致性状态,即一个事务执行之前和执行之后都必须处于一致性状态。

隔离性(Isolation):当多个用户并发访问数据库时,比如操作同一张表时,数据库为每一个用户开启的事务,不能被其他事务的操作所干扰,多个并发事务之间要相互隔离

持久性(Durability):一个事务一旦被提交,则对数据库的所有更新将被保存到数据库中,不能回滚。

 

本文地址:https://blog.csdn.net/m0_46383618/article/details/107145035