我的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有关,但我有一个巨大的数据库转储,我想插入。这是一个错误,还是预期的行为?
第一个插入创建了id = 1。这是因为“0”(或NULL
)被特别对待以表示“给我下一个id”。然后第二行尝试显式插入id = 1并得到“重复”。
您的转储是否包含id = 0的行,正如您在评论中所暗示的那样。这听起来不对。
使用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
AUTO_INCREMENT属性可用于为新行生成唯一标识。
除非启用了NO_AUTO_VALUE_ON_ZERO SQL模式,否则还可以向列显式指定0以生成序列号。