Mysql事务

什么是事务? 

事务是逻辑上的一组操作,组成这组操作的各个单元,要不全都成功要不全都失败,这个特性就是事务 

注意:mysql数据支持事务,但是要求必须是innoDB存储引擎 

解决这个问题: 

mysql的事务解决这个问题,因为mysql的事务特性,要求这组操作,要不全都成功,要不全都失败,这样就避免了某个操作成功某个操作失败。利于数据的安全 



·BEGIN或START TRANSACTION;显示地开启一个事务;

·COMMIT;也可以使用COMMIT WORK,不过二者是等价的。COMMIT会提交事务,并使已对数据库进行的所有修改称为永久性的;

·ROLLBACK;有可以使用ROLLBACK WORK,不过二者是等价的。回滚会结束用户的事务,并撤销正在进行的所有未提交的修改;

·SAVEPOINT identifier;SAVEPOINT允许在事务中创建一个保存点,一个事务中可以有多个SAVEPOINT

·RELEASE SAVEPOINT identifier;删除一个事务的保存点,当没有指定的保存点时,执行该语句会抛出一个异常

·ROLLBACK TO identifier;把事务回滚到标记点;

·SET TRANSACTION;用来设置事务的隔离级别。InnoDB存储引擎提供事务的隔离级别有READ 

·UNCOMMITTED、READ COMMITTED、REPEATABLE READ和SERIALIZABLE。


如何使用: 

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

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

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

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

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

(注意:mysql数据支持事务,但是要求必须是innoDB存储引擎) 


mysql> create table bank(name varchar(20),money decimal(5,1))engine=innodb default 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 | 
+---------+--------+
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值