MariaDB:临时数据库和自动提交的解决方法

MariaDB: temporary database and workaround for autocommit

提问人:Nandam 提问时间:2/12/2022 更新时间:2/12/2022 访问量:163

问:

我有一个用PHP编写的网页(版本7.3.12),用户可以在其中编写任何SQL语句,然后执行它(我使用的是MariaDB版本10.4.10,包含在XAMPP中)。不幸的是,当用户编写 DDL 语句时,大多数语句都是自动提交的,因此没有回滚事务的空间。例如,我不希望他们在数据库中创建 200 个表,而这些表不会在数据库中永久保留任何干预。有没有办法解决此问题?

另外,我想知道除了临时表之外是否还存在类似临时数据库的东西?我正在考虑这个问题,因为如果我可以创建某种临时数据库(仅对会话可见),用户几乎可以做任何事情,而我不必担心任何剩余物会留在数据库中。

感谢您的任何建议

php 数据库 mariadb 临时 自动提交

评论

1赞 Barmar 2/12/2022
这并不是一个集思广益应用程序设计的合适网站。但是我会把每个用户放在一个磁盘空间有限的虚拟环境中。如果他们尝试创建过多的数据库或表,他们将耗尽空间并出现错误。如果虚拟环境有一段时间未使用,您可以自动将其删除。
0赞 Nandam 2/12/2022
感谢您的回答@Barmar

答:

1赞 O. Jones 2/12/2022 #1

MariaDB 中的数据定义语言 (DDL) 语句不是其事务语义的一部分,因此无法使用 .ROLLBACK

使用 php 应用程序中的适当代码,您可以为每个用户会话创建一个唯一命名的数据库,然后在会话结束时将其删除。这就是各种数据库小提琴站点的工作方式。

评论

0赞 Nandam 2/12/2022
感谢您的回答,我一定会使用这个简单明了的解决方案!接受作为答案,虽然不能给你投票(没有足够的声誉):/