Mysql
SQL 錯誤 1452:無法添加或更新子行:外鍵約束失敗
我正在嘗試按照本指南安裝 Zabbix 。成功執行 scheme.sql 後嘗試執行 data.sql 時遇到以下問題
mysql -D zabbix -uzabbix -pPassword < /home/zabbix/zabbix-2.4.5/database/mysql/schema.sql mysql -D zabbix -uzabbix -pPassword < /home/zabbix/zabbix-2.4.5/database/mysql/data.sql
第 2989 行的錯誤 1452 (23000):無法添加或更新子行:外鍵約束失敗 (‘zabbix’.‘sysmaps_elements’, CONSTRAINT ‘c_sysmaps_elements_2’ FOREIGN KEY (‘iconid_off’) REFERENCES ‘images’ (‘imageid’ ))
我無法弄清楚為什麼我無法添加或更新子行,它對我來說看起來非常好。
腳本可以從這裡下載
- 檢查sql執行的順序。schema.sql –> images.sql –> data.sql
- 確保實際輸入了圖像數據。從圖像中選擇 *;
這是因為在某些 DB 中未設置自動送出,因此未執行 images.sql。這是因為沒有“送出”;在 images.sql 的最後一句中。所以添加語句“commit;” 到 images.sql。
您可以使用如下所示的頁眉和頁腳更新 data.sql:
– 將這些行作為標題添加到您的 MYSQL 數據腳本中
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; /*!40101 SET NAMES utf8 */; /*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; /*!40103 SET TIME_ZONE='+00:00' */; /*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; /*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; /*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; /*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
– 將這些行作為頁腳添加到您的 MYSQL 數據腳本
UNLOCK TABLES; /*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; /*!40101 SET SQL_MODE=@OLD_SQL_MODE */; /*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
這將使您能夠在沒有任何外部檢查的情況下恢復數據。
更新:您可以通過包含頁眉和頁腳重新建構 data.sql 文件:
cat header.sql data.sql footer.sql > data_NEW.sql