有没有办法可以强制我的MySQL数据库允许创建一个名为table_xyz的新表,只有当另一个表中存在table_xyz的记录时才会这样做?
基本上我希望我的表名是外键。
e.g。 allowed_tables结构:
table_id | other columns |
--------------------------
table_xyz| bla bla bla |
--------------------------
因为我在allowed_tables中有table_xyz的记录,所以我可以创建一个具有此名称的表。如果删除记录,则应自动删除该表。如果我更改表名,必须发生同样的情况。
修改1:
表allowed_structures实际上称为贷款。它包含loan_id和合同中要求的其他列。插入此记录后,我创建了一个名为<的表。 loan_id> (贷款表中必须存在的记录)。如果我使用<更新/删除记录loan_id>在贷款表中,我希望自动更改表名,而不是通过PHP脚本。目前通过PHP脚本完成。
我需要知道哪个是最好的选择,以及为什么。谢谢!
答案 0 :(得分:4)
这最初是为SQL Server编写的,但每个RDBMS的概念都是相同的。
是的,这是可以实现的,但是Curse and Blessing Dynamic SQL by Erland Sommarskog
CREATE TABLE @tbl
这里的愿望是创建一个在运行时确定名称的表。
如果我们只是查看反对在存储过程中使用动态SQL的参数,那么它们中很少有真正适用。如果存储过程中包含静态CREATE TABLE,则运行该过程的用户必须具有创建表的权限,因此动态SQL不会更改任何内容。计划缓存显然与它无关。等
尽管如此:为什么?你为什么想做这个? 如果您正在应用程序中动态创建表,那么您已经错过了一些有关数据库设计的基础知识。在关系数据库中,表和列的集合应该是常量。它们可能会随着新版本的安装而改变,但不会在运行时更改。
修改强>
在SQL Server中,我会使用触发器来源表(FOR INSERT/UPDATE/DELETE
)并使用Dynamic-SQL
我可以完全达到你想要的效果,但我认为这是 madness 。
如果你想要这个路径,请检查MySQL是否支持相同的。