【问题标题】:Stored procedures with auto increment - Column count exception具有自动增量的存储过程 - 列计数异常
【发布时间】:2018-02-14 00:49:43
【问题描述】:

我有一个带有自动递增 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

我已经读到您不需要在存储过程中插入自动增量值,所以我看不到出了什么问题

【问题讨论】:

  • 这是我认为在 INSERT 上省略表名后的可选字段列表的众多原因之一。

标签: mysql stored-procedures auto-increment


【解决方案1】:

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

这也意味着,一旦您现在修复了字段列表,如果以后有人在表格末尾以外的任何地方添加新字段,您提供的字段值将不再与相应的字段对齐......并且有没有明确的文档说明它们打算用于哪些领域。

【讨论】:

    【解决方案2】:

    插入热点值(num,recID, x, y, width, height);

    应该和上面一样 你离开了专栏

    个数

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-06-22
      • 2011-05-27
      • 2018-08-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-04
      • 1970-01-01
      相关资源
      最近更新 更多