Mysql INSERT INTO SELECT 复制语句

前言

Insert是T-sql中常用的语句,INSERT INTO table(field1,field2,…) VALUES (value1,value2,…)这种形式的在应用程序开发中必不可少。但我们在开发、测试过程中,经常会遇到需要表复制的情况,如将一个表t1的数据的部分字段复制到表t2中,或者将整个表t1复制到表t2中,这时候我们就要使用INSERT INTO SELECT 语句了,我们一起来看看。

INSERT INTO SELECT 语句

语句形式为:INSERT INTO t2(f1,f2,…) SELECT v1,v2,… from t1

要求目标表t2必须存在,由于目标表t2已经存在,所以我们除了插入源表t1的字段外,还可以
插入常量。

# 创建表t1
CREATE TABLE t1
(
a varchar(10),
b varchar(10),
c varchar(10)
);

# 创建表t2
CREATE TABLE t2
(
a varchar(10),
c varchar(10),
d int
);

# 向t1中插入数据
INSERT INTO t1 VALUES('赵','德华','90');
INSERT INTO t1 VALUES('钱','德华','60');
INSERT INTO t1 VALUES('孙','德华','80');
INSERT INTO t1 VALUES('李','德华','70');

# 查看 t1和t2
SELECT * FROM t1;
SELECT * FROM t2;

# INSERT INTO SELECT语句复制表数据
INSERT INTO t2(a,c,d) SELECT a,c,5 FROM t1;

# 查看复制后的数据
SELECT * FROM t2;

温馨提示

MySQL不支持SELECT INTO语法

SELECT f1,f2 INTO t2 FROM t1;
### 使用 MySQL 的 `INSERT INTO SELECT` 语句 #### 基本语法 `INSERT INTO SELECT` 是一种强大的 SQL 语句,允许从一个表中选择数据并将这些数据插入到另一个表中。其基本语法如下: ```sql INSERT INTO target_table (column1, column2, ...) SELECT source_column1, source_column2, ... FROM source_table WHERE condition; ``` 此语法中的各部分含义分别为: - **target_table**: 数据要被插入的目标表。 - **source_table**: 提供数据的源表。 - **columns**: 列名列表,目标表和源表之间的列数以及兼容性需匹配。 - **condition**: 可选条件子句,用于过滤所选数据。 #### 示例说明 假设存在两个表:`employees` 和 `new_employees`。现在希望将某些符合条件的员工记录从 `employees` 表复制到 `new_employees` 表中。 以下是具体的实现方法[^1]: ```sql -- 将 employees 中 salary 大于 5000 的记录插入 new_employees INSERT INTO new_employees (id, name, position, salary) SELECT id, name, position, salary FROM employees WHERE salary > 5000; ``` 在此示例中: - `new_employees` 是目标表。 - `employees` 是源表。 - 条件 `salary > 5000` 被用来筛选哪些记录会被复制。 如果需要复制整个表的内容而不加任何条件,则可以省略 `WHERE` 子句: ```sql -- 不带条件的完整复制 INSERT INTO new_employees (id, name, position, salary) SELECT id, name, position, salary FROM employees; ``` #### 注意事项 1. **列的数量与顺序**:目标表和源表之间涉及的列数量应一致,并且它们的数据类型应当兼容。 2. **唯一键冲突**:如果目标表有主键或唯一索引约束,在执行该操作前务必确认不会违反这些约束[^3]。 3. **性能优化**:对于大规模数据迁移场景下,建议先禁用外键检查 (`SET FOREIGN_KEY_CHECKS = 0`) 或者批量提交事务来提升效率。 #### 实际应用案例 下面是一个更复杂的例子,展示如何跨数据库进行数据转移[^2]: ```sql -- 把 db1.products 表里的商品价格大于等于 100 的产品信息同步至 db2.inventory USE db2; INSERT INTO inventory (product_id, product_name, price, stock_quantity) SELECT p.product_id, p.product_name, p.price, IFNULL(s.stock_count, 0) AS stock_quantity FROM db1.products p LEFT JOIN db1.stocks s ON p.product_id = s.product_id WHERE p.price >= 100; ``` 在这个复杂查询里: - 我们通过连接多个表获取所需的信息。 - 如果某个产品的库存不存在,默认设置为零(`IFNULL(s.stock_count, 0)`). ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值