【问题标题】:Disappearing Foreign Keys in phpMyAdmin在 phpMyAdmin 中消失的外键
【发布时间】:2010-09-22 17:48:51
【问题描述】:

我正在 mysql 中创建一个新表,并尝试向其中一个字段添加外键约束。

创建表`在线订单`( `receiptid` varchar(10) NOT NULL default '', `delivereddate` 日期默认为 NULL, `cid` int(10) 非空, `card#` int(10) 默认 NULL, `expire` 日期默认为 NULL, 主键(`receiptid`), FOREIGN KEY (receiptid) REFERENCES 购买 ) 引擎=MyISAM 默认字符集=latin1;

但是,在它创建之后,我进入 phpMyAdmin 并导出表。而且好像外键约束已经消失了。

创建表`在线订单`( `receiptid` varchar(10) NOT NULL default '', `delivereddate` 日期默认为 NULL, `cid` int(10) 非空, `card#` int(10) 默认 NULL, `expire` 日期默认为 NULL, 主键(`receiptid`) ) 引擎=MyISAM 默认字符集=latin1;

phpMyAdmin 是去掉外键还是我在这里做错了什么?

【问题讨论】:

    标签: mysql foreign-keys phpmyadmin


    【解决方案1】:

    你需要使用 InnoDB 引擎来拥有外键。

    参考:http://dev.mysql.com/doc/refman/5.0/en/innodb-foreign-key-constraints.html

    【讨论】:

      【解决方案2】:

      当您使用 MyISAM 存储引擎定义表时,它会接受 FOREIGN KEY 约束,但会默默地丢弃它们。它会解析它们,但不会将约束存储在表元数据中,因此无法强制执行约束。当您要求查看数据库对表定义的想法时,它对那个约束一无所知,正如您所发现的那样。

      CHECK 约束也会发生同样的事情(不管存储引擎如何);它解析语法并接受它,然后忽略它。

      恕我直言,这对 MySQL 产品来说是一件可怕的事情。它接受标准 SQL 而没有错误,给您留下的印象是它将以标准方式支持约束。但事实并非如此!甚至SHOW WARNINGS 也没有表明 MySQL 忽略了约束。

      如果您使用 InnoDB 存储引擎,它会注意外键约束。

      【讨论】:

      • 即使使用 innoDB,导出也不包括外键。 (对我来说)
      • 好的,我想通了。在关系视图下,我在内部关系列中添加了外键。我的错。它应该在下一列中输入。
      【解决方案3】:

      此外,PHPMyAdmin 会删除提取任何约束,直到所有表都已创建并已插入数据。如果您使用 PHPMySql 为您转储表格,您会在文件末尾找到一个包含所有 ADD CONSTRAINT 条目的 UPDATE 表格部分。

      【讨论】:

        【解决方案4】:

        使用 phpmyadmin 管理表时有两种类型的约束:

        • internal:当您使用 phpmyadmin 设计器设置约束时,例如存储为内部的约束,将不会包含在导出中。
        • innoDB:这些限制包含在导出中,请查看有关它的链接视频

        [视频:设置外键约束][1]

        【讨论】:

          猜你喜欢
          • 2017-03-11
          • 2017-10-20
          • 2016-07-19
          • 2015-08-22
          • 2010-10-02
          • 2011-03-24
          • 2014-12-03
          相关资源
          最近更新 更多