VARCHAR 字段上的 MySQL Errno 150

标签 mysql foreign-keys create-table

我在创建下表时收到 errno 150。前两个工作正常,但第三个抛出此错误:

ERROR 1005 (HY000): Can't create table 'test2.exercise_type_exercise_groups' (errno: 150)

有什么想法吗?我检查了所有键列的类型、长度、字符集和排序规则是否相同...还有什么问题?

在此先感谢您的帮助!

CREATE TABLE `exercise_groups` (
    `id` VARCHAR(255) NOT NULL,
    PRIMARY KEY `pk_exercise_groups` (`id`)
) ENGINE=InnoDB CHARSET=utf8 COLLATE=utf8_general_ci;

CREATE TABLE `exercise_types` (
    `id` VARCHAR(255) NOT NULL,
    PRIMARY KEY `pk_exercise_types` (`id`)
) ENGINE=InnoDB CHARSET=utf8 COLLATE=utf8_general_ci;

CREATE TABLE `exercise_type_exercise_groups` (
    `exercise_type` VARCHAR(255) NOT NULL,
    `exercise_group` VARCHAR(255) NOT NULL,
    `link_type` ENUM('primary', 'ancillary'),
    PRIMARY KEY `pk_exercise_type_exercise_groups` (`exercise_type`, `exercise_group`),
    CONSTRAINT `fk_exercise_type_exercise_groups_exercise_type` 
        FOREIGN KEY (`exercise_type`) 
        REFERENCES `exercise_type` (`id`),
    CONSTRAINT `fk_exercise_type_exercise_groups_exercise_group` 
        FOREIGN KEY (`exercise_group`) 
        REFERENCES `exercise_group` (`id`)
) ENGINE=InnoDB CHARSET=utf8 COLLATE=utf8_general_ci;

最佳答案

errno 150 是一个一般的外键错误,几乎没有帮助。出现这种情况至少有四个原因:

  1. 列类型不匹配
  2. 该列不是引用表的键,或者引用的列/表不存在(这是您的问题;您拼错了其他表)
  3. 任何表都不是 InnoDB
  4. 您正在尝试删除不存在的外键。

关于VARCHAR 字段上的 MySQL Errno 150,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14927510/

相关文章:

MySQL自动增量每条记录增加超过+1

mysql - 向数据库中的所有用户发送消息的方法?

javascript - SQL SELECT 和 UPDATE 语法

mysql - 在vb.net中同步两个mysql数据库

MySQL外键级联删除不起作用,完全难倒

postgresql - Go GORM many2many问题

C# Mysql 创建表名带空格

php - 当另一个查询成功时执行另一个查询

mysql - 一对一关系(1 :1)

sql-server - 带有 FOREIGN KEY REFERENCES 的错误消息