创建一个表,其名称必须是另一个表中的主键

时间:2015-09-06 09:36:56

标签: mysql

有没有办法可以强制我的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脚本完成。

我需要知道哪个是最好的选择,以及为什么。谢谢!

1 个答案:

答案 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是否支持相同的。