首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将自动增量主键添加到使用SELECT语句创建的表中

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

Stack Overflow用户
提问于 2017-04-27 05:42:20
回答 1查看 29关注 0票数 0

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

代码语言:javascript
复制
CREATE TABLE IF NOT EXISTS newTable
SELECT something1, something2, something3 FROM someTable;

使用这个语法创建一个新的表,我能给它添加一个主键吗?如下所示:

代码语言:javascript
复制
CREATE TABLE IF NOT EXISTS newTable
SELECT id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, something1, something2, something3 FROM someTable;

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

代码语言:javascript
复制
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;

提前感谢您的任何建议!

EN

回答 1

Stack Overflow用户

发布于 2017-04-27 06:08:24

看起来你必须运行多个步骤才能做到这一点:

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

要做到这一点,您可以使用信息模式。这将如下所示(虚拟代码,没有mysql可以方便地调试任何东西):

代码语言:javascript
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43644997

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档