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.conf
或 sysctl.conf
(kern.maxfiles&kern.maxfilesperproc)或其他内容(取决于操作系统)。然后增加 open_files_limit
和 table_open_cache
。
从 5.6.8 开始,open_files_limit
基于 max_connections
自动调整大小,但可以从默认值更改。
1062 - 重复录入
发生此错误主要是由于以下两个原因
-
重复价值 -
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);
-
独特的数据字段 -
Error Code: 1062. Duplicate entry ‘A’ for key ‘code’
你可以将列指定为唯一,并尝试插入具有该列现有值的新行将产生此错误。
要克服此错误,请使用
INSERT IGNORE
而不是普通的INSERT
。如果你尝试插入的新行不会复制现有记录,则 MySQL 会像往常一样插入它。如果记录是重复的,则IGNORE
关键字会丢弃它而不会产生任何错误。
INSERT IGNORE INTO userDetails VALUES (NULL ,'John', 'Doe', 1);