PHPMyAdmin Mysql在<attribute>上创建外键时出错(检查数据类型)

时间:2017-03-10 05:22:13

标签: mysql

我已经阅读了几篇帖子,但无法解决我在phpMyAdmin中创建外键的问题。我有以下两种模式:

CREATE TABLE `verifieduser` (
  `id` int(11) NOT NULL,
  `name` varchar(50) NOT NULL,
  `email` varchar(50) NOT NULL,
  `password` varchar(50) NOT NULL,
  `country` varchar(50) NOT NULL,
  `location` varchar(50) NOT NULL,
  `rname` varchar(50) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

CREATE TABLE `restaurant` (
  `location` varchar(50) NOT NULL,
  `cuisine` varchar(30) NOT NULL,
  `description` varchar(200) NOT NULL,
  `phone` varchar(20) NOT NULL,
  `rname` varchar(50) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

ALTER TABLE `restaurant`
  ADD PRIMARY KEY (`location`,`rname`),
  ADD UNIQUE KEY `phone` (`phone`);

我试图让verifieduser表中的rname成为餐厅表中rname的外键。我不确定为什么它不允许我,因为它具有相同的值,我没有将约束更改为&#34; SET NULL&#34;。

提前致谢。

3 个答案:

答案 0 :(得分:0)

FOREIGN KEY关系需要两个表格,即Parent table&amp; Child table,其中的是UNIQUEPRIMARY KEY类型的父表中的某些列 和子表中相同的匹配类型列。

但在你的情况下,rname varchar(50) NOT NULL is neither UNIQUE nor PRIMARY . So make it UNIQUEPRIMARY,然后重试。

答案 1 :(得分:0)

在上面的查询中,您没有将rname设置为restaurant的主键,我认为这是问题所在。在我看来,id中的列名restaurant应该是主键,而verifieduser中应该有rid作为restaurant的foriegn键

答案 2 :(得分:0)

首先,您需要更改表verifieduser和rname一些键。之后,您将能够将其设为外键。只需运行以下查询。我希望这些对你有用。

ALTER TABLE `verifieduser` ADD PRIMARY KEY(`rname`);

之后添加FOREIGN键

ALTER TABLE `restaurant`  
ADD FOREIGN KEY (`rname1` ) REFERENCES `verifieduser` (`rname` )