如何将自动增量 ID 列添加到从 SQL 查询生成的表中? [复制]

Posted

技术标签:

【中文标题】如何将自动增量 ID 列添加到从 SQL 查询生成的表中? [复制]【英文标题】:How do I add Auto-Increment ID Column to a table generated from SQL Query? [duplicate] 【发布时间】:2021-12-27 06:42:01 【问题描述】:

我有一个从 SQL 查询本身生成的表。现在我需要在这个表中添加一个自动增量 id 列。 添加自动增量 id 列的常用语法是-

ALTER TABLE *Table_Name* ADD id INT NOT NULL AUTO_INCREMENT PRIMARY KEY

但是我没有具体的表名,表是通过查询生成的。

【问题讨论】:

嗨@Sayyam,我可以预测,您需要创建动态查询(Alter 命令)。如果没有,请通过示例进一步说明您的问题。 您必须更改表格,或者也可以动态创建行号?请让我知道,所以我删除我的答案或保留它 【参考方案1】:

你可以用这样的查询来做到这一点:

## Your Query to generate the Tablename
SELECT "myTable" INTO @mytab;

EXECUTE IMMEDIATE CONCAT("ALTER TABLE ",@mytab," ADD id INT NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST");

样本

MariaDB [bernd]> desc myTable;
+----------+---------+------+-----+---------+-------+
| Field    | Type    | Null | Key | Default | Extra |
+----------+---------+------+-----+---------+-------+
| insertat | date    | YES  |     | NULL    |       |
| myval    | int(11) | YES  |     | NULL    |       |
+----------+---------+------+-----+---------+-------+
2 rows in set (0.02 sec)

MariaDB [bernd]> select * from myTable;
+------------+-------+
| insertat   | myval |
+------------+-------+
| 2021-01-01 |    44 |
| 2021-01-02 |    99 |
| 2021-01-02 |   134 |
| 2021-01-03 |    45 |
| 2021-01-04 |     2 |
| 2021-01-04 |    17 |
+------------+-------+
6 rows in set (0.06 sec)

MariaDB [bernd]> ## Your Query to generate the Tablename
MariaDB [bernd]> SELECT "myTable" INTO @mytab;
Query OK, 1 row affected (0.01 sec)

MariaDB [bernd]> 
MariaDB [bernd]> EXECUTE IMMEDIATE CONCAT("ALTER TABLE ",@mytab," ADD id INT NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST");
Query OK, 0 rows affected (0.14 sec)
Records: 0  Duplicates: 0  Warnings: 0

MariaDB [bernd]> desc myTable;
+----------+---------+------+-----+---------+----------------+
| Field    | Type    | Null | Key | Default | Extra          |
+----------+---------+------+-----+---------+----------------+
| id       | int(11) | NO   | PRI | NULL    | auto_increment |
| insertat | date    | YES  |     | NULL    |                |
| myval    | int(11) | YES  |     | NULL    |                |
+----------+---------+------+-----+---------+----------------+
3 rows in set (0.01 sec)

MariaDB [bernd]> select * from myTable;
+----+------------+-------+
| id | insertat   | myval |
+----+------------+-------+
|  1 | 2021-01-01 |    44 |
|  2 | 2021-01-02 |    99 |
|  3 | 2021-01-02 |   134 |
|  4 | 2021-01-03 |    45 |
|  5 | 2021-01-04 |     2 |
|  6 | 2021-01-04 |    17 |
+----+------------+-------+
6 rows in set (0.00 sec)

MariaDB [bernd]> 

【讨论】:

参见手册 :-) : mariadb.com/kb/en/dual 也在 mysql dev.mysql.com/doc/refman/8.0/en/select.html 哇,该死的 - 鸡蛋在脸上的时刻!奇怪的是我没有从搜索结果中发现这一点。我已经删除了我不正确的 cmets。 但我通常从不使用它 - 我已将其从我的答案中删除 Mysql 不支持立即执行,只有 mariadb 支持。该问题被标记为mysql。

以上是关于如何将自动增量 ID 列添加到从 SQL 查询生成的表中? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server 将自动增量主键添加到现有表

(Sqlserver)将在查询结果插入新表中的时候添加一个自动增长列么 SQL语句怎么写

将自动增量 ID 添加到现有的升序列?

如何在 Java 中为自动增量表创建查询?

如何使用 phpmyadmin 向 mysql 数据库中的列添加自动增量?

如何使用单个查询在 SQL 中获取最后一个增量 id