【问题标题】:MySql/Cloudbees VARCHAR as ForeignKeyMySql/Cloudbees VARCHAR 作为 ForeignKey
【发布时间】:2014-02-16 13:44:37
【问题描述】:

我在获取 VARCHAR 列上的外键时遇到了困难。

理想情况下,我希望将其作为复合 FK(从我添加它的尝试中可以看出)。

在本地,在 MySQL 5.6 上运行此脚本,我收到错误 #1215。 在 CloudBees 上运行脚本时,我得到 err 150

我在这里看到了关于数据类型完全相同的其他问题,我已经验证了这一点,正如您从脚本中看到的那样。

/* Start of REGION table */

CREATE TABLE REGION (
  ID INTEGER NOT NULL AUTO_INCREMENT,           /* Unique Identifier */
  RORDER INTEGER,                             /* Order to be displayed by (currently unused) */
  LANG VARCHAR(3) DEFAULT 'en' ,                  /* Language of this entry */
  NAME VARCHAR(30) NOT NULL,                    /* Region Name */
  DESCR VARCHAR(50) DEFAULT '' NOT NULL,    /* Region Desc */

  ACTIVE INTEGER DEFAULT '1' NOT NULL,      /* Is item active or not */
  CDATE TIMESTAMP DEFAULT 0,                  /* Create Date */
  MODDATE TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,              /* Last Update Date */
  INSUSER VARCHAR(20) DEFAULT 'SYSTEM' NOT NULL,                                    /* User that inserted this entry */
  MODUSER VARCHAR(20),                            /* User that last modified this entry */

  PRIMARY KEY(id)
) engine InnoDB;

COMMIT;

ALTER TABLE REGION ADD CONSTRAINT UNIQUE (LANG, NAME);

/* End of REGION table */

/* Start of LOCATION table */

CREATE TABLE LOCATION (
  ID INTEGER NOT NULL AUTO_INCREMENT,           /* Unique Identifier */
  REGIONNAME VARCHAR(30) NOT NULL,              /* FK - REGION.ID */
  LORDER INTEGER,                               /* Order to be displayed by (currently unused) */
  NAME VARCHAR(30) DEFAULT '' NOT NULL,     /* Location Name (FK Key) */
  LANG VARCHAR(3) DEFAULT 'en' ,                  /* Language of this entry */
  DESCR VARCHAR(50) DEFAULT '' NOT NULL,    /* Location Desc */

  ACTIVE INTEGER DEFAULT '1' NOT NULL,      /* Is item active or not */
  CDATE TIMESTAMP DEFAULT 0,                  /* Create Date */
  MODDATE TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,              /* Last Update Date */
  INSUSER VARCHAR(20) DEFAULT 'SYSTEM' NOT NULL,                                    /* User that inserted this entry */
  MODUSER VARCHAR(20),                            /* User that last modified this entry */

  PRIMARY KEY(id)
) engine InnoDB;

ALTER TABLE LOCATION ADD CONSTRAINT FK_LOCATION_REGION FOREIGN KEY (REGIONNAME, LANG) REFERENCES REGION(NAME, LANG) ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE LOCATION ADD CONSTRAINT UNIQUE (LANG, NAME);

COMMIT;

/* End of LOCATION table */

【问题讨论】:

  • 糟糕!我忘了更新 /* 评论 */ 关于什么是外键字段 ... / FK - REGION.ID / 现在应该读取 / 等待 stackoverflow 用户的响应 /

标签: mysql foreign-keys varchar cloudbees composite-key


【解决方案1】:

它需要 REGION 表中列的索引。

解决方案:

在 REGION 创建之后,LOCATION 创建之前,添加:

CREATE INDEX REG_NAME_LANG ON REGION (NAME, LANG);

【讨论】:

    猜你喜欢
    • 2018-03-31
    • 1970-01-01
    • 1970-01-01
    • 2010-11-20
    • 2020-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多