当前位置:  开发笔记 > 编程语言 > 正文

在phpMyAdmin中消失外键

如何解决《在phpMyAdmin中消失外键》经验,为你挑选了2个好方法。

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

CREATE TABLE `onlineorder` (
  `receiptid` varchar(10) NOT NULL default '',
  `delivereddate` date default NULL,
  `cid` int(10) NOT NULL,
  `card#` int(10) default NULL,
  `expire` date default NULL,
  PRIMARY KEY  (`receiptid`),
  FOREIGN KEY (receiptid) REFERENCES purchase
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

但是,在创建它之后,我进入phpMyAdmin并导出表.似乎外键约束已经消失.

CREATE TABLE `onlineorder` (
  `receiptid` varchar(10) NOT NULL default '',
  `delivereddate` date default NULL,
  `cid` int(10) NOT NULL,
  `card#` int(10) default NULL,
  `expire` date default NULL,
  PRIMARY KEY  (`receiptid`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

phpMyAdmin是摆脱外键还是我在这里做错了什么?



1> activout.se..:

您需要使用InnoDB引擎来获取外键.

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



2> Bill Karwin..:

使用MyISAM存储引擎定义表时,它接受FOREIGN KEY约束,但它会以静默方式将它们抛弃.它解析它们,但不将约束存储在表元数据中,并且随后不能强制执行约束.当你要求查看数据库关于表定义的想法时,它对你所知道的约束一无所知.

CHECK约束也会发生同样的事情(无论存储引擎如何); 它解析语法并接受它,但后来忽略它.

恕我直言,这对MySQL产品来说是一件可怕的事情.它接受标准SQL而没有错误,让您觉得它将以标准方式支持约束.但事实并非如此!甚至没有SHOW WARNINGS透露MySQL已经忽略了约束.

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


好吧我明白了.在关系视图下,我在内部关系列中添加了foriegn键.我的错.它应该输入下一栏.
推荐阅读
放ch养奶牛
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有