什么是事务

事务就是对数据库的一组SQL操作,当**全部正确执行**数据库应用便会**提交到数据库**,只要当前事务中有**一个SQL操作未能正确执行**那么这一组SQL操作便会被**回滚到原始状态**

事务的作用

**保证我们某一个业务逻辑对数据库的正确操作**,如果中间有一个SQL操作未完成,或者程序出现错误,则会按照指定的事务规则进行回滚,以此来保证我们数据的安全性和完整性。

特性

原子性:

  • 指的是事务中的操作**要么全部完成提交到数据库**,**要不全部回滚**对数据库不能造成影响。

    一致性:

  • 事务的数据前后完整性要保持一致

    持久性:

  • **事务一旦提交不可逆,被持久化到数据库中**

    隔离性:

  • 当多用户并发访问数据库时,保证多个并发事务之间相互隔离(相对独立)

测试事务实现转账

  1. --转账,新建一个数据库
  2. 例子:
  3. 1 | create database shop character set utf8 collate utf8_general_ci
  4. 2 | use shop
  5. --创建一个收款表
  6. 例子:
  7. 3 | create table `account`(
  8. `id` int(3) not null auto_increment,
  9. `name` varchar(30) not null,
  10. `money` decimal(9,2) not null,
  11. primary key (`id`)
  12. )engine=innodb default charset=utf8;
  13. --添加数据
  14. 例:
  15. 4 | insert into account(`name`,`money`) values ('A',2000.00),('B',10000.00)
  16. -- 模式事务
  17. 例子:
  18. 5 | set autocommit = 0; --默认自动提交事务,设为手动关闭自动提交
  19. 6 | start transaction; --开启一个事务 (一组事务)
  20. --转账步骤(一个一个执行)
  21. 例子:
  22. 7 | UPDATE account SET money = money - 500 WHERE `name` = 'A' ; --A500
  23. 8 | update account set money = money + 500 where `name` ="B"; --B500
  24. 9 | ROLLBACK;
  25. //回滚 变回原来的状态
  26. 10 | COMMIT;
  27. //提交 持久化不可逆
  28. 11| set autocommit = 1;
  29. //恢复默认值,//设为自动提交事务