我的客户表包含nid_c,nama_customer和更多字段..
第二个表我和nopol,nid_c,nama_customer和更多领域有kendaraan ..
我尝试在这张桌子之间建立关系..
当我更新客户表时,我想在kendaraan表上更新数据nid_c和nama_customer。
我在这里收到了错误消息。
Executing SQL script in server ERROR: Error 1215: Cannot add foreign key constraint SQL Code: -- ----------------------------------------------------- -- Table `BengkelBiru`.`kendaraan` -- ----------------------------------------------------- CREATE TABLE IF NOT EXISTS `BengkelBiru`.`kendaraan` ( `NOPOL` VARCHAR(12) NOT NULL, `NID_C` VARCHAR(7) NULL DEFAULT NULL, `NAMA_CUSTOMER` VARCHAR(25) NULL DEFAULT NULL, `MERK` VARCHAR(15) NULL DEFAULT NULL, `TYPE` VARCHAR(25) NULL DEFAULT NULL, `CC` VARCHAR(4) NULL DEFAULT NULL, `TAHUN` VARCHAR(4) NULL DEFAULT NULL, `WARNA` VARCHAR(10) NULL DEFAULT NULL, `STATUS` VARCHAR(7) NULL DEFAULT NULL, PRIMARY KEY (`NOPOL`), INDEX `pkk_idx` (`NAMA_CUSTOMER` ASC, `NID_C` ASC), CONSTRAINT `FK_NID_C` FOREIGN KEY (`NAMA_CUSTOMER` , `NID_C`) REFERENCES `BengkelBiru`.`customer` (`NID_C` , `NID_C`) ON DELETE NO ACTION ON UPDATE CASCADE) ENGINE = InnoDB DEFAULT CHARACTER SET = utf8 SQL script execution finished: statements: 14 succeeded, 1 failed Fetching back view definitions in final form. Nothing to fetch
答案 0 :(得分:1)
您的问题出现在以下一行或两行中:
FOREIGN KEY (`NAMA_CUSTOMER` , `NID_C`)
REFERENCES `BengkelBiru`.`customer` (`NID_C` , `NID_C`)
^^^^^^^ Looks wrong s/b NAMA_CUSTOMER
我想你想要这一行:
REFERENCES `BengkelBiru`.`customer` (`NID_C` , `NID_C`)
是
REFERENCES `BengkelBiru`.`customer` (`NAMA_CUSTOMER`, `NID_C`)
为什么在引用中两次引用NID_C?我这样说是因为您将外键定义为:
FOREIGN KEY (`NAMA_CUSTOMER` , `NID_C`)
,您在顶部的说明显示客户将NID_C和NAMA_CUSTOMER列为列。
然而,从根本上说,为什么你在kendaraan(车辆)表中有Nama_customer?这似乎不是第3范式。您在第二个表中重复了客户名称;这不是客户PK的一部分。现在,如果您希望在输入kendaraan时保留客户的名称,这可能是可以接受的;但是既然你把它作为FK的一部分......并且进行级联更新/删除......这很奇怪。
所以也许你只想要:
FOREIGN KEY (`NID_C`)
REFERENCES `BengkelBiru`.`customer` (`NID_C`)
假设客户的主键是NID_C
答案 1 :(得分:0)
我认为你不能同时宣布两者。尝试单独进行。
CONSTRAINT `FK_NAMA_CUSTOMER`
FOREIGN KEY (`NAMA_CUSTOMER`)
REFERENCES `BengkelBiru`.`customer` (`NID_C`)
CONSTRAINT `FK_NID_C`
FOREIGN KEY (`NID_C`)
REFERENCES `BengkelBiru`.`customer` (`NID_C`)
答案 2 :(得分:0)
可能存在任何可能的情况: -
1 。父表中的列可以是INT UNSIGNED吗?
2 。两个表中的数据类型应相同。
3 。您正在尝试在目标表上引用不存在的密钥。确保它是另一个表上的键(它可以是主键或唯一键)。