目录mysql
事务:一般就是一些业务须要多条sql语句参与,参与的sql语句会造成一个执行的总体,该总体咱们称之为是一个事物sql
简而言之:事务就是保护多条执行的sql语句,必须同时执行成功数据库
案例:转帐就是一个事务 从一个用户将资金转出,再将资金转入到另外一个用户 这两条执行语句都必需要同时执行成功,或者同时不成功 不能我已经从个人的帐户转给对方钱,个人钱少了可是对方没有收到
咱们这里就以银行的案列为例并发
1.先建立银行表,而后插入两个用户 create table bank( id int, name varchar(16), money decimal(65, 2) ); insert into bank values(1, 'Tom', 10), (2, "Bob", 10);
1.进行转帐操做(没有事务的支持下) # 先将Tom的钱减去,而后再给ruakei的用户加钱,但问题来了 # 咱们的表里面并无ruakey这个用户啊,因此给ruakey加钱的这个sql语句其实是没有意义的 # 因此这样就会致使Tom用户的钱就丢了,因此吴国一个银行出现了这种状况的话,后果不堪设想 update bank set money=money-1 where name='Tom'; update bank set money=money+1 where name='ruakei'; mysql> select * from bank; +------+------+-------+ | id | name | money | +------+------+-------+ | 1 | Tom | 9.00 | | 2 | Bob | 10.00 | +------+------+-------+
开启事务的方式code
begin;事务
sql语句;ci
sql语句;cmd
commit; 当确认上面两条sql语句都正确执行了,同时成功了,提交事务,数据表里的数据会进行对应的修改it
# 将两条sql看作事务处理 # 开启事务 begin; update bank set money=money-1 where name='Tom'; update bank set money=money+1 where name='ruakei'; select * from bank;(这个时候,发现表里的数据tom被减钱了,没有ruakey这个帐户,因此以上两条sql语句是错误的因此,执行rollback语句还原tom用户减钱以前) # 确认有误,回滚 rollback; ##################################cmd 图解 mysql> select * from bank; +------+------+-------+ | id | name | money | +------+------+-------+ | 1 | Tom | 9.00 | | 2 | Bob | 10.00 | +------+------+-------+ mysql> rollback; Query OK, 0 rows affected (0.14 sec) mysql> select * from bank; +------+------+-------+ | id | name | money | +------+------+-------+ | 1 | Tom | 10.00 | | 2 | Bob | 10.00 | +------+------+-------+
begin; update bank set money=money-1 where name='Tom'; update bank set money=money+1 where name='Bob'; select * from bank;(这个时候,发现表里的数据tom被减钱了,bob帐户也加钱了,因此咱们提交事务) # 确认无误,提交事务 commit; ######################################cmd 图解 mysql> select * from bank; +------+------+-------+ | id | name | money | +------+------+-------+ | 1 | Tom | 9.00 | | 2 | Bob | 11.00 | +------+------+-------+