mysql之事务
admin
2023-06-09 12:02:03
0次

我们先来说说什么是事务:

       事务就是逻辑上的一组操作,组成这组操作的各个单元,要不全都成功,要不全都失败。一个事务是一个连续的一组数据库操作,就好像它是一个单一的工作单元进行。换言之,永远不会是完整的事务,除非该组内的每个单独的操作是成功的。如果在事务的任何操作失败,则整个事务将失败。

       mysql的事务支持不是绑定在mysql服务器本身,而是与存储引擎相关。例如,MyISAM:不支持事务,用于只读程序提高性能;InnoDB:支持ACID事务,行级所,并发;Berkeley DB:支持事务。

      

事务的特性(ACID):

       1.原子性(Atomicity):确保工作单元内的所有操作都成功完成,否则事务将被终止在故障点,和以前的操作将回滚到以前的状态。简单的说就是,一组事务,要么成功,要么撤回;

       2.一致性(Consistency):确保数据库正确地改变状态后,成功提交的事务。

       3.隔离性(Isolation):使事务彼此的操作的独立和透明,即事务独立运行,一个事务处理后的结果,影响了其他事务,那么其他事务会撤回。事务的100%隔离,需要牺牲速度。

       4.持久性(Durability):确保提交事务的结果或效果的系统出现故障的情况下让然存在。


mysql的事务处理主要有两种方式:

       1.用begin,rollback,commit来实现

          begin:开始一个事务

          rollback:事务回滚

          commit:事务确认

       2.直接用set来改变mysql的自动提交模式

          mysql默认是自动提交的,也就是你提交一个query,它就直接执行,我们可以通过下面的语句进行设置:

             set autocommit = 0  禁止自动提交

             set autocommit = 1  开启自动提交

          我们要注意当我们用set autocommit = 0 的时候,你以后所有的sql都将作为事务处理,直到我们用commit确认或rollback结束。当我们结束这个事务的同时也开启了个新的事务。按第一种方法只将当前的作为一个事务。mysql中只有INNODE和BDB类型的数据表才能支持事务处理,其他的类型是不支持的。


       在mysql中,事务开始使用COMMIT或ROLLBACK语句开始工作和结束。开始和结束语句的sql命令之间形成了大量的事务。

COMMIT&&ROLLBACK:

        这两个关键字用于提交和回滚,主要用于mysql的事务。当一个成功的事务完成后,发出COMMIT命令应使所有参与表的更改才会生效。如果发生故障,应发出一个ROLLBACK命令,使返回的事务中引用的每一个表回到以前的状态。


使用mysql的过程:

       (1)在执行sql语句之前我们要开启事务 start transaction

       (2)正常执行我们的sql语句

       (3)当sql语句执行完毕,存在两种情况:

                a.全都成功,我们要将sql语句对数据库造成的影响提交到数据库中,commit

                b.某些sql语句失败,我们执行rollback(回滚),将对数据库的操作赶紧撤销


接下来我们来看一个实例:(关于银行存取钱的)

      create table bank(name varchar(20),money decimal(5,1))engine=innodb default charset = utf8

      insert into bank values(‘shaotuo’,1000),(‘laohu’,5000)

      select * from bank

       mysql之事务

       没有成功的话执行回滚rollback

      start transaction;//开启事务

      update bank set money=money+500 where name = ‘shaotuo’//修改数据

      update bank set moey=money-500 where name = ‘laohu’

      ERROR 1054(42522):Unknown column ‘moey’in ‘filed list’

     

      由于上述有一个错误,我们要执行回滚rollback操作:

       rollback;

       select * from bank;

       mysql之事务

      我们可以看到表没有变化

      成功之后进行commit操作:

      start transaction;

       update bank set money=money+500 where name = ‘shaotuo’

       update bank set money=money-500 where name = ‘laohu’

       两个都执行成功后commit

       commit;

       select * from bank;

       mysql之事务

    我们可以看到我们修改数据成功了。


     


























相关内容

热门资讯

空调连续工作多久需要停机休息 空调连续工作的时间取决于多个因素,包括空调的型号、功率、使用环境和维护情况等。一般来说,空调可以连续...
空调哪个符号是除湿的 空调除湿功能通常用一个水滴形状的符号表示。不同品牌和型号的空调遥控器可能会有所差异,但一般来说,除湿...
格力空调多长时间加一次氟利昂 1、一般情况下,空调对氟利昂的使用量是非常小的,所以在空调使用了四年左右的时候再考虑加也没问题。2、...
空调用多长时间需要加氟一次 一般情况下是五年。当出现以下这几种情况时,空调才需要加氟。1、空调的室内机和室外机各有两个接口,当接...
格调生活·C标思享荟:卡萨帝在... 9月12日的郑州龙湖金融岛,夜风轻拂,灯光璀璨。“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑...
品牌价值破千亿、高端份额持续领... 9月12日,“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑州站”在郑州龙湖金融岛举办。2026...
空调主板坏了修800还是换新的 空调主板坏了是修还是换新,需要考虑多个因素,以下是一些建议:1. 维修成本:如果维修费用较低,比如 ...
空调开多久需要休息多长时间 问题:空调开多久需要休息多长时间回答:1、在使用空调的过程中,一般空调开7~8个小时左右需要休息2~...
中央空调多长时间清洗一次 1、一般空调开机前清洗一次即可,空调开机中间时段再清洗一次,空调关机时清洗一次,这样比较合理。2、空...
中央空调氟利昂多久加一次 看空调制热和制冷程度,很多人的观点认为氟利昂必须一年放一次,其实这个观点是错误的,理解上面有点偏差,...