sql - SELECT 之后的 DROP 是否仍然产生数据?

标签 sql database

给定一个交易

SELECT * FROM t;
DROP TABLE t;

这有效吗?如果是,结果是什么 - 空集,还是 t 的先前内容?

我对 SQLite 的情况特别感兴趣,但由于以前显然没有人问过这个问题,所以最好看看各种数据库 - 以及它们的各种实现版本(例如移动版本)之间的差异。

最佳答案

答案是“视情况而定”。我所知道的最具可读性的来源是 Melton and Simon's book on SQL:1999 .

Excerpt from Melton and Simon's book

对于那些不明白问题是什么的人,请考虑这个部分事务。

begin transaction; 
select * from t; 
drop table t;

如果不在您最喜欢的 dbms 中进行测试,请考虑一下。

  • 客户端是否应该在执行commit; 之前看到任何 行?
  • 客户端是否应该在执行 commit;看到任何行?

然后考虑其他并发查询在各种事务隔离级别下“应该”如何表现。

关于sql - SELECT 之后的 DROP 是否仍然产生数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22259040/

相关文章:

java - 在 Java/MyBATIS 中插入重复行时检测

sql - Firebird 备份还原令人沮丧,有没有办法避免它?

Javascript/jQuery 数据存储方式(数据库)

mysql - 需要分隔单词的字符时,如何在MySQL中进行模糊搜索?

sql - 从varchar SQL Developer中删除前导零

mysql - 如何从架构中的每一列获取示例值

mysql - 组合 2 个 MySQL 查询以提高性能

sql - 在 Golang 中重用或复制 *sql.Rows

php - 将我的 sql 数据库本地主机移动到实时服务器

sql - 无法回滚子事务。未找到该名称的事务或保存点