具有自动增量的存储过程 - 列计数异常

时间:2017-09-05 16:45:27

标签: mysql stored-procedures auto-increment

我有一个自动增加id的表。 id也是另一个表中的外键。当我尝试向这些表添加值时,我得到一个例外 - 列数与第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

我已经读过您不需要在存储过程中插入自动增量值,因此我无法查看出错的地方

2 个答案:

答案 0 :(得分:0)

  

INSERT INTO Hotspot VALUES(num,recID,x,y,width,height);

应该像上面那样 你离开了专栏

Num

虽然它不需要添加任何值,但它会自动递增,如果你错过它,列数会减少。

答案 1 :(得分:0)

表单INSERT INTO some_table VALUES(field_values);的插入查询被视为INSERT INTO some_table(full_field_list_in_ddl_defined_order) VALUES (field_values);这意味着,正如Bala指出的那样,您的插入期望Hotspot.num的值。

这也意味着,一旦您现在修复了字段列表,如果有人稍后在表的末尾添加了一个新字段,那么您提供的字段值将不再与相应的字段对齐...并且没有关于它们用于哪些字段的明确文档。