polyanin
@polyanin
Golang, PHP & Symfony developer

Почему id не учитывает вставленные строки?

Приветствую!
CREATE TABLE time_interval (
	id serial NOT NULL,
	name varchar(128) NOT NULL,
	CONSTRAINT time_interval_pkey PRIMARY KEY (id)
);

--запрос 1
insert into time_interval (id, name) values(1,'test1'),(2,'test2'),(3,'test3');

--запрос 2
insert into time_interval (name) values('test4'),('test5'),('test6');


запрос 1 вставляет 3 строки с готовыми ID в таблицу.
и успешно отрабатывает.

запрос 2 возвращает ошибку.

SQL Error [23505]: ERROR: duplicate key value violates unique constraint "time_interval_pkey"
Detail: Key (id)=(1) already exists.

почему поле id не автоинкрементится во втором запросе, и как это исправить, как это делается в postgresql?
  • Вопрос задан
  • 505 просмотров
Пригласить эксперта
Ответы на вопрос 1
@good_beginer
Не нужно так делать. Если хотите вносить записи с своим ID то лучще поставить INT к примеру.
serial это автоинкремент для таблицы которую она описывает. Данная функци сохраняет состояние и имеет такие указатели как к примеру *nextval()*.
Если вызвать 2 раза инсерт, текущий указатель будет равен двум и после ещё 2 инсертов уже с вашими идентификаторами (3 и 4) указатель всёравно будет равен двум и при следующем вызове будет пытаться добавить id = 3
Автоинкремент для того и существует чтобы не беспокоится о уникальном идентификаторе записи там где это не особо нужно.
В вашем случае, если допустили такую ошибку, уже нужно делать RESTART с указанием последнего id
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы