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);