【发布时间】:2020-11-03 13:48:09
【问题描述】:
我这里有一个带有一堆列和一个 rowID 字段的表的 mySQL 代码。 rowID 字段是主键和唯一索引。在存储过程中,我创建了一个临时表来进行一些数据操作,并且我希望临时表以第一个表中的 MAX(rowID)+1 开头。我现在有这个代码:
set @auto_incID = (SELECT (MAX(rowID)+1) from `mytable`);
set @sql = concat('CREATE TEMPORARY TABLE `myTempTable` auto_increment = ',@auto_incID, ' SELECT * FROM mytable where items = 20;');
PREPARE st FROM @sql;
EXECUTE st;
DEALLOCATE PREPARE st;
问题是,此代码返回错误代码 1062:键 'PRIMARY' 的重复条目 '1'。经过进一步检查,似乎 auto_increment 实际上并没有更新临时表,它只是按原样接收来自第一个表的条目(即它们的 rowID 保持不变,不是从 MAX(rowID)+1 开始。我我弄错了?还是这不可能?
【问题讨论】:
-
SELECT * 复制所有列值而不做任何更改。您的
auto_increment将仅在创建 trable 后应用。 -
@Akina 谢谢你提供的信息,我想了很多。有没有可行的方法来执行我打算做的事情?
-
很容易。只需打破键盘上的星号键,除
COUNT(*)外永远不要使用它。然后列出 INSERT 和 SELECT 部分中的所有列,并将 NULL 文字放入 SELECT foridcoluimn。 -
@Akina 能否提供一个小例子来说明“在 SELECT 中为
id列放置一个 NULL 文字”是什么意思?
标签: mysql sql mysql-workbench