给定一个交易
SELECT * FROM t;
DROP TABLE t;
这有效吗?如果是,结果是什么 - 空集,还是 t 的先前内容?
我对 SQLite 的情况特别感兴趣,但由于以前显然没有人问过这个问题,所以最好看看各种数据库 - 以及它们的各种实现版本(例如移动版本)之间的差异。
最佳答案
答案是“视情况而定”。我所知道的最具可读性的来源是 Melton and Simon's book on SQL:1999 .
对于那些不明白问题是什么的人,请考虑这个部分事务。
begin transaction;
select * from t;
drop table t;
如果不在您最喜欢的 dbms 中进行测试,请考虑一下。
- 客户端是否应该在执行
commit;
之前看到任何 行? - 客户端是否应该在执行
commit;
后看到任何行?
然后考虑其他并发查询在各种事务隔离级别下“应该”如何表现。
关于sql - SELECT 之后的 DROP 是否仍然产生数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22259040/