MySQL錯誤1005(errno: 150)的原因分析與解決方案
更新時間:2025年12月09日 09:14:49 作者:0.99棧小臻
本文詳細介紹了MySQL外鍵約束創(chuàng)建失敗錯誤1005的原因分析及解決方案,主要包括數據類型不匹配、被引用列不是主鍵或唯一鍵、存儲引擎不支持外鍵、數據不一致問題和表不存在或列名錯誤等五個方面,需要的朋友可以參考下
這個錯誤是MySQL中非常常見的外鍵約束創(chuàng)建失敗錯誤。
錯誤本質
錯誤信息:
1005 - Can't create table 'zkac.#sql-1350_1' (errno: 150)
這表示MySQL在嘗試創(chuàng)建表或添加外鍵約束時失敗了,具體是外鍵約束創(chuàng)建過程中遇到了問題。
根本原因排查清單
1. 數據類型不匹配(最常見原因)
檢查方法:
SHOW CREATE TABLE navigation_target_point_info; SHOW CREATE TABLE task_type_info;
- 必須滿足:
ntpi_task_type_name和robot_task_type_name的數據類型完全一致- 對于字符串類型,長度、字符集和排序規(guī)則也必須一致
2. 被引用列不是主鍵或唯一鍵
檢查方法:
SHOW INDEX FROM task_type_info WHERE Key_name = 'PRIMARY' OR Column_name = 'robot_task_type_name';
解決方案:
-- 如果不是主鍵或唯一鍵,需要添加 ALTER TABLE task_type_info ADD UNIQUE INDEX idx_robot_task_type_name (robot_task_type_name);
3. 存儲引擎不支持外鍵
檢查方法:
SHOW TABLE STATUS LIKE 'navigation_target_point_info'; SHOW TABLE STATUS LIKE 'task_type_info';
解決方案:
-- 轉換為InnoDB引擎 ALTER TABLE navigation_target_point_info ENGINE=InnoDB; ALTER TABLE task_type_info ENGINE=InnoDB;
4. 數據不一致問題
檢查方法:
-- 查找外鍵表中有但主鍵表中沒有的值 SELECT DISTINCT ntpi.ntpi_task_type_name FROM navigation_target_point_info ntpi LEFT JOIN task_type_info tti ON ntpi.ntpi_task_type_name = tti.robot_task_type_name WHERE ntpi.ntpi_task_type_name IS NOT NULL AND tti.robot_task_type_name IS NULL;
- 解決方案:
- 刪除無效數據
- 或在主表中添加缺失的記錄
5. 表不存在或列名錯誤
檢查方法:
-- 確認表和列是否存在
SELECT * FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = 'zkac'
AND TABLE_NAME IN ('navigation_target_point_info', 'task_type_info')
AND COLUMN_NAME IN ('ntpi_task_type_name', 'robot_task_type_name');以上就是MySQL錯誤1005(errno: 150)的原因分析與解決方案的詳細內容,更多關于MySQL錯誤1005(errno: 150)的資料請關注腳本之家其它相關文章!
相關文章
MySQL5.7中 performance和sys schema中的監(jiān)控參數解釋(推薦)
在MySQL5.7中,performance schema有很大改進,包括引入大量新加入的監(jiān)控項、降低占用空間和負載,以及通過新的sys schema機制顯著提升易用性。下面通過本文給大家介紹 MySQL5.7中 performance和sys schema中的監(jiān)控參數解釋,需要的朋友可以參考下2017-08-08

