Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
(MYSQL)根据另一个表的最大id自动递增临时表?_Mysql_Sql_Mysql Workbench - Fatal编程技术网

(MYSQL)根据另一个表的最大id自动递增临时表?

(MYSQL)根据另一个表的最大id自动递增临时表?,mysql,sql,mysql-workbench,Mysql,Sql,Mysql Workbench,我这里有一个表的mySQL代码,该表有一组列和一个rowID字段。rowID字段是主键和唯一索引。在存储过程中,我创建一个临时表来执行一些数据操作,我希望临时表以第一个表中的MAXrowID+1开头。我现在有这个代码: set @auto_incID = (SELECT (MAX(rowID)+1) from `mytable`); set @sql = concat('CREATE TEMPORARY TABLE `myTempTable` auto_increment = ',@auto

我这里有一个表的mySQL代码,该表有一组列和一个rowID字段。rowID字段是主键和唯一索引。在存储过程中,我创建一个临时表来执行一些数据操作,我希望临时表以第一个表中的MAXrowID+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保持不变,而不是从MAXrowID+1开始。我犯错误了吗?或者这是不可能的?

一个例子:

-创建源表 创建表old\u id INT自动递增主键old\u value INT; -用一些数据填充它 在旧_值中插入值11、22; -创建新表复制数据并重新分配主键值 创建表格新建id INT自动增量主键,新建值INT自动增量=1000 选择空作为新的\u id,旧的\u值作为旧的\u值;
查看

SELECT*上的结果,复制所有列值,不做任何更改。您的自动增量将仅在创建trable后应用。@Akina感谢您提供的信息,我也这么认为。有没有一种可行的方法来实现我当时打算做的事情?很容易。只需打断键盘上的星号键,就可以使用它,除了COUNT*。然后在INSERT和SELECT parts中列出所有列,并在SELECT for id列中输入NULL文字。@Akina,请您提供一个小示例,说明在SELECT for id列中输入NULL文字的含义?啊,我现在明白您的意思了!谢谢你,我真的很感谢你的帮助@PrinceofCats注意到,上一个查询的SELECT部分中的输出列与新表的列名有别名。这是强制性的!是的,我想我不能使用旧表中的相同名称。谢谢大家!@PrinceofCats编号。CREATE part中的列名和SELECT part中的列别名必须严格匹配-如果列列表中没有别名,则会向结构中添加一个列,如果向后,则会分配NULL/DEFAULT,如果列不可为NULL且没有默认值,则会引发错误。对,我认为是这样的。我想说的是,我不认为我可以在CREATE语句中将与旧表中的列名匹配的列名分配给新表,也就是说,使用前面的示例,我不能这样做:CREATE table new old_id INT AUTO_INCREMENT PRIMARY KEY。。。其中新表中的列名与旧表中的列名匹配。是这样吗?