Son*_*ngo 11 mysql innodb concurrency transaction
这两个查询有什么区别:
START TRANSACTION;
SELECT * FROM orders WHERE id=1;
UPDATE orders SET username='John' WHERE id=1;
COMMIT;
Run Code Online (Sandbox Code Playgroud)
并且没有交易:
SELECT * FROM orders WHERE id=1;
UPDATE orders SET username='John' WHERE id=1;
Run Code Online (Sandbox Code Playgroud)
SELECT
内部交易有什么影响?
如果在这两种情况下都在DELETE FROM orders WHERE id=1
另一个会话之后立即调用SELECT
,它将在什么时候被处理?
事务内的 SELECT 查询本身没有正确屏蔽 UPDATE 和 DELETE。
您需要使用以下内容:
start transaction;
(您在第一个查询中所拥有的)set autocommit = 0;
如果您发出Delete From orders Where id=1
,一旦orders
表中的行在事务结束时释放了它们的锁,就会发生这种情况。您可以试验(请在开发/登台服务器上)使用READ UNCOMMITTED
事务隔离级别使删除逻辑发生,但只有在提交时它才会变得可见并永久记录。
在第二笔交易中,基本上所有的赌注都关闭了。如果你跑
select * From orders Where id=1;
UPDATE orders SET username="John" Where id=1;
Run Code Online (Sandbox Code Playgroud)
运行Delete From orders Where id=1
将立即提交。根据 MySQL 执行这些语句的顺序,您会看到(或看不到)删除行。
START TRANSACTION READ WRITE;
START TRANSACTION READ ONLY;
READ WRITE 和 READ ONLY 修饰符设置事务访问模式。它们允许或禁止更改事务中使用的表。READ ONLY 限制防止事务修改或锁定其他事务可见的事务表和非事务表;事务仍然可以修改或锁定临时表。这些修饰符从 MySQL 5.6.5 开始可用。
归档时间: |
|
查看次数: |
23637 次 |
最近记录: |