事务的四大特性(ACID)
1、原子性(Atomicity)
事务是一个不可分割的单位,事务中的所有SQL等操作要么都发生,要么都不发生。
2、一致性(Consistency)
事务发生前和发生后,数据的完整性必须保持一致。
3、隔离性(Isolation)
当并发访问数据库时,一个正在执行的事务在执行完毕前,对应其他的会话是不可见的,多个并发事务之间的数据是相互隔离的。备份的参数 --single-transaction
4、持久性(Durability)
一个事务一旦被提交,它对数据库中的数据改变就是永久性的。如果出了错误,事务也不允许撤销,只能通过“补偿性事务”
事务的开启:
数据库默认事务是自动提交的,也就是发一条SQL它就执行一条。如果想多条SQL放在一个事务中执行,则续爱使用事务进行处理。当我们开启一个事务,并且没有提交,mysql会自动回滚事务。或者我们使用rollback命令手动回滚事务。
数据库开启事务命令:
MySQL默认是自动提交的,也就是你提交一个QUERY,它就直接执行!我们可以提供
mysql> show variables like "%autocommit%"; ##查看MySQL事务状态
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| autocommit | ON |
+---------------+-------+
1 row in set (0.00 sec)
set global autocommit=OFF 禁止自动提交事务
mysql> set autocommit=0; ##关闭自动提交事务
Query OK, 0 rows affected (0.00 sec)
mysql> show variables like "%autocommit%";
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| autocommit | OFF |
+---------------+-------+
1 row in set (0.00 sec)
mysql> set autocommit=1; ##设置开启自动提交事务
Query OK, 0 rows affected (0.00 sec)
mysql> show variables like "%autocommit%";
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| autocommit | ON |
+---------------+-------+
1 row in set (0.00 sec)
set autocommit=1 ##开启自动提交,0关闭
rollback ##回滚事务
commit ##提交事务
提示:事务引擎基于表的,所以要在表上插入、更新测试事务的特性。
innodb_flush_log_at-trx_commit = 1 ##