MySQL:更改外键列 - 但保持数据引用不变

时间:2014-11-11 14:43:19

标签: mysql foreign-keys

我有一个关于更改外键引用和保持数据引用不变的问题。

我有一个包含注释的表,这些注释由用户创建,用户存储在单独的表中,并通过外键从注释表中引用。所以我的数据库中已经有很多数据,我不能放弃。

起初,我创建了自己的登录系统,每个用户都有一个唯一的ID(他们的用户名 - 我知道,过去我是一个冲洗,并没有使用ID的整数),这是引用的ID,并且现在我已经改变它,以便所有用户都需要Facebook来使用该页面。这就是我的问题所在 - 我希望将注释外键更改为Facebook ID而不是userName,但我不想放弃注释和用户之间的数据关系。

我有以下表格及其列的设置:

CommentsTable: [commentID] [comment] [UsersTable_userName]

UsersTable: [userID] [(varchar) userName] [(int) facebookID]

我想要的是这个:

CommentsTable: [commentID] [comment] [UsersTable_facebookID]

UsersTable: [userID] [(varchar) userName] [(int) facebookID]

我尝试在commentsTable中创建一个额外的外键 - 但这并没有保持关系。

我也无法直接将commentsTable中的指针更改为指向FacebookID,因为一个是varchar而另一个是int。

对此有经验的人可以提供帮助或指点吗?

1 个答案:

答案 0 :(得分:0)

我想出了一个解决方法: 使用http://dev.mysql.com/doc/refman/5.0/en/update.html

UPDATE `Table A`,`Table B`
SET `Table A`.`text`=concat_ws('',`Table A`.`text`,`Table B`.`B-num`," from ",`Table B`.`date`,'/')
WHERE `Table A`.`A-num` = `Table B`.`A-num`

所以我在评论表中为Facebook ID做了一个专栏,使用了上面显示的UPDATE查询(当然输入正确的名称)。

之后我删除了commentsTable中的旧[UsersTable_userName]列,并使我的查询指向了FacebookID列。