126 1054 1146 1062 24

(休息一下)由於包含了這 4 個錯誤號,我認為這個頁面將覆蓋使用者獲得的典型錯誤的大約 50%。

(是的,這個’示例’需要修改。)

24 無法開啟檔案(開啟的檔案太多)

open_files_limit 來自 OS 設定。table_open_cache 需要小於那個。

這些可能會導致錯誤:

  • 未能在儲存過程中使用 DEALLOCATE PREPARE

  • 具有大量分割槽且 innodb_file_per_table = ON 的 PARTITIONed 表。建議在給定的表中沒有超過 50 個分割槽(出於各種原因)。 (當 Native Partitions 可用時,此建議可能會發生變化。)

顯而易見的解決方法是設定增加作業系統限制:要允許更多檔案,請更改 ulimit/etc/security/limits.confsysctl.conf(kern.maxfiles&kern.maxfilesperproc)或其他內容(取決於作業系統)。然後增加 open_files_limittable_open_cache

從 5.6.8 開始,open_files_limit 基於 max_connections 自動調整大小,但可以從預設值更改。

1062 - 重複錄入

發生此錯誤主要是由於以下兩個原因

  1. 重複價值 - Error Code: 1062. Duplicate entry ‘12’ for key ‘PRIMARY’

    主鍵列是唯一的,它不接受重複的條目。因此,當你嘗試插入已存在於表中的新行時,將產生此錯誤。

要解決此問題,請將主鍵列設定為 AUTO_INCREMENT。當你嘗試插入新行時,請忽略主鍵列或將 NULL 值插入主鍵。

CREATE TABLE userDetails(
  userId INT(10) NOT NULL AUTO_INCREMENT,
  firstName VARCHAR(50),
  lastName VARCHAR(50),
  isActive INT(1) DEFAULT 0,
  PRIMARY KEY (userId) );

--->and now while inserting 
INSERT INTO userDetails VALUES (NULL ,'John', 'Doe', 1);
  1. 獨特的資料欄位 - Error Code: 1062. Duplicate entry ‘A’ for key ‘code’

    你可以將列指定為唯一,並嘗試插入具有該列現有值的新行將產生此錯誤。

要克服此錯誤,請使用 INSERT IGNORE 而不是普通的 INSERT。如果你嘗試插入的新行不會複製現有記錄,則 MySQL 會像往常一樣插入它。如果記錄是重複的,則 IGNORE 關鍵字會丟棄它而不會產生任何錯誤。

INSERT IGNORE INTO userDetails VALUES (NULL ,'John', 'Doe', 1);