事务是指作为一个逻辑工作单元执行的一系列操作,这些操作要么全部成功,要么全部失败。事务确保了多个数据的修改作为一个单元来处理。
在mysql中,只有使用了innodb存储引擎的数据库或表才支持事物事务用于维护数据库的完整性,保证成批的sql语句要么都执行,要么都不执行事务用于管理insert、update和delete语句假如,张三在atm机上给李四转账100元,在银行的业务系统中,主要会执行两步数据变更操作:
从张三的账户减去100元给李四的账户增加100元试问,如果操作1执行成功,操作2执行失败会发生什么?
相关免费学习推荐:mysql视频教程
事务的四个特性
如果某个数据库支持事务,那么该数据库必须具备acid四个特性,即atomicity(原子性)、consistency(一致性)、isolation(隔离性)、durability(持久性)。
原子性:事务必须是原子工作单元,事务中包含的各操作要么都做,要么都不做一致性:事务在执行完成时,必须使所有的数据都保持一致状态隔离性:事务独立运行。多个事务之间相互隔离,互不干扰。事务的100%隔离,会牺牲速度持续性:事务执行完成之后,它对系统的影响是永久性的mysql的事务控制
在默认情况下,mysql是自动提交事务的,即每一条insert、update、delete的sql语句提交后会立即执行commit操作。因此,要开启一个事务,可以使用start transaction或begin,或者将autocommit的值设置为0.
方法一:方法二:例子
登陆数据库,使用student数据库并查看所有的数据表use student;show tables;
2. 创建bank_account数据表并插入两条记录,设置张三的balance字段值+1000
create table bank_account( id int not null auto_increment primary key, name varchar(30) comment '姓名', balance decimal(18, 2) comment '账户余额');insert into bank_account(id, name, balance) value(1, '张三', 0);insert into bank_account(id, name, balance) value(2, '李四', 0);update bank_account set balance = balance + 1000 where id = 1;
3. 查看默认的autocommit值
select @@autocommit;
4. 查看bank_account数据表所有记录
select * from bank_account;
5. 开始事务控制并执行两条sql语句
start transaction;update bank_account set balance = balance - 100 where id = 1;update bank_account set balance = balance + 100 where id = 2;commit;
6. 查看此时数据表的内容
select * from bank_account;
7. 再次开始事务控制,同样插入两条一样的sql语句,但将commit(提交)变为rollback(回滚)
start transaction;update bank_account set balance = balance - 100 where id = 1;update bank_account set balance = balance + 100 where id = 2;rollback;
8. 再次查看数据表内容,发现回滚之后数据无变化
select * from bank_account;
注:本文是博主mysql学习的总结,不支持任何商用,转载请注明出处!如果你也对mysql学习有一定的兴趣和理解,欢迎随时找博主交流~
更多相关免费学习推荐:mysql教程(视频)
以上就是mysql学习之事务控制的详细内容。
