別のテーブルで外部キーとして参照されているフィールドを更新しようとしています。
mysql> update Maintenance set contract='95096916-OLD' where contract='95096916';
エラー 1451 (23000): 親行を削除または更新できません: 外部キー制約が失敗しました (
systems_doc
.Equipment
, CONSTRAINTEquipment_ibfk_1
FOREIGN KEY (contract
) REFERENCESMaintenance
(contract
) ON UPDATE CASCADE)
| Maintenance | CREATE TABLE `Maintenance` (
`contract` char(30) NOT NULL,
`quote` char(30) NOT NULL,
`vendor` char(20) NOT NULL,
`provider` char(20) NOT NULL,
`product` char(30) NOT NULL,
`expiryDate` date NOT NULL,
`annualCost` int(11) NOT NULL,
`reference` char(13) NOT NULL,
`purchaseOrder` char(13) NOT NULL,
`cq` char(10) NOT NULL,
`cqRenewal` char(10) NOT NULL,
`comments` char(40) NOT NULL,
UNIQUE KEY `contract` (`contract`,`expiryDate`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
| Equipment | CREATE TABLE `Equipment` (
`vendor` char(20) NOT NULL,
`model` char(30) NOT NULL,
`serialNumber` char(20) NOT NULL,
`purchaseOrder` char(20) NOT NULL,
`purchaseDate` date NOT NULL,
`contract` char(15) NOT NULL,
`annualCost` int(11) NOT NULL,
`comments1` varchar(256) DEFAULT NULL,
`comments2` varchar(256) NOT NULL,
PRIMARY KEY (`serialNumber`),
KEY `contract` (`contract`),
CONSTRAINT `Equipment_ibfk_1` FOREIGN KEY (`contract`) REFERENCES `Maintenance` (`contract`) ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
UPDATEをカスケードしないのはなぜですか? 円形ではないと思います。ご協力いただきありがとうございます。他の同様の問題を読んだことがありますが、それがどのように機能するかを誤解しているか、セットアップが間違っています。