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!
