※ 引述《up9cloud (九天)》之铭言:
: 一直以来
: 我都以为用PDO会自动做完transaction
: 直到看到这篇
: http://stackoverflow.com/questions/3106737/pdo-mysql-transactions-and-table-locking
: 想请教一下
: 1.除了mysql之外,哪些数据库是可以安全使用PDO::beginTransaction
: 2.php+mysql有没有什么好的写法可以参考的?
: 谢谢!
Transaction要搭配Lock才是完整的交易
beginTransaction;
SELECT xxx FROM table WHERE id=123 FOR UPDATE;
UPDATE table SET xxx = abc WHERE id=123;
COMMIT;
重点在SELECT FOR UPDATE,这会让InnoDB把那个row锁起来,直到你commit为止
这就避免了两个client,先后送出query,后面的覆蓋掉前面的
你可以试试看开个console,手动操作lock后不要commit,然后再开
另外一个console做一样的事,你会发现交易失败了
有InnoDB,没加上Lock,资料操作的行为就跟MyISAM是一样的