(2)正常执行mysql中的事务怎么用我们的sql语句
(3)当sql语句执行完毕,存在两种情况:
1,全都成功,我们要将sql语句对数据库造成的影响提交到数据库中,committ
2,某些sql语句失败,我们执行rollback(回滚) , 将对数据库操作赶紧撤销
(注意:mysql数据支持事务,但是要求必须是innoDB存储引擎)
mysql create table bank(name varchar(20),money decimal(5,1))engine=innodb defau
lt charset=utf8;
mysql inset into bank values('shaotuo',1000),('laohu',5000);
mysql select*from bank;
+---------+--------+
| name | money |
+---------+--------+
| shaotuo | 1000.0 |
| laohu | 5000.0 |
+---------+--------+
------没有成功“回滚”执行rollback
mysql start transaction; //开启事务
Query OK, 0 rows affected (0.00 sec)
mysql update bank set money=money+500 where name='shaotuo';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql update bank set moey=money-500 where name='laohu';
ERROR 1054 (42S22): Unknown column 'moey' in 'field list'
mysql rollback; //只要有一个不成功 , 执行rollback操作
Query OK, 0 rows affected (0.01 sec)
mysql select*from bank;
+---------+--------+
| name | money |
+---------+--------+
| shaotuo | 1000.0 |
| laohu | 5000.0 |
+---------+--------+
------成功之后 进行commit操作
mysql start transaction; //开启事务
Query OK, 0 rows affected (0.00 sec)
mysql update bank set money=money+500 where name='shaotuo';
Query OK, 1 row affected (0.01 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql update bank set money=money-500 where name='laohu';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql commit; //两个都成功后执行commit(只要不执行commit,sql语句不会对真实的数据库造成影响)
Query OK, 0 rows affected (0.05 sec)
mysql select*from bank;
+---------+--------+
| name | money |
+---------+--------+
| shaotuo | 1500.0 |
| laohu | 4500.0 |
+---------+--------+
一文详解-MySQL 事务和锁当多个用户访问同一份数据时,一个用户在更改数据的过程中,可能有其他用户同时发起更改请求,为保证数据库记录的更新从一个一致性状态变为另外一个一致性状态,使用事务处理是非常必要的,事务具有以下四个特性:
MySQL 提供了多种事务型存储引擎,如 InnoDB 和 BDB 等,而 MyISAM 不支持事务 。为了支持事务,InnoDB 存储引擎引入了与事务处理相关的 REDO 日志和 UNDO 日志 , 同时事务依赖于 MySQL 提供的锁机制
事务执行时需要将执行的事务日志写入日志文件,对应的文件为 REDO 日志 。当每条 SQL 进行数据更新操作时,首先将 REDO 日志写进日志缓冲区 。当客户端执行 COMMIT 命令提交时,日志缓冲区的内容将被刷新到磁盘 , 日志缓冲区的刷新方式或者时间间隔可以通过参数 innodb_flush_log_at_trx_commit 控制
REDO 日志对应磁盘上的 ib_logifleN 文件,该文件默认为 5MB,建议设置为 512MB,以便容纳较大的事务 。MySQL 崩溃恢复时会重新执行 REDO 日志的记录 , 恢复最新数据,保证已提交事务的持久性
与 REDO 日志相反,UNDO 日志主要用于事务异常时的数据回滚,具体内容就是记录数据被修改前的信息到 UNDO 缓冲区,然后在合适的时间将内容刷新到磁盘
假如由于系统错误或者 rollback 操作而导致事务回滚,可以根据 undo 日志回滚到没修改前的状态 , 保证未提交事务的原子性
【mysql中的事务怎么用 mysql事务使用场景】
推荐阅读
- 玉林卖货直播,玉林卖货直播平台
- 南京日报新媒体待遇如何,南京日报社的待遇如何
- word如何往下加时间,word时间怎么在右下角
- 如何进一步办好新媒体,当前如何做好新媒体的管理
- c怎么配置mysql mysql配置mycnf
- 连接redis报错java,连接redis报错connection refused
- 一般u盘接头是什么型号,一般u盘接头是什么型号的
- php获取复选框数据数组 php获取复选框数据数组的函数
- 双11各大电商现状如何,今年双十一,电商交易和发展的情况