USE mydb; CREATE TABLE accounts ( id INT PRIMARY KEY, name VARCHAR(50), balance DOUBLE PRECISION ); INSERT INTO accounts(id,name,balance) VALUES(1,"Alice",1000.00); INSERT INTO accounts(id,name,balance) VALUES(2,"Bob",500.00);
在MySQL中,事务是由BEGIN、COMMIT和ROLLBACK语句来控制的。在一个事务中,所有的更新语句都会先被缓存,等到调用COMMIT语句时才会一次性提交所有的修改,这样可以确保不会出现部分提交的问题。如果想要撤销所有的更改,可以调用ROLLBACK语句。
BEGIN; # 开始一个事务 UPDATE accounts SET balance = balance - 100.00 WHERE id = 1; UPDATE accounts SET balance = balance + 100.00 WHERE id = 2; COMMIT; # 提交事务
事务还有一个很重要的特性,那就是隔离性。当多个事务同时对同一个数据进行修改时,如果不加任何限制,就有可能发生一些不可预知的结果。MySQL通过设置不同的事务隔离级别来解决这个问题,包括读未提交、读已提交、可重复读和串行化四个级别。这些级别对应不同的锁定方式和数据访问权限,程序员需要按照实际需求选择合适的隔离级别。
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED; # 查询未提交的数据 SET TRANSACTION ISOLATION LEVEL READ COMMITTED; # 只查询已经提交的数据 SET TRANSACTION ISOLATION LEVEL REPEATABLE READ; # 确保可重复读取同样的数据 SET TRANSACTION ISOLATION LEVEL SERIALIZABLE; # 强制事务串行化,以防止并发更新
尽管MySQL支持事务,但是它并不是一个完全的ACID数据库管理系统。在某些情况下,由于内部架构的限制,MySQL可能会出现数据的不一致性。因此,在使用MySQL时,程序员需要充分了解数据库的特性,并且根据实际需求选用合适的方案。