phpMyAdmin中的外键消失

scyqe7ek  于 2022-11-09  发布在  PHP
关注(0)|答案(4)|浏览(114)

我正在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是否删除了外键,或者我在这里做错了什么?

vi4fp9gy

vi4fp9gy2#

当您使用MyISAM储存引擎定义数据表时,它会接受FOREIGN KEY条件约束,但会自动将它们舍弃。它会剖析这些条件约束,但不会将条件约束储存在数据表中继数据中,因此无法胁迫执行条件约束。当您要求查看数据库的数据表定义概念时,它对该条件约束一无所知,您已经发现了这一点。
同样的事情发生在CHECK约束上(不管存储引擎如何);它会解析语法并接受它,但随后会忽略它。
恕我直言,这对MySQL产品来说是一件糟糕的事情。它接受标准的SQL而不出错,给你留下的印象是它将以标准的方式支持约束。但事实并非如此!甚至SHOW WARNINGS都没有揭示MySQL忽略了约束。
如果您使用InnoDB存储引擎,它会注意外键约束。
更新:InnoDB自8.0.16起支持检查约束,发布日期2019-04-25。

j2cgzkjk

j2cgzkjk3#

此外,PHPMyAdmin会移除撷取的所有CONSTRAINTS,直到建立所有数据表并插入数据为止。如果您使用作为PHPMySql来为您倾印数据表,您会在档案的结尾找到UPDATE数据表区段,其中包含所有ADD CONSTRAINT项目。

bkkx9g8r

bkkx9g8r4#

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

  • internal:当你用phpmyadmin设计器设置约束时,例如存储为internal的约束,它将不包含在导出中。
  • innoDB:这些约束包括在导出检查链接的视频有关它

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

相关问题