错误"无法添加外键约束"

时间:2015-05-21 08:09:36

标签: mysql sql foreign-keys foreign-key-relationship

我遇到了同样的问题"无法添加外键约束"周围的其他人。

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

我已检查 users.id 的类型与 client_partners.clientid client_partners.partnerid 的类型相同: INT UNSIGNED NOT NULL

配置选项包括:

SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET @OLD_SQL_MODE=@@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;

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

1 个答案:

答案 0 :(得分:1)

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

这里你引用了表id的{​​{1}}两次..这是不可能的。尝试删除一个并创建

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

相关问题