MySql/Cloudbees VARCHAR как ForeignKey

У меня возникают трудности с получением внешнего ключа для столбца 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 */

person Ken Alton    schedule 16.02.2014    source источник
comment
Ой! Я забыл обновить /* комментарий */ о том, что было полем внешнего ключа ... / FK - REGION.ID / теперь следует читать / ожидание ответа от пользователей stackoverflow /   -  person Ken Alton    schedule 17.02.2014


Ответы (1)


Требовался индекс для столбцов в таблице REGION.

Решение:

После создания REGION, но до создания LOCATION добавьте:

CREATE INDEX REG_NAME_LANG ON REGION (NAME, LANG);
person Ken Alton    schedule 20.02.2014