【问题标题】:How to check if a foreign key is created如何检查是否创建了外键
【发布时间】:2012-03-05 09:35:26
【问题描述】:

我已经使用 NaviCat(一个 MySQL 应用程序)创建了一个外键,但是在我创建它的那一刻,它就从外键列表中消失了,并添加了一个新的索引。这是否意味着出现了问题,或者这是否正常发生?

我曾尝试使用 information_schema How to check if a column is already a foreign key?,但结果为 Unknown table 'REFERENTIAL_CONSTRAINTS' in information_schema。查询是否可能是针对 MsSQL 而与 MySQL 不同的?

【问题讨论】:

    标签: mysql foreign-keys navicat


    【解决方案1】:
    1. 您可能正在创建外键的表是 MyISAM。转到 Table Design 视图并转到 Options 选项卡以将 table Engine 更改为 InnoDB

    2. 您可以按照http://kevin.vanzonneveld.net/techblog/article/convert_all_tables_to_innodb_in_one_go/中的步骤将所有表更改为 InnoDB

    3. http://dev.mysql.com/doc/refman/5.5/en/innodb-default-se.html的 MySQL 配置文件(通常是 my.cnf)的 [mysqld] 部分添加 default-storage-engine=innodb

    毕竟 MySQL 5.5 没有缺陷 InnoDB 是默认的存储引擎。

    【讨论】:

    • 是否可以一次对所有表执行此操作?或者将引擎默认设置为 InnoDB?还是有缺陷?
    • @Webscabbler 没有缺陷,但有时 MyISAM 可以比 InnoDB 更快。例如,MyISAM 处理非阻塞和非事务并发插入。此外,它在主键上没有集群化(也可能是劣势)。等等。因此,可能存在一些性能问题,具体取决于您的表工作量。
    【解决方案2】:

    执行

    SHOW CREATE TABLE myTable;
    

    然后检查

    ENGINE = InnoDB
    

    如果这是真的,您可以使用外键。检查它是否包含这样的内容:

    FOREIGN KEY (customer_id)  REFERENCES customer(id)
    

    希望有帮助!

    【讨论】:

      猜你喜欢
      • 2020-01-18
      • 1970-01-01
      • 2018-12-26
      • 1970-01-01
      • 2023-03-03
      • 2012-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多