2016-01-13 325 views
2

我设置了一些外键,但是phpMyAdmin不允许我创建多个外键。下面是表中的问题:无法创建外键id MySQL:列上缺少索引

Groups Table 

id 
name 
address 


Tasks Table 

id 
group_id 
name 

我需要Tasks Tablegroup_id外键,但是当我尝试它来创建提供了以下错误:Missing index on column(s)。如果我在group_id上添加一个唯一的约束条件,那么我可以创建外键,但该关系会变成One to One,这不是预期的结果。

以下是表创建语句:

CREATE TABLE IF NOT EXISTS `groups` (
    `id` int(11) NOT NULL, 
    `name` varchar(256) NOT NULL, 
    `address` varchar(256) NOT NULL, 
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=latin1; 

ALTER TABLE `groups` 
    ADD PRIMARY KEY (`id`), ADD UNIQUE KEY `id` (`id`), ADD UNIQUE KEY `id_2` (`id`); 


CREATE TABLE IF NOT EXISTS `tasks` (
    `id` int(11) NOT NULL, 
    `group_id` int(11) NOT NULL, 
    `name` varchar(256) NOT NULL, 
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=latin1; 

ALTER TABLE `fixed_tasks` 
    ADD PRIMARY KEY (`id`), ADD UNIQUE KEY `id` (`id`); 

任何帮助或指导是非常赞赏。

+0

显示为外键 – Jens

+0

表创建statment和CREATE语句因此,创建一个非唯一索引呢? – eggyal

+0

我刚刚更新了表创建语句的问题。我总是在phpMyAdmin中使用设计器视图来创建关系,所以我没有针对外键的声明。 – WpDoe

回答

2

下面的代码可以创建两个表相对外键:

CREATE TABLE `Groups` (
    `id` INT NOT NULL, 
    `name` VARCHAR(45) NULL, 
    `address` VARCHAR(45) NULL, 
    PRIMARY KEY (`id`) 
); 


CREATE TABLE `Tasks` (
    `id` INT NOT NULL, 
    `group_id` INT NULL, 
    `name` VARCHAR(45) NULL, 
    PRIMARY KEY (`id`), 
    CONSTRAINT `group_id` 
    FOREIGN KEY (`group_id`) 
    REFERENCES `Groups` (`id`) 
);