【问题标题】:mysql. can't create schema. I get this error: ERROR 1005 (HY000): (errno: 150)mysql。无法创建架构。我收到此错误:错误 1005 (HY000): (errno: 150)
【发布时间】:2015-07-23 04:24:12
【问题描述】:

我正在尝试创建一个简单的架构,见下文。 但由于某种原因,我收到了这个奇怪的 150 错误。 我已经对架构进行了三次检查,但我真的没有看到问题所在。 你能澄清我做错了什么吗?

DROP DATABASE IF EXISTS test222;
CREATE DATABASE IF NOT EXISTS test222 CHARSET utf8mb4 COLLATE utf8mb4_unicode_ci;
USE test222;

CREATE TABLE im_savegroups (
    id INT UNSIGNED NOT NULL AUTO_INCREMENT,
    sgcode VARCHAR(20) NOT NULL,
    PRIMARY KEY (id),
    UNIQUE KEY (sgcode)
) ENGINE=InnoDB CHARSET utf8mb4 COLLATE utf8mb4_unicode_ci;

CREATE TABLE im_savespecs (
    id INT UNSIGNED NOT NULL AUTO_INCREMENT,
    fk_im_savegroups_sgcode VARCHAR(20) NOT NULL,
    sscode VARCHAR(20) NOT NULL,
    max_w INT UNSIGNED,
    max_h INT UNSIGNED,
    ratio_x INT UNSIGNED,
    ratio_y INT UNSIGNED,
    quality INT UNSIGNED,
    format VARCHAR(10),
    rel_dir VARCHAR(400),
    is_retina TINYINT UNSIGNED DEFAULT 0,
    is_preferred TINYINT UNSIGNED DEFAULT 0,
    PRIMARY KEY (id),
    FOREIGN KEY (fk_im_savegroups_sgcode) REFERENCES im_savegroups (sgcode) ON DELETE CASCADE ON UPDATE CASCADE,
    UNIQUE KEY (sscode)
) ENGINE=InnoDB CHARSET utf8mb4 COLLATE utf8mb4_unicode_ci;

CREATE TABLE im_originals (
    id INT UNSIGNED NOT NULL AUTO_INCREMENT,
    fk_im_savespecs_sscode VARCHAR(20) NOT NULL,
    name VARCHAR(255),
    alt VARCHAR(180),
    filename VARCHAR(64),
    caption VARCHAR(1024),
    credit VARCHAR(1024),
    expires_at DATETIME,
    created_at DATETIME,
    updated_at DATETIME,
    PRIMARY KEY (id),
    FOREIGN KEY (fk_im_savespecs_sscode) REFERENCES im_savespecs (sscode) ON DELETE SET NULL ON UPDATE CASCADE
) ENGINE=InnoDB CHARSET utf8mb4 COLLATE utf8mb4_unicode_ci;

这是我得到的实际错误:

错误 1005 (HY000): 无法创建表 'test222.im_originals' (errno: 150)

【问题讨论】:

    标签: mysql schema ddl


    【解决方案1】:

    删除这部分:

    ON DELETE SET NULL
    

    从行:

    FOREIGN KEY (fk_im_savespecs_sscode) REFERENCES im_savespecs (sscode) 
    ON DELETE SET NULL ON UPDATE CASCADE
    

    CREATE TABLE im_originals 解决了我的问题。

    字段fk_im_savespecs_sscodeNOT NULL,所以规则ON DELETE SET NULL 在这种情况下似乎没有意义。

    【讨论】:

      猜你喜欢
      • 2017-04-09
      • 2016-10-12
      • 1970-01-01
      • 2011-02-17
      • 1970-01-01
      • 2020-08-07
      • 1970-01-01
      • 2013-07-22
      • 1970-01-01
      相关资源
      最近更新 更多