mysql错误: 1215 Cannot add foreign key constraint[ foreign keys same type, innodb]

标签 mysql sql types

我需要一双新的眼睛来看看我到底做错了什么。

CREATE TABLE IF NOT EXISTS `spring_normalize`.`users` (
  `username` VARCHAR(60) NOT NULL,
  `password` VARCHAR(80) NULL,
  `authority` VARCHAR(45) NULL,
  `name` VARCHAR(100) NULL,
  `enabled` TINYINT(1) NULL,
  `email` VARCHAR(60) NULL,
PRIMARY KEY (`username`))
ENGINE = InnoDB;

CREATE TABLE IF NOT EXISTS `spring_normalize`.`offers` (
  `id` INT NOT NULL AUTO_INCREMENT,
  `text` VARCHAR(100) NULL,
  `users_username` VARCHAR(60) NOT NULL,
PRIMARY KEY (`id`, `users_username`),
INDEX `fk_offers_users_idx` (`users_username` ASC),
CONSTRAINT `fk_offers_users`
  FOREIGN KEY (`users_username`)
  REFERENCES `spring_normalize`.`users` (`username`)
  ON DELETE NO ACTION
  ON UPDATE NO ACTION)
ENGINE = InnoDB;

来自其他有同样问题的人:

  1. Db 是 InnoDB 吗?是的
  2. 所有表都是 InnoDB 吗?是的
  3. 引用表中是否存在唯一索引?是的
  4. 引用列和引用列是否完全属于同一类型?是的

质疑我做错了什么?提前致谢!

最佳答案

正如其他人在评论中所述,您的查询是正确的

您可以尝试一些事情:


首先选择您的数据库并将其从您的 2 create table

中删除
USE `spring_normalize`;


CREATE TABLE IF NOT EXISTS `users` (
  `username` VARCHAR(60) NOT NULL,
  `password` VARCHAR(80) NULL,
  `authority` VARCHAR(45) NULL,
  `name` VARCHAR(100) NULL,
  `enabled` TINYINT(1) NULL,
  `email` VARCHAR(60) NULL,
PRIMARY KEY (`username`))
ENGINE = InnoDB;

CREATE TABLE IF NOT EXISTS `offers` (
  `id` INT NOT NULL AUTO_INCREMENT,
  `text` VARCHAR(100) NULL,
  `users_username` VARCHAR(60) NOT NULL,
PRIMARY KEY (`id`, `users_username`),
INDEX `fk_offers_users_idx` (`users_username` ASC),
CONSTRAINT `fk_offers_users`
  FOREIGN KEY (`users_username`)
  REFERENCES `users` (`username`)
  ON DELETE NO ACTION
  ON UPDATE NO ACTION)
ENGINE = InnoDB;

尝试在创建表之前指定它,以防引擎会(奇怪地)尝试在 users 之前创建表 offers:

-- Do not check foreign key constraints
SET FOREIGN_KEY_CHECKS = 0;

最后,如果没有解决问题,请在收到错误后执行此操作,它将为您提供更多信息

SHOW ENGINE INNODB STATUS;

关于mysql错误: 1215 Cannot add foreign key constraint[ foreign keys same type, innodb],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36400166/

相关文章:

mysql - SQL根据where row id将内容从一个表移动到另一个表

SQL-如何检查项目是否在记录的列表中

mysql - 从双连接表中选择最大值

swift - swift 中 any 类型和泛型类型的区别

带有 $ 的 Haskell 偏函数应用程序

php - 如何测试 8 个字段中是否只有 1 个等于 1

java - 在Mysql或Oracle数据库中加载一个大的json文件

mysql - mysql 字符集和 GWT 的问题

MYSQL统计每类item的颜色数

c - 在宏(或其他东西)中指定 int 大小