SQL必知必会-读书笔记(十一)
SQL必知必会-读书笔记(十一)
在 MySQL 中,INSERT
语句可以使用 SELECT
子句来插入数据,但并不是所有的 SELECT
选项都可以直接用于 INSERT ... SELECT
语句中。以下是一些常见的 SELECT
选项及其在 INSERT ... SELECT
语句中的适用性:
可以使用的 SELECT
选项
基本
SELECT
子句:1
2
3
4INSERT INTO target_table (column1, column2, column3)
SELECT column1, column2, column3
FROM source_table
WHERE condition;JOIN
操作:1
2
3
4
5INSERT INTO target_table (column1, column2, column3)
SELECT t1.column1, t1.column2, t2.column3
FROM table1 t1
JOIN table2 t2 ON t1.id = t2.id
WHERE condition;聚合函数:
1
2
3
4INSERT INTO target_table (column1, column2)
SELECT MAX(column1), COUNT(column2)
FROM source_table
WHERE condition;子查询:
1
2
3
4INSERT INTO target_table (column1, column2)
SELECT column1, (SELECT column2 FROM another_table WHERE condition)
FROM source_table
WHERE condition;UNION
操作:1
2
3
4INSERT INTO target_table (column1, column2)
SELECT column1, column2 FROM table1
UNION
SELECT column1, column2 FROM table2;
不可以直接使用的 SELECT
选项
**
FOR UPDATE
和LOCK IN SHARE MODE
**:
这些选项用于锁定行,通常在事务中使用,但不能直接用于INSERT ... SELECT
语句中。1
2
3
4
5-- 错误示例
INSERT INTO target_table (column1, column2)
SELECT column1, column2
FROM source_table
FOR UPDATE;**
INTO OUTFILE
和INTO DUMPFILE
**:
这些选项用于将查询结果导出到文件,不能用于INSERT ... SELECT
语句中。1
2
3
4
5-- 错误示例
INSERT INTO target_table (column1, column2)
SELECT column1, column2
FROM source_table
INTO OUTFILE '/path/to/file.csv';**
PROCEDURE
和SQL_CALC_FOUND_ROWS
**:
这些选项有特定用途,不能直接用于INSERT ... SELECT
语句中。1
2
3
4
5-- 错误示例
INSERT INTO target_table (column1, column2)
SELECT SQL_CALC_FOUND_ROWS column1, column2
FROM source_table
WHERE condition;
总结
INSERT ... SELECT
语句可以使用大多数标准的SELECT
子句,包括JOIN
、聚合函数、子查询和UNION
。- 不能使用涉及锁定、文件导出或特定过程的
SELECT
选项。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 CautionX!