EMPTY TABLE键'PRIMARY'的重复条目'1'

问题描述 投票:2回答:3

我的MariaDB数据库有一个奇怪的问题。我使用以下代码创建一个空表:

drop table if exists Subject;
CREATE TABLE Subject (
  id integer primary key auto_increment,
  code varchar(100) unique not null,
  name text not null
);

查询执行正常,0行受影响。

我尝试在表中插入一些数据:

INSERT INTO Subject (id, code, name) VALUES
(0,'KMI/AIdb/PHW/15','Počítačový hardvér'),
(1,'KMI/AIdb/DBA/15','Tvorba databázových aplikácií'),
(2,'KMI/SPRVdb/INF/16','Informatika a základy správy databáz'),
(3,'KMI/AIdb/PR4/15','Programovanie 4 - Objektové programovanie'),
(4,'KMI/AIdb/DBS/15','Databázové informačné systémy');

查询错误(1062):键'PRIMARY'重复输入'1'

如果我再次运行相同的查询:

INSERT INTO Subject (id, code, name) VALUES
(0,'KMI/AIdb/PHW/15','Počítačový hardvér'),
(1,'KMI/AIdb/DBA/15','Tvorba databázových aplikácií'),
(2,'KMI/SPRVdb/INF/16','Informatika a základy správy databáz'),
(3,'KMI/AIdb/PR4/15','Programovanie 4 - Objektové programovanie'),
(4,'KMI/AIdb/DBS/15','Databázové informačné systémy');

查询执行正常,5行受影响。

我相信它与auto_increment有关,但我有一个巨大的数据库转储,我想插入。这是一个错误,还是预期的行为?

mysql mariadb
3个回答
2
投票

第一个插入创建了id = 1。这是因为“0”(或NULL)被特别对待以表示“给我下一个id”。然后第二行尝试显式插入id = 1并得到“重复”。

您的转储是否包含id = 0的行,正如您在评论中所暗示的那样。这听起来不对。


1
投票

使用id autoincrement不插入id

INSERT INTO Subject (code, name) VALUES
('KMI/AIdb/PHW/15','Počítačový hardvér'),
('KMI/AIdb/DBA/15','Tvorba databázových aplikácií'),
('KMI/SPRVdb/INF/16','Informatika a základy správy databáz'),
('KMI/AIdb/PR4/15','Programovanie 4 - Objektové programovanie'),
('KMI/AIdb/DBS/15','Databázové informačné systémy');

整体不要为id插入0


1
投票

AUTO_INCREMENT属性可用于为新行生成唯一标识。

除非启用了NO_AUTO_VALUE_ON_ZERO SQL模式,否则还可以向列显式指定0以生成序列号。

Read here for more details

© www.soinside.com 2019 - 2024. All rights reserved.