2015-05-21 121 views
1

我患有与其他人在此处相同的“无法添加外键约束”。错误“无法添加外键约束”

client_partners包含用户之间的关系。创建client_partners时会引发错误。

我已经检查了users.id具有相同类型的比client_partners.clientidclient_partners.partneridINT UNSIGNED NOT NULL

配置选项包括:

SET @[email protected]@UNIQUE_CHECKS, UNIQUE_CHECKS=0; 
SET @[email protected]@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0; 
SET @[email protected]@SQL_MODE, SQL_MODE='TRADITIONAL,ALLOW_INVALID_DATES'; 

用户表定义:

-- ----------------------------------------------------- 
-- Table `users` 
-- ----------------------------------------------------- 
DROP TABLE IF EXISTS `users` ; 

CREATE TABLE IF NOT EXISTS `users` (
    `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, 
    `username` VARCHAR(50) NOT NULL, 
    `password` VARCHAR(200) NOT NULL, 
    `salt` VARCHAR(100) NULL, 
    `firstname` VARCHAR(50) NOT NULL, 
    `lastname` VARCHAR(50) NOT NULL, 
    `email` VARCHAR(50) NOT NULL, 
    `role` VARCHAR(10) NOT NULL DEFAULT 'supplier', 
    `destination` VARCHAR(10) NULL, 
    `supplierId` INT UNSIGNED NULL, 
    `created` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, 
    `updated` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, 
    PRIMARY KEY (`id`), 
    UNIQUE INDEX `username_UNIQUE` (`username` ASC), 
    INDEX `fk_users_suppliers_idx` (`supplierId` ASC), 
    INDEX `fk_users_roles_idx` (`role` ASC), 
    INDEX `fk_users_destinations1_idx` (`destination` ASC), 
    CONSTRAINT `fk_users_suppliers` 
    FOREIGN KEY (`supplierId`) 
    REFERENCES `suppliers` (`id`) 
    ON DELETE NO ACTION 
    ON UPDATE NO ACTION, 
    CONSTRAINT `fk_users_roles` 
    FOREIGN KEY (`role`) 
    REFERENCES `roles` (`id`) 
    ON DELETE NO ACTION 
    ON UPDATE NO ACTION, 
    CONSTRAINT `fk_users_destinations1` 
    FOREIGN KEY (`destination`) 
    REFERENCES `destinations` (`id`) 
    ON DELETE NO ACTION 
    ON UPDATE NO ACTION) 
ENGINE = InnoDB 

Client_partners表定义:

-- ----------------------------------------------------- 
-- Table `client_partners` 
-- ----------------------------------------------------- 
DROP TABLE IF EXISTS `client_partners` ; 

CREATE TABLE IF NOT EXISTS `client_partners` (
    `clientid` INT UNSIGNED NOT NULL, 
    `partnerid` INT UNSIGNED NOT NULL, 
    PRIMARY KEY (`clientid`, `partnerid`), 
    CONSTRAINT `fk_client_partners_1` 
    FOREIGN KEY (`clientid` , `partnerid`) 
    REFERENCES `users` (`id` , `id`) 
    ON DELETE NO ACTION 
    ON UPDATE NO ACTION) 
ENGINE = InnoDB; 

的数据类型(除了自动增量)是相同的。引用表(用户)首先被创建。我错过了什么?

+0

它仍然不清楚你的问题;哪个表失败? – Mihai

+0

创建表client_partners时引发错误。感谢您指出它,我也编辑了这个问题。 –

+1

你不能在一个复合外键中有相同的列,也许你想要每个列有两个外键'CONSTRAINT'fk_client_partners_1' FOREIGN KEY('clientid') REFERENCES'users'('id')'same for partnerid just更改约束名称 – Mihai

回答

1
CONSTRAINT `fk_client_partners_1`  
FOREIGN KEY (`clientid` , `partnerid`) 
REFERENCES `users` (`id` , `id`) 

这里你引用表的idusers twice..it是不可能的。尝试删除一个并创建

如果要引用另一个外键,则需要使用其他名称创建它。

+0

谢谢,萨楚。正如Mihai所说,这不是做这件事的方法:我必须为第二个关键点创建另一个约束。 –