扭转两个表之间的1:多关系

时间:2010-11-15 21:36:57

标签: sql foreign-key-relationship

我有两个MySQL表AB。表A的成员ref是对B.id的ForeignKey引用。这使得BA之间存在1:多的关联。

这已经生产了几个星期,但我现在正在为我的代码添加更多功能,并意识到我的原始映射错误。我需要BA之间的多个:1关系。也就是说,B.ref应指向A.id,而不是相反。直到现在它才成为问题,因为到目前为止它都是1:1的映射。如何将数据迁移到新架构?

我猜:

  1. ALTER TABLE B ADD COLUMN ref INTEGER CONSTRAINT FOREIGN KEY (A.id) - 首先添加列
  2. 运行等效于“for row in A: row.ref.ref = row
  3. 的SQL
  4. ALTER TABLE A DROP COLUMN ref
  5. 尝试在SQLAlchemy中执行此操作失败,并出现循环引用错误。我需要在SQL中执行此操作,但不熟悉必要的SELECT + UPDATE语法。帮助

2 个答案:

答案 0 :(得分:2)

对于第2步:

update b, a
    set b.ref = a.id
    where a.ref = b.id

答案 1 :(得分:0)

只需添加外键约束作为第四步,创建列时就不需要它了。