Mysql 如何从另一个表设置自动增量
如何从另一个表中设置Mysql 如何从另一个表设置自动增量,mysql,auto-increment,create-table,alter-table,Mysql,Auto Increment,Create Table,Alter Table,如何从另一个表中设置创建表或更改表上的自动增量 我发现了这个问题,但没有解决我的问题: 我也试过: CREATE TABLE IF NOT EXISTS `table_name` ( `id` mediumint(6) unsigned NOT NULL AUTO_INCREMENT, `columnOne` tinyint(1) NOT NULL, `columnTwo` int(12) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM
创建表
或更改表
上的自动增量
我发现了这个问题,但没有解决我的问题:
我也试过:
CREATE TABLE IF NOT EXISTS `table_name` (
`id` mediumint(6) unsigned NOT NULL AUTO_INCREMENT,
`columnOne` tinyint(1) NOT NULL,
`columnTwo` int(12) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=(SELECT `AUTO_INCREMENT` FROM `INFORMATION_SCHEMA`.`TABLES` WHERE `TABLE_SCHEMA` = 'database_name' AND `TABLE_NAME` = 'another_table_name');
这:
这:
这是:
ALTER TABLE `table_name` AUTO_INCREMENT=(SELECT (MAX(`id`)+1) FROM `another_table_name`);
此代码将为您创建以下过程:
CREATE PROCEDURE `tbl_wth_ai`(IN `ai_to_start` INT)
BEGIN
SET @s=CONCAT('CREATE TABLE IF NOT EXISTS `table_name` (
`id` mediumint(6) unsigned NOT NULL AUTO_INCREMENT,
`columnOne` tinyint(1) NOT NULL,
`columnTwo` int(12) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT = ', `ai_to_start`);
PREPARE stmt FROM @s;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END;
然后你可以调用调用tbl\u和ai(2)代码>在括号内传递参数
例如:
CALL tbl_wth_ai((SELECT id FROM `ttest` WHERE c1='b'));
这很好:
DELIMITER $$
CREATE PROCEDURE `tbl_wth_ai`(IN `ai_to_start` INT)
BEGIN
SET @s=CONCAT('CREATE TABLE IF NOT EXISTS `table_name` (
`id` mediumint(6) unsigned NOT NULL AUTO_INCREMENT,
`columnOne` tinyint(1) NOT NULL,
`columnTwo` int(12) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT = ', `ai_to_start`);
PREPARE stmt FROM @s;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END $$
DELIMITER ;
CALL tbl_wth_ai((SELECT MAX(`id`)+1 FROM `another_table_name`));
DROP PROCEDURE IF EXISTS tbl_wth_ai;
我想你需要使用动态SQL来解决这个问题。你能给我一个例子吗?为什么链接问题的已接受答案不能解决你的问题?可能是重复的谢谢,但我收到以下错误消息:error 1064(42000)在第1行:你的SQL语法有错误;查看与您的MySQL服务器版本对应的手册,了解第4行的“”附近使用的正确语法
@Codename-我猜您没有更改Delimiter。这就是为什么你没有考虑你所链接的答案吗?@拉瓦拉维卡里奥:你指的是哪一个分隔符,<代码>……< /代码>?我还尝试了“…”
@Codename,似乎您在一个查询中同时调用了两个查询(过程创建和过程调用)。阅读简单地说。您可以用分隔符$$
开始代码,然后用$$
分隔两个查询并设置分隔符在整个double查询语句的结尾处显示code>。我的答案中给出的代码不包含任何语法错误。它工作正常,在成功运行后从我的MySQL IDE复制粘贴。@asd tm:非常感谢!感谢您提供这段代码片段,它可能会提供一些有限的、即时的帮助。通过说明为什么这是一个很好的问题解决方案来正确解释它的长期价值,并将使它对未来有其他类似问题的读者更有用。请在您的回答中添加一些解释,包括您所做的假设。
CALL tbl_wth_ai((SELECT id FROM `ttest` WHERE c1='b'));
DELIMITER $$
CREATE PROCEDURE `tbl_wth_ai`(IN `ai_to_start` INT)
BEGIN
SET @s=CONCAT('CREATE TABLE IF NOT EXISTS `table_name` (
`id` mediumint(6) unsigned NOT NULL AUTO_INCREMENT,
`columnOne` tinyint(1) NOT NULL,
`columnTwo` int(12) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT = ', `ai_to_start`);
PREPARE stmt FROM @s;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END $$
DELIMITER ;
CALL tbl_wth_ai((SELECT MAX(`id`)+1 FROM `another_table_name`));
DROP PROCEDURE IF EXISTS tbl_wth_ai;
SELECT `AUTO_INCREMENT` INTO @AutoInc
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = 'my_db' AND TABLE_NAME = 'old_table';
SET @s:=CONCAT('ALTER TABLE `my_db`.`new_table` AUTO_INCREMENT=', @AutoInc);
PREPARE stmt FROM @s;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;