2016-01-13 111 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`) 
);