SQL SELECT INTO 语句 #
通过 SQL,您可以从一个表复制信息到另一个表。
SELECT INTO 语句从一个表复制数据,然后把数据插入到另一个新表中。
注意: MySQL 数据库不支持 SELECT ... INTO
语句,但支持 INSERT INTO ... SELECT
当然你可以使用以下语句来拷贝表结构及数据:
CREATE TABLE newT
AS
SELECT * FROM oldT
SQL SELECT INTO 语法 #
假设有一个名为 isps 的表,包含以下数据:
MariaDB [dn]> select * from isps;
+-----+------------+--------------------------------------------------+
| idx | name | intro |
+-----+------------+--------------------------------------------------+
| 1 | West | 西部数码老牌互联网基础服务提供商 |
| 2 | Nameliso | Namesilo是一家美国的域名注册商 |
| 3 | eName | 易名科技为国内知名的域名服务机构 |
| 4 | CloudFlare | Cloudflare 是一个全球性的云平台 |
+-----+------------+--------------------------------------------------+
4 rows in set (0.001 sec)
现在创建一个名为 ispsbak 的新表,并将 isps 表中的所有数据插入到新表中,可以使用以下 SQL 语句:
SELECT * INTO ispsbak FROM isps;
以下为带条件的示例:
SELECT name,intro INTO ispsbak FROM isps WHERE idx = 3;
使用注意事项 #
- 表结构:
SELECT INTO
会创建一个新表,并且新表的结构将基于选择的列和数据类型。 - 如果新表已经存在,
SELECT INTO
语句将失败。在这种情况下,可以使用INSERT INTO ... SELECT
语句。 SELECT INTO
语句在 SQL Server 中非常常用,但在 MySQL 和 PostgreSQL 中通常使用CREATE TABLE ... AS SELECT
语句。
MySQL 和 PostgreSQL中的替代方案 #
在 MySQL 和 PostgreSQL 中,可以使用 CREATE TABLE ... AS SELECT
来实现类似的功能:
MariaDB [dn]> CREATE TABLE ispsbak AS
-> SELECT *
-> FROM isps
-> WHERE idx != 3;
Query OK, 3 rows affected (0.013 sec)
Records: 3 Duplicates: 0 Warnings: 0
MariaDB [dn]> show tables;
+--------------+
| Tables_in_dn |
+--------------+
| dnl |
| isps |
| ispsbak |
+--------------+
3 rows in set (0.001 sec)
MariaDB [dn]> select * from ispsbak;
+-----+------------+--------------------------------------------------+
| idx | name | intro |
+-----+------------+--------------------------------------------------+
| 1 | West | 西部数码老牌互联网基础服务提供商 |
| 2 | Nameliso | Namesilo是一家美国的域名注册商 |
| 4 | CloudFlare | Cloudflare 是一个全球性的云平台 |
+-----+------------+--------------------------------------------------+
3 rows in set (0.000 sec)