Mysql

在一個語句中引用單個表的多個外鍵

  • January 26, 2017

我寫了以下聲明:

CREATE TABLE ORDEN (
   `numero` INT UNSIGNED ZEROFILL NOT NULL,
   `fecha` DATE NOT NULL,
   `cliente` INT(6) UNSIGNED NOT NULL,
   `nombre_cliente` VARCHAR(64) NOT NULL,
   `direccion_cliente` VARCHAR(64) NOT NULL,
   `email_cliente` VARCHAR(64),

   /* Se utiliza ON DELETE NO ACTION porque probablemente (al igual que cualquier otro documento del mismo tipo) las órdenes se quieran conservar */
   FOREIGN KEY `fk_ORDEN_CLIENTE_ID`(`cliente`) REFERENCES CLIENTE(`id`) ON DELETE NO ACTION ON UPDATE CASCADE,
   FOREIGN KEY `fk_ORDEN_CLIENTE_NOMBRE`(`nombre_cliente`) REFERENCES CLIENTE(`nombre`) ON DELETE NO ACTION ON UPDATE CASCADE,
   FOREIGN KEY `fk_ORDEN_CLIENTE_DIRECCION`(`direccion_cliente`) REFERENCES CLIENTE(`direccion`) ON DELETE NO ACTION ON UPDATE CASCADE,
   FOREIGN KEY `fk_ORDEN_CLIENTE_EMAIL`(`email_cliente`) REFERENCES CLIENTE(`email`) ON DELETE NO ACTION ON UPDATE CASCADE,
   PRIMARY KEY(`numero`)
);

問題是我在嘗試執行語句時遇到了這個錯誤:

錯誤程式碼:1215。無法添加外鍵約束

我一直在想,可能不允許在一個語句中使用外鍵引用單個表中的許多列。

這也是CLIENTE表的定義:

CREATE TABLE CLIENTE (
   `id` INT(6) UNSIGNED ZEROFILL NOT NULL,
   `email` VARCHAR(64), /* Dirección electrónica */
   `nombre` VARCHAR(64) NOT NULL,
   `direccion` VARCHAR(64) NOT NULL,

   PRIMARY KEY(`id`),
   UNIQUE(`direccion`)
);

我該如何解決我的問題?我一直在尋找解決方案,但沒有成功。

外鍵可以參考父表的唯一鍵或主鍵添加到子表中。列名和電子郵件未定義為客戶表中的主鍵或唯一鍵。因此,您無法將 FK 添加到表 ORDEN 中的這些列。

引用自:https://dba.stackexchange.com/questions/161745