在phpMyAdmin中消失外键

Ste*_*eve 6 mysql foreign-keys phpmyadmin

我在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是摆脱外键还是我在这里做错了什么?

Bil*_*win 6

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

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

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

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

  • 好吧我明白了.在关系视图下,我在内部关系列中添加了foriegn键.我的错.它应该输入下一栏. (2认同)