文章摘要
这篇文章介绍了MySQL中两种常见的数据迁移语句:`SELECT INTO` 和 `INSERT INTO`,并详细解释了它们的区别、使用场景以及如何复制表的结构和数据。
1. **`SELECT INTO` 语句**:
- 用途:从一个表(`FROM` 表)复制数据并将其插入到另一个新表(`INTO` 表)中。
- 特点:
- 语法:
```sql
SELECT column_name(s) INTO new_table
FROM old_table;
```
- 新表的列结构由 `SELECT` 语句定义,可以使用 `AS` 子句重命名列。
- 如果不指定列名,默认复制所有列。
- `SELECT INTO` 语句会自动创建目标表。
2. **`INSERT INTO` 语句**:
- 用途:从一个表(`FROM` 表)复制数据并将其插入到一个已存在的表(`INTO` 表)中。
- 特点:
- 语法:
```sql
INSERT INTO target_table (column_name(s)) VALUES (value) FROM source_table;
```
- 不能自动创建目标表,需要目标表事先存在。
- 可以选择性地复制列:只复制部分列时,`INSERT` 语句中指定需要复制的列。
3. **主要区别**:
- `SELECT INTO` 语句的 `FROM` 表和 `INTO` 表必须具有相同的列结构。
- `INSERT INTO` 语句的 `FROM` 和 `INTO` 表可以有不同的列结构,但插入的列必须相同。
4. **复制表结构和数据**:
- **只复制表结构**:使用 `CREATE TABLE` 语句复制表的结构。
```sql
CREATE TABLE new_table
AS SELECT * FROM old_table;
```
- **只复制表数据**:
- 如果目标表结构与源表相同:
```sql
INSERT INTO new_table SELECT * FROM old_table;
```
- 如果目标表结构不同:
```sql
INSERT INTO new_table (col1, col2) SELECT col1, col2 FROM old_table;
```
5. **适用场景**:
- 使用 `SELECT INTO` 语句时,目标表必须是空表或尚未存在的表。
- 使用 `INSERT INTO` 语句时,目标表必须已存在。
这篇文章还提到了如何通过 `CREATE TABLE` 语句实现表的重写功能,以及如何在 `INSERT INTO` 语句中使用 `WHERE` 条件进一步限制数据插入范围。
目录1. SELECT INTO 语句1.1 SELECT INTO 语法2. INSERT INTO SELECT 语句2.1 INSERT INTO SELECT 语法3. select into from 和 insert into select 区别4. 复制表结构及其数据5.只复制表结构6.只复制表数据6.1 两个表结构一样总结
用途:SELECT INTO 语句从一个表复制数据,然后把数据插入到另一个新表中,表结构与查询结构一致。
PS:MySQL不支持SELECT INTO语法。
复制所有的列插入到新表中。
SELECT *
INTO newtable
FROM table1;
或者只复制希望的列插入到新表中:
SELECT column_name(s)
INTO newtable
FROM table1;
提示:新表将会使用 SELECT 语句中定义的列名称和类型进行创建。以使用 AS 子句来应用新名称。
INSERT INTO SELECT 语句从一个表复制数据,然后把数据插入到一个已存在的表中。
从一个表中复制所有的列插入到另一个已存在的表中:
INSERT INTO table2
SELECT * FROM table1;
只复制希望的列插入到另一个已存在的表中:
INSERT INTO table2
(column_name(s))
SELECT column_name(s)
FROM table1;
select into from 要求目标表不存在,因为在插入时会自动创建;
insert into select from 要求目标表存在。
create table table_name_new
as
select * from table_name_old;
原理就是使得where后边条件为假。
create table table_name_new as select * from table_name_old where 1=2;
或者
create table table_name_new like table_name_old;
insert into table_name_new select * from table_name_old;
6.2 两个表结构不一样
insert into table_name_new(column1,column2…) select column1,column2… from table_name_old;
只能插入相同字段数据。
到此这篇关于select into from和insert into select使用的文章就介绍到这了,更多相关select into from和insert into select内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
您可能感兴趣的文章:数据库插入数据之select into from与insert into select区别详解INSERT INTO SELECT语句与SELECT INTO FROM语句的一些区别insert into tbl() select * from tb2中加入多个条件