MySQL事务是指一组SQL语句作为一个工作单元,同生共死。类似JS中的Array.prototype.every方法
事务的特点
- 原子性(Atomicity):即事务中的SQL像原子一样牢不可破,无论有多少组SQL,都作为一个工作单元来执行,要么都成功,要么都退回去,撤销修改。
- 一致性(Consistency):通过使用事务,数据库将保持一致性。
- 隔离性(Isolation):多个事务对一条数据进行修改时,事务会锁定当前数据直到完成。因此,对于数据而言,一次只能被作用于一个事务。
- 持久性(Durability):事务产生的更改是永久性的。
创建一个事务
START TRANSACTION; INSERT INTO orders(customer_id,order_date,status) VALUES(1,'2019-01-01',1); INSERT INTO order_items VALUES(LAST_INSERT_ID(),1,1,1); COMMIT;
对于以上SQL,包含了两条INSERT 语句,如果其中任何一条失败,则该事务就会退回并撤销修改。
ROLLBACK 关键字,当我们想要进行错误检查或手动退回事务,则可以将ROLLBACK 代替 COMMIT,那么该事务会原路退回
并发和锁定
当多个事务同时对一条数据进行操作时候,事务会将自己处理的该行数据上锁,避免其他事务影响,其他事务得等着当前事务处理完成,然后进行处理,
可以用workbench开两个连接测试一下。