19、IF NOT EXISTS 条件判断子句

1、IF NOT EXISTS

是一个条件判断子句,用于在执行操作(如创建表、插入数据等)之前检查目标对象或记录是否已经存在

  • 如果不存在,则执行操作;
  • 如果已存在,则跳过操作而不报错。

目的是:

  • 避免重复操作导致的错误(如“对象已存在”异常)
  • 提升脚本的幂等性(多次运行结果一致,安全可靠)
  • 简化逻辑,无需手动捕获异常或预先查询

1. 创建表(防止重复创建)

-- MySQL / PostgreSQL / SQLite
CREATE TABLE IF NOT EXISTS users (
    id INT PRIMARY KEY,
    name VARCHAR(50)
);
  • 若 users 表已存在 → 静默跳过,不报错。
  • 若不存在 → 创建表。

2. 条件插入(防止重复插入)

-- 通用写法(兼容多数数据库)
INSERT INTO users (id, name)
SELECT 100, 'Alice'
WHERE NOT EXISTS (
    SELECT 1 FROM users WHERE id = 100
);
  • 只有当 id = 100 的用户不存在时,才插入。
  • 安全、原子、无需事务外额外检查。

注意:这里的 IF NOT EXISTS 逻辑是通过 WHERE NOT EXISTS (...) 实现的,而不是直接写成 INSERT IF NOT EXISTS ...(后者语法并不存在于标准 SQL)。

 

posted @ 2025-11-19 15:48  chao_xiong  阅读(7)  评论(0)    收藏  举报