我的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有关,但是我想插入一个巨大的数据库转储。这是错误,还是预期的行为?
答案 0 :(得分:2)
第一次插入创建的ID = 1。这是因为对“ 0”(或context
)的特殊对待是指“给我下一个ID”。然后第二行尝试显式插入id = 1并得到“重复”。
您的转储中是否包含id = 0的行,就像您在“注释”中所暗示的那样。听起来不对。
答案 1 :(得分:1)
使用id自动递增功能不要插入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
答案 2 :(得分:1)
AUTO_INCREMENT 属性可用于为新行生成唯一标识。
除非启用了 NO_AUTO_VALUE_ON_ZERO SQL模式,否则您还可以为该列显式分配0来生成序列号。