将自动增量主键添加到使用SELECT语句创建的表中

时间:2017-04-26 21:42:20

标签: mysql syntax primary-key create-table

这是一个语法问题,我不知道我在想什么是可能的。我找不到任何关于它的东西。

CREATE TABLE IF NOT EXISTS newTable
SELECT something1, something2, something3 FROM someTable;

使用此语法创建新表,我可以为此添加主键吗?像这样:

CREATE TABLE IF NOT EXISTS newTable
SELECT id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, something1, something2, something3 FROM someTable;

我有一个庞大而复杂的动态查询,可以返回我需要的确切结果。剩下的就是将这些结果添加为自动增量主键! 因为查询是动态的,我不知道我会得到的列数,所以我不能只是:

DROP TABLE IF EXISTS newTable;
CREATE TABLE newTable(
  id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
  something1 VARCHAR(255),
  something2 VARCHAR(255),
  something3 VARCHAR(255)
)  ENGINE=MEMORY;

提前感谢任何给定的建议!

1 个答案:

答案 0 :(得分:0)

看起来您必须执行多个步骤才能执行此操作:

  • 使用主键创建表
  • 使用存储过程(可以与步骤1合并)
  • 将列添加到此表

要执行此操作,请使用信息架构。这将看起来如下(虚拟代码,没有mysql方便调试任何东西):

CREATE PROCEDURE create_table(table_name VARCHAR(200))
BEGIN
  declare cursor table_columns as SELECT COLUMN_NAME, DATA_TYPE, 
    IS_NULLABLE, COLUMN_DEFAULT FROM INFORMATION_SCHEMA.COLUMNS
    WHERE table_name = 'table_name'
  LOOP
     concatenate create table statement
  END LOOP;
  execute create table statement

END