MERGE 与 UPSERT 与批量导入导出与数据迁移

共 62 题
#

1. MERGE 与 CTE 联用,WITH src AS (...)、MERGE INTO ... USING src ON ...?

A CTE 不能作为 MERGE 源
B MERGE 只能对常量源
C 可用 CTE 构造 MERGE 源 ✓ 正确答案
D 与 CTE 无关
#

2. MERGE 的多分支语义,WHEN MATCHED THEN UPDATE / DELETE、WHEN NOT MATCHED THEN INSERT?

A 只能有一个分支
B 不能删除
C 可组合 UPDATE/DELETE/INSERT ✓ 正确答案
D 与匹配无关
#

3. MERGE 的并发问题,多行匹配时的行锁、唯一索引冲突?

A 不会死锁
B 无并发问题
C 多行匹配可能导致不确定更新 ✓ 正确答案
D 无需唯一约束
#

4. MySQL 8.0 仍无原生 MERGE,但 INSERT ... ON DUPLICATE KEY UPDATE 的等价实现?

A 用 MERGE 原生支持
B 用 ON DUPLICATE KEY UPDATE ✓ 正确答案
C 无需唯一索引
D 不支持更新
#

5. Oracle、SQL Server、DB2 的 MERGE 语法差异?

A 语法完全一致
B 仅 Oracle 支持
C 核心子句一致但有扩展差异 ✓ 正确答案
D 无标准
#

6. PostgreSQL 15 引入原生 MERGE(之前需用 UPSERT 或 CTE 模拟)的语法与限制?

A 一直原生支持
B 不能用于同步
C 无限制
D 15 引入原生 MERGE ✓ 正确答案
#

7. SQL:2003 引入 MERGE 语句的语义,源表与目标表的匹配(WHEN MATCHED / WHEN NOT MATCHED)?

A 无标准
B 由 SQL:92 引入
C 由 SQL:2003 引入 ✓ 正确答案
D 仅 Oracle 定义
#

8. UPSERT 的实现模式,INSERT ... ON CONFLICT、INSERT IGNORE、REPLACE INTO、UPSERT 函数(pg)?

A 各数据库语法一致
B MySQL 用 MERGE
C REPLACE 是就地更新
D PostgreSQL 用 ON CONFLICT ✓ 正确答案
#

9. MERGE 中 WHEN NOT MATCHED BY SOURCE 的语义(仅 SQL Server)?

A 处理目标有源无的行 ✓ 正确答案
B 处理源有目标无的行
C 所有数据库支持
D 只能 INSERT
#

10. UPSERT 中 RETURNING 的语义(PostgreSQL)?

A DO NOTHING 返回冲突行
B 不返回任何行
C DO UPDATE 返回更新行 ✓ 正确答案
D 仅 MySQL 支持
#

11. INSERT ... ON DUPLICATE KEY UPDATE 在 MySQL 中的限制(需要唯一索引)?

A 无冲突时更新
B 无需唯一索引
C 冲突时插入
D 依赖唯一索引检测冲突 ✓ 正确答案
#

12. MERGE INTO target USING source ON ... WHEN MATCHED THEN UPDATE 的语法?

A 用 WHERE 定义匹配
B 用 ON 定义匹配条件 ✓ 正确答案
C USING 是目标
D 无子句结构
#

13. MERGE 与 ON CONFLICT 的等价改写?

A 完全等价
B 无关联
C 简单同步可等价改写 ✓ 正确答案
D ON CONFLICT 支持多分支
#

14. MERGE 中 WHEN MATCHED 多次定义能否区分 UPDATE 与 DELETE?

A 只能有一个
B 顺序无关
C 可用条件区分 UPDATE/DELETE ✓ 正确答案
D 不能删除
#

15. MERGE 中 WHERE 条件能否引用源表与目标表?

A 可引用源表与目标表 ✓ 正确答案
B 只能引用源表
C 不能引用任何表
D 仅用于 INSERT
#

16. MERGE 中能否使用 DELETE + INSERT 组合?

A 不同行可分别 DELETE 或 INSERT ✓ 正确答案
B 同一行可同时 DELETE 和 INSERT
C 不能删除
D 不能插入
#

17. MERGE 的执行计划与 UPDATE/INSERT 差异?

A 与 UPDATE 完全一致
B 无执行计划
C 通过 Join 匹配源与目标 ✓ 正确答案
D 只做插入
#

18. MERGE 触发器的兼容性(Before/After)?

A 不触发触发器
B 只触发 INSERT
C 按分支触发相应 DML 触发器 ✓ 正确答案
D 与触发器无关
#

19. PostgreSQL 14 中模拟 MERGE 的 CTE 模式?

A 无法模拟
B 用单条 INSERT
C 用 CTE 先更新再插入 ✓ 正确答案
D 只需 DELETE
#

20. PostgreSQL 15 MERGE 的限制(不能更新同一行的多个分支)?

A 无限制
B 可对同一行多次更新
C 同一行不能经受多个分支操作 ✓ 正确答案
D 不能删除
#

21. REPLACE INTO 与 INSERT ... ON DUPLICATE KEY UPDATE 的差异?

A 两者等价
B ON DUPLICATE 是删除+插入
C ON DUPLICATE 副作用更大
D REPLACE 是删除+插入 ✓ 正确答案
#

22. SQL Server MERGE 的 WITH (HOLDLOCK) 选项?

A 释放锁
B 与锁无关
C 仅 PostgreSQL 支持
D 持有锁防止并发 ✓ 正确答案
#

23. COPY 与 INSERT 的性能差异,COPY 绕开 WAL 优化的 COPY FREEZE 选项?

A 标记行已冻结减少清理 ✓ 正确答案
B 增加 VACUUM 开销
C 与 INSERT 等价
D 无此选项
#

24. COPY 触发器的执行,BEFORE/AFTER ROW 触发器是否触发?

A COPY 不触发任何触发器
B PG 的 COPY 触发 ROW 触发器 ✓ 正确答案
C 触发器加快 COPY
D 与触发器无关
#

25. CSV 格式的选项(HEADER、QUOTE、DELIMITER、NULL STRING)?

A DELIMITER 表示引用符
B NULL 不能自定义
C HEADER 表示表头 ✓ 正确答案
D 无选项可配
#

26. MySQL LOAD DATA INFILE 的批量加载语法与性能优势?

A 比 INSERT 慢
B 不支持 CSV
C 只能导入单行
D 是最高效的批量导入 ✓ 正确答案
#

27. PostgreSQL COPY FROM/TO 的高效批量导入导出协议?二进制 TEXT/CSV 模式?

A BINARY 格式最高效 ✓ 正确答案
B 只有 TEXT 格式
C 二进制格式可读
D 无法导出
#

28. COPY FREEZE 选项对导入后 VACUUM 开销的优化?

A 增加 VACUUM 开销
B 与 VACUUM 无关
C 减少后续 VACUUM 开销 ✓ 正确答案
D 会破坏数据
#

29. MySQL 中 LOAD DATA、INSERT 多值、mysqlimport 工具的差异?

A mysqlimport 底层用 LOAD DATA ✓ 正确答案
B 多值 INSERT 最快
C 两者无关
D LOAD DATA 最慢
#

30. PostgreSQL 中 pg_bulkload、pgloader、COPY 工具的性能对比?

A pg_bulkload 性能最差
B pgloader 只能本地
C COPY 是标准内置加载 ✓ 正确答案
D 三者等价
#

31. 分批提交(batch commit)的边界,每批多少行事务合适?

A 越大越好
B 有固定最佳值
C 需权衡锁与回滚段 ✓ 正确答案
D 越小越好
#

32. 批量导入的性能优化,调整 shared_buffers、work_mem、maintenance_work_mem?

A 与内存无关
B 无需调优
C 导入前建全索引更快
D 增大 maintenance_work_mem 加速索引创建 ✓ 正确答案
#

33. 数据导出格式,CSV、JSON、XML、Parquet、Avro 的方言支持?

A CSV 最通用 ✓ 正确答案
B JSON 无支持
C Parquet 是数据库原生格式
D 各格式等价
#

34. 数据库迁移工具,pg_dump/pg_restore、mysqldump、pgloader、AWS DMS、Debezium 的取舍?

A pg_dump 用于异构迁移
B AWS DMS 是原生工具
C Debezium 是 CDC 实时同步 ✓ 正确答案
D 所有工具等价
#

35. COPY 与并发,COPY 时对表的锁行为?

A 加排他表锁 ✓ 正确答案
B 不加锁
C 只加读锁
D 允许并发写
#

36. COPY 与 NULL 的处理?CSV 的 NULL 字符串?

A NULL 无法处理
B CSV 中 NULL 固定
C 空字符串默认视为 NULL ✓ 正确答案
D 与 NULL 无关
#

37. LOAD DATA LOCAL INFILE 的安全与一致性问题,为何 LOCAL 绕过 secure_file_priv,客户端文件读取的注入风险与禁用策略?

A 从服务器端读文件
B 受 secure_file_priv 限制
C 无安全风险
D 有客户端文件读取风险 ✓ 正确答案
#

38. MySQL 的 SELECT ... INTO OUTFILE 等价?

A 导出查询结果到文件 ✓ 正确答案
B 与 COPY FROM 等价
C 无限制
D 导入数据
#

39. MySQL source 命令批量执行 SQL?

A 执行 SQL 脚本 ✓ 正确答案
B 导出数据
C 仅能执行单条
D 与文件无关
#

40. MySQL 的 mysqlpump 与 mysqldump 差异?

A 支持并行导出 ✓ 正确答案
B 在 8.0 中仍推荐
C 与 mysqldump 等同
D 无并行
#

41. Parquet/ORC 的 PostgreSQL 外部访问?

A 需扩展或工具 ✓ 正确答案
B 无法访问
C 原生直接支持
D 与 ORC 无关
#

42. PostgreSQL COPY 的二进制格式(BINARY)?

A 性能最高但不可读 ✓ 正确答案
B 可跨平台交换
C 无法使用
D 与文本格式等价
#

43. pg_restore 的 -j 并行恢复?

A 并行恢复加速 ✓ 正确答案
B 降低速度
C 仅单线程
D 与 DDL 无关
#

44. COPY ... FROM PROGRAM 从 shell 命令读取数据的应用?

A 从命令输出读取数据 ✓ 正确答案
B 只能读文件
C 无安全风险
D 仅导出
#

45. COPY 与 free space map、visibility map 的关系?

A COPY 会更新 FSM/VM ✓ 正确答案
B 只影响索引
C COPY 无关
D 无影响
#

46. COPY 与错误处理,ERRORS 子句(MAX_ERRORS)?

A 支持 MAX_ERRORS
B 忽略所有错误
C PG 原生 COPY 遇错即中止 ✓ 正确答案
D 无错误处理
#

47. 外部表(foreign table、file_fdw、mysql_fdw)的批量导入用法?

A file_fdw 读取文件 ✓ 正确答案
B 外部表不可查询
C 无法跨库
D 与 FDW 无关
#

48. COPY 与外部表(file_fdw)的取舍?

A file_fdw 落库
B COPY 一次性导入 ✓ 正确答案
C 两者等价
D COPY 不能持久化
#

49. mysqldump 的 --single-transaction 选项?

A 锁表导出
B 获得一致性快照 ✓ 正确答案
C 仅 MyISAM
D 阻塞写入
#

50. COPY 与流式导入,如何用 COPY 协议配合 pgcopydb/pg_dump 管道实现大库克隆与跨版本迁移?

A 必须用中间文件
B 无法跨版本
C 用管道避免中间文件 ✓ 正确答案
D pgcopydb 不用 COPY
#

51. COPY 能否指定列?COPY t(col1,col2) FROM stdin?

A 指定列报错
B 只能全列
C 可指定部分列 ✓ 正确答案
D 无关紧要
#

52. ETL 工具(Talend、Kettle、Airflow)与原生 COPY 的取舍?

A COPY 性能高但无转换 ✓ 正确答案
B ETL 工具性能更高
C 两者等价
D COPY 有复杂转换
#

53. pg_dump 与 pg_dumpall 的差异?

A pg_dump 备份全集群
B 两者等价
C pg_dumpall 备份全集群 ✓ 正确答案
D pg_dumpall 只备份单库
#

54. postgres_fdw 的 IMPORT FOREIGN SCHEMA?

A 只建单表
B 批量创建外部表 ✓ 正确答案
C 与 FDW 无关
D 无法过滤
#

55. 数据导入的一致性校验(行数、checksum)?

A 校验不可靠
B 只需比对行数
C 无需校验
D 可用 checksum 校验 ✓ 正确答案
#

56. COPY 与 ENCODING 选项?

A 与编码无关
B 指定文件编码 ✓ 正确答案
C 无法转换
D 只影响导出
#

57. COPY 与 WAL 写入的关系?

A COPY 不写 WAL
B 与崩溃恢复无关
C COPY 无 WAL 开销
D COPY 会写 WAL ✓ 正确答案
#

58. COPY 与事务的关系,COPY 在事务内执行时如何保证原子性,大批量导入与 WAL 写入(COPY vs INSERT)的性能差异?

A COPY 非原子
B COPY 可在事务内保证原子性 ✓ 正确答案
C COPY 不可回滚
D COPY 比 INSERT 慢
#

59. LOAD DATA 是否触发触发器?

A 无触发器
B 一定触发
C 与 INSERT 相同 ✓ 正确答案
D 默认不触发触发器
#

60. \copy 元命令(psql)的用法?

A 服务器端读文件
B 只能导出
C 与 COPY 无关
D 客户端读取本地文件 ✓ 正确答案
#

61. COPY 与压缩(gzip)?

A COPY 原生支持压缩
B 可用 PROGRAM 管道压缩 ✓ 正确答案
C 无法压缩
D 压缩无意义
#

62. 数据迁移的零停机方案(CDC、双写)?

A 用 CDC 实时同步 ✓ 正确答案
B 无法增量
C 与回切无关
D 必须停机