所以这有效......
ALTER TABLE variation AUTO_INCREMENT = 10;
但我想这样做;
ALTER TABLE variation AUTO_INCREMENT = (SELECT MAX(id)+1 FROM old_db.varaition);
但这不起作用,也不起作用;
SELECT MAX(id)+1 INTO @old_auto_inc FROM old_db.variation
ALTER TABLE variation AUTO_INCREMENT = @old_auto_inc;
所以有人知道怎么做吗?
(我正在努力确保AUTO_INCREMENT键不会在旧网站和新网站之间发生冲突,并且需要自动执行此操作。所以我可以在新数据库上线时运行脚本)
答案 0 :(得分:2)
将auto_increment
设置为1,零不起作用,自动mysql将最大值设置为索引值的下一个值。
ALTER TABLE table AUTO_INCREMENT = 1
答案 1 :(得分:1)
我对mysql不够熟悉,无法给出具体的答案。但是,在其他数据库引擎中,有一种EXEC方法可以将字符串传递给将要执行的字符串。您只需编写一个脚本来确定auto_increment所需的值,然后将该值作为字符串插入到EXEC的脚本中。基本上编写一个脚本来编写第二个脚本并运行它。
编辑:看起来你想要一份准备好的声明。搜索“动态SQL”几乎重复here
EDIT2:Tim,ref this链接,该链接在之前给出的几乎重复的StackOverflow帖子中引用。在页面上搜索字符串'Using Parameters',你就会得到它的瘦身。 MySql显然有点困难。在MSSqlServer 2000中,这是一个简单的过程。 Here是关于mysql dynamic sql
的文章的另一个链接答案 2 :(得分:0)
我不知道这是不是一个好主意,但你可以用服务器端语言中的2个查询来做,例如,PHP吗?
$incrementStep = Db::query('SELECT MAX(id)+1 FROM old_db.varaition');
Db::query('ALTER TABLE variation AUTO_INCREMENT = ' . (int) $incrementStep);
假设Db::query
是一种神奇的查询方法,每次都能准确返回您想要的内容:)
答案 3 :(得分:0)
您可以像下面这样向动态SQL调用动态注入静态值:
SET @minEmptyId := 1337;
CALL statement(CONCAT('
ALTER TABLE tableName
AUTO_INCREMENT = ', @minEmptyId))
;
statement
过程实现:
DELIMITER $$
CREATE PROCEDURE statement(IN dynamic_statement TEXT)
BEGIN
SET @dynamic_statement := dynamic_statement;
PREPARE prepared_statement FROM @dynamic_statement;
EXECUTE prepared_statement;
DEALLOCATE PREPARE prepared_statement;
END$$
DELIMITER ;