gpt4 book ai didi

mysql - 在存储过程调用中获取未知列 ID

转载 作者:行者123 更新时间:2023-11-29 11:57:56 24 4
gpt4 key购买 nike

我有以下存储过程来重置进行多次插入和删除的表的自动增量。

DROP PROCEDURE IF EXISTS reset_autoincrement;
DELIMITER $$;
CREATE PROCEDURE reset_autoincrement(IN tableName VARCHAR(250))
BEGIN
SELECT @max := MAX(`id`) + 1 + concat(' FROM ', tableName );
set @alter_statement = concat('ALTER TABLE ', tableName ,' AUTO_INCREMENT = ', @max);
PREPARE stmt FROM @alter_statement;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END $$;

并用

调用它
call reset_autoincrement('queueIn');

并得到

23:18:25 call reset_autoincrement('queueIn') Error Code: 1054. Unknown column 'id' in 'field list' 0,042 sec

表格列的一些摘录:

id  bigint(19) UN AI PK
created_at timestamp
updated_at timestamp

我有两个问题。

  1. 显然...为什么我会收到此错误 - 该列显然在那里。

  2. id 列在 6 小时内增加到一百万,全天有很多插入/删除操作。有没有更好的方法来重置mysql中的auto_increments?

最佳答案

因为您试图使其成为动态查询(下面的行),并且目前它是动态查询和普通查询的混合体。

SELECT @max :=  MAX(`id`) + 1 + concat(' FROM ', tableName );

您应该将其完全设为动态查询

SET @sql = "SELECT MAX(`id`) + 1 FROM " + tableName;

您需要保存第一个动态查询中的变量并在 ALTER 语句中使用它。类似下面的内容

DELIMITER $$;
CREATE PROCEDURE reset_autoincrement(IN tableName VARCHAR(250))
BEGIN
SET @var1 = 0;
SET @sql = "SELECT MAX(`id`) + 1 INTO @var1 FROM " + tableName;
PREPARE stmt FROM @sql;
EXECUTE stmt;
SET @ID = @var1;
set @alter_statement = concat('ALTER TABLE ', tableName ,' AUTO_INCREMENT = ', @ID);
PREPARE stmt FROM @alter_statement;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END $$;

关于mysql - 在存储过程调用中获取未知列 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32897170/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com