如何将自动增量 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 查询生成的表中? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
(Sqlserver)将在查询结果插入新表中的时候添加一个自动增长列么 SQL语句怎么写