数据库事务操作
事务:当执行一组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