2015-09-06 90 views
0

主键有什么办法,我可以强迫我的MySQL数据库,以便与名称table_xyz新表的创建,只有在另一个表存在与table_xyz记录?创建一个表是谁的名字必须是另一个表

基本上我想我的表名是一个外键。

例如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

这听起来对我来说很糟糕的设计,但您可以尝试使用源表的触发器创建/更新/删除新表。 – lad2025

+1

我建议使用与名称不同的标识符,为贷款表创建一个不像名称那样可修改的唯一标识符。 – krato

回答

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我可以实现你想要什么,但我仍然认为这是疯狂

如果你想去这个路径检查MySQL是否支持相同的。

+0

谢谢你的回答。我更新了我的内容以显示创建新表的目的,其中的名称必须存在于另一个表中。 – besciualex

相关问题