# 1. PostgreSQL 原生 boolean(true/false/NULL 三值)与 MySQL 用 TINYINT(1) 模拟布尔在存储、比较语义与驱动映射(JDBC tinyInt1isBit)上有何差异与迁移陷阱? A 排序 B 字符集 C 时区 D TINYINT(1) 是否映射为 Java boolean ✓ 正确答案
# 2. 为什么布尔列只有两三个取值、直接建普通 B-Tree 索引通常无意义(选择性过低)?如何用部分索引(WHERE flag = true)或位图类扫描替代? A 全表索引 B 部分索引 ✓ 正确答案 C 无索引 D 全文索引
# 3. 布尔表达式与三值逻辑如何组合(true AND unknown = unknown、false AND unknown = false、true OR unknown = true)?这对 WHERE 过滤与 CHECK 约束有何影响? A 违反约束 B 报错 C 视为通过 ✓ 正确答案 D 不确定
# 4. bit/varbit 位串类型的存储方式与位操作符(&、|、#、<<、>>、bit_count)有哪些?权限位掩码、特性开关(feature flags)场景如何建模? A & ✓ 正确答案 B | C # D <<
# 5. MySQL 的 BIT(64) 与 TINYINT(1) 有何区别?为什么 JDBC/客户端读取 BIT 列常得到二进制字面量(b'...')或乱码,如何正确转换? A 无需转换 B LENGTH(col) C CHAR(col) D CAST(col AS UNSIGNED) ✓ 正确答案
# 6. ORM 中布尔映射的常见坑(MySQL 存 0/1 而 PG 存 true/false、Java Boolean 包装类与数据库 NULL、Hibernate 方言差异)有哪些? A 方言不同 ✓ 正确答案 B 字符集 C 时区 D 索引
# 7. 复合唯一约束中 NULL 的语义差异(MySQL 允许多个 NULL 与 SQL Server 只允许一个)及空值业务键的处理 A 禁止 NULL B 只允许一个 NULL C 允许多个 NULL ✓ 正确答案 D NULL 视为相等
# 8. 布尔与整数互转(ALTER COLUMN ... USING col::boolean)时哪些值转为 true/false?空字符串转换为何报错? A 转为 false B 转为 true C 转为 NULL D 报错 ✓ 正确答案
# 11. 外键参照动作 NO ACTION 与 RESTRICT 的本质区别是什么(NO ACTION 可在 DEFERRABLE 约束下推迟到事务末尾检查)?CASCADE/SET NULL/SET DEFAULT 各自适用与风险? A 完全相同 B RESTRICT 可推迟 C NO ACTION 可在 DEFERRABLE 下推迟检查 ✓ 正确答案 D NO ACTION 不检查
# 12. PostgreSQL 如何用 ALTER TABLE ADD CONSTRAINT ... NOT VALID 再 VALIDATE CONSTRAINT 为大表在线添加外键/CHECK?两阶段分别持有什么锁、为何能避免长锁? A ROW EXCLUSIVE B ACCESS EXCLUSIVE C SHARE UPDATE EXCLUSIVE ✓ 正确答案 D 无锁
# 13. 排他约束 EXCLUDE USING gist (room_id WITH =, period WITH &&) 如何实现“会议室时段不重叠”?为什么需要 btree_gist 扩展把等值操作纳入 GiST? A pg_trgm B postgis C hstore D btree_gist ✓ 正确答案
# 14. 为什么 CHECK 约束只能引用本行列、不能引用其他表或子查询?跨行/跨表完整性(如账户借贷合计为零)有哪些替代手段(约束触发器、排他约束、应用层)? A CHECK 约束 B 约束触发器或应用层校验 ✓ 正确答案 C NOT NULL D 唯一约束
# 15. PostgreSQL 为什么不自动为外键列创建索引?外键列缺索引时,父表 DELETE/UPDATE 为何会引发子表全表扫描与锁排队(甚至死锁)? A 直接删除 B 全表扫描子表检查引用 ✓ 正确答案 C 报错 D 无影响
# 16. CHECK 约束如何处理 NULL(CHECK (col > 0) 在 col 为 NULL 时视为通过而非违例)?需要禁止空值时应如何配合 NOT NULL? A 加 PRIMARY KEY B 加 UNIQUE C 加 NOT NULL ✓ 正确答案 D 无需处理
# 17. 约束触发器(CONSTRAINT TRIGGER,可 DEFERRABLE)与普通触发器、CHECK 约束在复杂校验逻辑上的取舍是什么? A CHECK 约束 B 普通触发器 C 约束触发器(DEFERRABLE) ✓ 正确答案 D 唯一约束
# 19. 外键与分区表有哪些限制(PostgreSQL 12+ 才支持分区表作为被引用端、跨分区更新的外键行为,MySQL 分区表不支持外键)? A MySQL 分区表不支持外键 ✓ 正确答案 B 所有数据库都支持 C PG 所有版本都支持 D 无限制
# 20. MySQL 8.0.16 起才真正强制执行 CHECK 约束,之前版本为何被静默忽略?与 PostgreSQL 的报错行为有何差异? A 自动修复 B 强制执行 C 报错 D 被静默忽略 ✓ 正确答案
# 22. 为大表添加外键前,如何先查出违反引用的“孤儿数据”(LEFT JOIN ... IS NULL / NOT EXISTS)并清理? A FULL JOIN B LEFT JOIN ... IS NULL ✓ 正确答案 C INNER JOIN D CROSS JOIN