【发布时间】:2012-03-05 09:58:35
【问题描述】:
我正在重新组织我们的 MySQL 数据库,将 MyISAM 表更改为 InnoDB 并设置外键,我想知道是否还有一种方法可以链接列设置?
例子:
在我的用户帐户表中,用户列是 varchar(20)。在我的所有其他表中,另一个用户列记录谁输入了该记录,也是 varchar(20)。
我想知道如何链接所有这些相关的用户列,例如如果我必须将 useraccount.user 列更改为 varchar(40),我可以将所有其他表用户列设置为级联到 varchar(40 ) 也一样?
我确信我可以使用信息模式来编写一个 PHP 脚本来执行此操作,但如果可能的话,我宁愿让数据库在没有外部帮助的情况下自行修改。这可以通过对 username.user 列的架构记录的触发器来完成吗?如果是这样,我是否还可以触发以在添加了“用户”列的任何新表上自动添加外键约束?
似乎应该是可能的,但我承认我对 MySQL 的了解不够深入,无法搞砸模式表;)
编辑:这是我为查找不匹配的表而编写的一些示例 SQL
SELECT TABLE_NAME, COLUMN_TYPE
FROM information_schema.COLUMNS
WHERE TABLE_NAME != 'user_accounts'
AND COLUMN_NAME = 'user'
AND COLUMN_TYPE != (
SELECT COLUMN_TYPE
FROM information_schema.COLUMNS
WHERE TABLE_NAME = 'user_accounts'
AND COLUMN_NAME = 'user'
)
理想情况下,我想使用此 information_schema 结果循环遍历上述结果的每一行并更改表以更改列类型以匹配 user_account.user 的列类型
【问题讨论】:
-
如果我没有误会的话……你考虑过使用关系结构吗?因此,除了为保存所有用户而创建的表之外,每个表中的“用户”都将成为
users表中唯一用户的快捷方式。 -
不同表的用户列总是同名吗?
-
inhan,我已经有了用外键链接的表。我不关心用户值本身,而是他们所在的表的用户列设置。cctan,他们之前有“用户名”和“Last_Changed_User”,但我正在将它们全部重命名为“用户” " 所以是的,他们今后都会被命名为相同的