mysql - 为使用 SELECT 语句创建的表添加自增主键

标签 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 合并)

为此,您可以使用信息模式。这将如下所示(虚拟代码,没有 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

关于mysql - 为使用 SELECT 语句创建的表添加自增主键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43644997/

相关文章:

shell - 出错(Windows): line 1: syntax error near unexpected token `,'

php - 大括号中的变量 - PHP 编码问题

php - 忽略主键重复

mysql - 如何在 MySQL 列中查找相同值的最高计数

mysql - 如何在MYSQL中选择两个月份名称之间的记录

excel - 如何在 case 语句中定义范围?

sql - Kotlin 公开 - 没有标识列的表的实体

sql - 获取直接或间接向员工汇报的所有员工,层次结构级别为否

mysql - 过滤表,基于另一个表中的字段

php - 如何为数组中的每个元素调用相同的函数?