首页 > 解决方案 > MySQL Workbench 外键约束的格式不正确

问题描述

我一直在摆弄 MySQL Workbench 作为一个学习项目,并试图用外键创建一个表。Keys 引用了我数据库中的其他表。被引用的 ID 都是相同类型的“INT(11)”。所有 ID 都是主键并且不为空。

但是我仍然无法转发工程我的数据库,并且正在引发以下错误:“错误:错误 1005:无法创建表testcrmrole_user(errno:150“外键约束格式不正确”)”


    -- Table `testcrm`.`role_user`
    -- -----------------------------------------------------
    CREATE TABLE IF NOT EXISTS `testcrm`.`role_user` (
      `role_id` INT(11) UNSIGNED NOT NULL,
      `user_id` INT(11) UNSIGNED NOT NULL,
      PRIMARY KEY (`role_id`, `user_id`),
      INDEX `user_id_idx` (`user_id` ASC),
      CONSTRAINT `role_user_role_id`
        FOREIGN KEY (`role_id`)
        REFERENCES `testcrm`.`roles` (`id`)
        ON DELETE CASCADE
        ON UPDATE RESTRICT,
      CONSTRAINT `role_user_user_id`
        FOREIGN KEY (`user_id`)
        REFERENCES `testcrm`.`users` (`id`)
        ON DELETE CASCADE
        ON UPDATE RESTRICT)
    ENGINE = InnoDB

编辑:这些是我的用户和角色表:

-- -----------------------------------------------------
-- Table `testcrm`.`roles`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `testcrm`.`roles` (
`id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
`name` VARCHAR(191) NULL DEFAULT NULL,
PRIMARY KEY (`id`))
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8
COLLATE = utf8_unicode_ci;


-- -----------------------------------------------------
-- Table `testcrm`.`users`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `testcrm`.`users` (
`id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
`name` VARCHAR(191) NOT NULL,
`email` VARCHAR(191) NOT NULL,
`email_verified_at` TIMESTAMP NULL DEFAULT NULL,
`password` VARCHAR(191) NOT NULL,
`remember_token` VARCHAR(100) NULL DEFAULT NULL,
`created_at` TIMESTAMP NULL DEFAULT NULL,
`updated_at` TIMESTAMP NULL DEFAULT NULL,
UNIQUE INDEX `users_email_unique` (`email` ASC),
PRIMARY KEY (`id`))
ENGINE = InnoDB
AUTO_INCREMENT = 2
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci;

标签: mysqldatabasemysql-workbench

解决方案


推荐阅读