考虑 MySQL 5.7 版。举个例子:
Begin Transaction
Delete from payments where id = 1
Select from payments where id = 1
End Transaction
在这种情况下,我是否应该期望 select 语句不返回任何行,因为我刚刚删除了该行?还是会因为事务尚未提交而仍然返回一行?
如果选择没有返回一行,那么我可以假设在我进行选择之前,子表上的任何级联删除也被安全删除了吗?
(要回答“你为什么要这样做?”这个不可避免的问题,答案很简单,我希望在多个不同的场景中重复使用相同的脚本,所以我想知道这样做是否安全,或者我是否可以必须编写单独的脚本。在一种情况下删除将执行,在另一种情况下则不会。)
就
SELECT
声明而言,这一id = 1
行已经消失了。关于物理存储是否仍然包含在 时与已删除行有关的数据位可能存在争议SELECT
,但就对该数据的访问而言,选择将(应该)不返回任何内容。