【问题标题】:MySql & Sqlalchemy - not all foreign keys visibleMySql 和 Sqlalchemy - 并非所有外键都可见
【发布时间】:2017-12-11 17:54:31
【问题描述】:

MySql Workbench 中我的一张表的外键列表为空。当我尝试添加缺少的 FK 时,我收到此结构的错误:

Executing:
ALTER TABLE <schema>.<table>
ADD INDEX <index_name> (<column_name> ASC);
ALTER TABLE <schema>.<table_name> 
ADD CONSTRAINT <constraint_name>
  FOREIGN KEY (<column_name>)
  REFERENCES <schema>.<ref_table_name> (<ref_column_name>)
  ON DELETE CASCADE
  ON UPDATE CASCADE;

Operation failed: There was an error while applying the SQL script to the database.
ERROR 1452: Cannot add or update a child row: a foreign key constraint fails (<schema>.`#sql-49f_6`, CONSTRAINT <constraint_name> FOREIGN KEY (<column_name>) REFERENCES <ref_table_name> (<ref_column_name>) ON DELETE CASCADE ON UPDATE CASCADE)
SQL Statement:
ALTER TABLE <schema>.<table_name> 
ADD CONSTRAINT <constraint_name>
  FOREIGN KEY (<column_name>)
  REFERENCES <schema>.<ref_table_name> (<ref_column_name>)
  ON DELETE CASCADE
  ON UPDATE CASCADE

显然,我尝试创建的外键似乎已经在数据库中。网络上的一些研究让我相信在某些情况下 MySql Workbench 没有列出所有外键(出于各种原因),这对于我的设置也可能是正确的。因此,我尝试使用此查询列出我尝试修改的表上的所有外键:

SELECT *
FROM
  information_schema.KEY_COLUMN_USAGE
WHERE
  constraint_schema = <schema> AND table_name = <table_name> AND   
  referenced_table_name IS NOT NULL;

结果集和Workbench外键列表一样空……

查看错误消息,我的数据库周围似乎有一个奇怪的表,名为#sql-49f_6。 该表不是我明确创建的。 也就是说,我使用 sqlalchemy 来创建和管理我的数据库,所以这一切都可能是由于 sqlalchemy 模型定义,它看起来像这样:

TableName = Table(<table_name>,
    table_base.metadata,
    Column(
        <column_name_1>, 
        Integer(), 
        ForeignKey('<ref_table_name>.<ref_column_name>', onupdate='CASCADE', ondelete='CASCADE'), 
        nullable=False
    ),
    Column(
        <column_name_2>, 
        Integer(), 
        ForeignKey('<ref_table_name_2>.<ref_column_name_2>', onupdate='CASCADE', ondelete='CASCADE'), 
        nullable=False
    )
)

综上所述,谁能提出解决方案?

最好不用重新创建数据库;因为,我需要维护表中包含的数据。

【问题讨论】:

    标签: mysql sqlalchemy foreign-keys


    【解决方案1】:

    我无法找到上述问题的根源。 在需要解决方案的情况下,我将有问题的表包含的数据暂时离线存储并从头开始重新创建。在这一步中,我还添加了缺少的外键。问题没有持续存在。抱歉,我无法说明最初出了什么问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-03
      • 2014-05-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多