我正在开展一个教育项目,让学生测试他们的SQL技能; 我们创造了一些问题并要求学生解决它们。
问题出现在这里:
[Create/Alter/Insert/Update/Rename]
?我不知道SQL Fiddle如何处理这些场景,但我的要求与SQL Fiddle相同。
我发现Validation of Scripts但这是特定于SQL Server的,我的问题不仅限于一个平台(DBMS)。
答案 0 :(得分:2)
如果您希望在SQL服务器中提供一个自由格式窗口,允许学生执行查询但不破坏数据库(如SQL Fiddle所做),那么最简单的方法是构建一个需要的Web应用程序他们的SQL作为输入并在事务中运行它。在执行时从每个查询中捕获结果集。执行每个SQL语句后,回滚事务;然后,他们的任何更改都不会提交给服务器。
如果你怀疑你的学生非常顽皮,并且会不顾一切地破坏数据库(正如我对SQL Fiddle用户那样),那么你将不得不防范明确的事务提交,例如commit transaction;
。防范这种情况是高度数据库特定的;我建议查看through my code on github以了解我如何保护SQL Fiddle的各种数据库(提示 - 最容易保护的服务器是PostgreSQL;如果可以,请使用它)。您可能还会发现有趣的是阅读关于阻止显式提交的主题的dba.se上的问题:Disable explicit commits in JDBC, detect them in SQL, or put the database in a readonly state