首页 > 解决方案 > 创建表并使用变量插入

问题描述

我想创建一个表并插入仅更改变量名的数据。但是,它创建了一个名为 @myId 的表,而不是变量的值。我也试图删除 `` 但我得到了一个 sql 错误。

set @myId = "tabletest";

SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";

CREATE TABLE `@myId` (
  `id` int(10) NOT NULL,
  `position` int(10) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

INSERT INTO `@myId` (`id`, `position`) VALUES
(1, 1);

标签: mysqlsql

解决方案


我不建议您这样做。表名不应该来自变量。但是,您确实提出了一个有效的问题,如果您要这样做,您需要动态 SQL:

SET @sql = 'CREATE TABLE @myId (id int(10) NOT NULL, position int(10) NOT NULL) ENGINE=InnoDB DEFAULT CHARSET=latin1;';
SET @sql = REPLACE(@sql, '@myId', 'tabletest');

PREPARE ct FROM @sql;
EXECUTE ct;
DEALLOCATE PREPARE ct;

SET @sql = 'INSERT INTO @myId (id, position) VALUES (1, 1);';
SET @sql = REPLACE(@sql, '@myId', 'tabletest');

PREPARE st FROM @sql;

EXECUTE st;
DEALLOCATE PREPARE st;

然后你可以执行:

SELECT * FROM tabletest;

请注意,如果您想在 中使用@myId,则SELECT需要更多动态 SQL:Yucch!

通常正确的解决方案只是一个表格,您可以在其中插入带有标识符的行。然后,您可以在完成后根据需要删除这些行(或使它们无效)。

是一个 db<>fiddle。


推荐阅读