Mysql

MySQL外鍵錯誤

  • February 27, 2014

我需要更新 a 中的行child table,但是在執行程式碼時出現以下錯誤,

公司表

CREATE TABLE `company` 
(
`Company_id` int(11) NOT NULL AUTO_INCREMENT,
`Company_name` varchar(255) DEFAULT NULL,
`BuildingNameNumber` varchar(255) NOT NULL,
`Street_name` varchar(255) NOT NULL,
`Area` varchar(255) NOT NULL,
`Landmark` varchar(255) NOT NULL,
`PIN_code` int(6) NOT NULL,
`PhoneMobile_number` char(15) NOT NULL,
`Website` varchar(255) NOT NULL,
`Fax` varchar(255) NOT NULL,
`Email` varchar(255) NOT NULL,
`Upload_logo` varchar(255) DEFAULT NULL,
`tin_number` varchar(50) NOT NULL,
`CreatedOn` datetime DEFAULT NULL,
`CreatedBy` varchar(255) DEFAULT NULL,
`UpdatedOn` datetime DEFAULT NULL,
`UpdatedBy` varchar(255) DEFAULT NULL,
`is_active` bit(1) DEFAULT b'0',
PRIMARY KEY (`Company_id`),
);

服務表

CREATE TABLE `service` (
`service_id` int(11) NOT NULL AUTO_INCREMENT,
 `company_id` int(11) NOT NULL,
 `serial_number` varchar(256) DEFAULT NULL,
 `service_name` varchar(256) DEFAULT NULL,
 `price` float(10,2) NOT NULL DEFAULT '0.00',
 `tax` float(5,2) NOT NULL DEFAULT '0.00',
 `is_active` bit(1) NOT NULL DEFAULT b'1',
 PRIMARY KEY (`service_id`),
 KEY `company_id` (`company_id`),
 CONSTRAINT `service_ibfk_1` FOREIGN KEY (`company_id`) REFERENCES `company` (`Company_id`) ON DELETE CASCADE ON UPDATE CASCADE
);

當我嘗試更新服務表時,出現錯誤

**Error Code: 1452. Cannot add or update a child row: a foreign key constraint fails (`etailershop`.`service`, CONSTRAINT `service_ibfk_1` FOREIGN KEY (`company_id`) REFERENCES `company` (`Company_id`) ON DELETE CASCADE ON UPDATE CASCADE)  0.031 sec**

我試圖找到錯誤,我確實了解外鍵約束,但我找不到這有什麼問題,類似的結構和約束表工作正常。

您收到此錯誤是因為您嘗試根據目前儲存在表中的值將行更新到service表中,該表沒有該欄位的有效值。company_id``company

如果您發布更多程式碼,有人可以幫助您診斷具體原因。

我在我的案例中發現了問題,我在更新查詢中使用了“AND”,我刪除了“AND”運算符,它現在工作正常,更新語句和解決的更新語句如下所示,

更新聲明

UPDATE service SET company_id = ‘183’ AND service_name = ‘Story Books’ AND price =‘400.00’ WHERE service_id = ‘9’ LIMIT 1

更新聲明$$ SOLVED $$

UPDATE service SET company_id = 187, service_name = ‘Test Books’, price = 500.00 WHERE service_id = 7

小的變化,但現在工作正常。

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