Хранимые процедуры с автоматическим увеличением — исключение количества столбцов

У меня есть таблица с автоматически увеличивающимся идентификатором. Идентификатор также является внешним ключом в другой таблице. Когда я пытаюсь добавить значения в эти таблицы, я получаю исключение: количество столбцов не соответствует количеству значений в строке 1.

Это мои таблицы:

CREATE TABLE Hotspot(
num int auto_increment not null,
id varchar(255),
x int,
y int,
width int,
height int,

UNIQUE(id),
PRIMARY KEY (num)
);



CREATE TABLE Hotspot_Label(
num int auto_increment not null,
question_id varchar(255),
hotspot_id varchar(255),
label_id varchar(255),


PRIMARY KEY (num),

FOREIGN KEY (hotspot_id)
REFERENCES Hotspot(id),

FOREIGN KEY (label_id)
REFERENCES Label(id),

FOREIGN KEY (question_id)
REFERENCES Question(id)

);

Это хранимая процедура для одной из таблиц

PROCEDURE `insertHotspot`(IN recID varchar(255), x int, y int, width int, height int)
BEGIN
INSERT INTO Hotspot VALUES(recID, x, y, width, height);
END

Я читал, что вам не нужно вставлять значение автоматического увеличения в хранимую процедуру, поэтому я не вижу, что происходит не так.


person user8370201    schedule 05.09.2017    source источник
comment
Это одна из многих причин, по которым я считаю плохой практикой опускание списка необязательных полей после имени таблицы в INSERT.   -  person Uueerdo    schedule 05.09.2017


Ответы (2)


INSERT INTO ЗНАЧЕНИЯ Hotspot (число, recID, x, y, ширина, высота);

Должно быть как выше Вы вышли из колонки

Число

который автоматически увеличивается, хотя ему не нужно добавлять какое-либо значение, количество столбцов уменьшается, если вы его пропустите.

person Bala Kumar    schedule 05.09.2017

Запросы на вставку формы INSERT INTO some_table VALUES(field_values); обрабатываются как INSERT INTO some_table(full_field_list_in_ddl_defined_order) VALUES (field_values); Это означает, как указал Бала, что ваша вставка ожидает значение для Hotspot.num.

Это также означает, что после того, как вы исправите список полей сейчас, если кто-то позже добавит новое поле в любом месте, кроме конца таблицы, значения полей, которые вы предоставили, больше не будут выравниваться с соответствующими полями... и не будут иметь явной документации. относительно того, для каких сфер они предназначались.

person Uueerdo    schedule 05.09.2017