sqlite 自动将现有的唯一列值设置为NULL

ojsjcaue  于 2022-12-13  发布在  SQLite
关注(0)|答案(1)|浏览(179)

我有一个SQLite表,它具有以下类型的模式:

CREATE TABLE Example
(
    unique_col VARCHAR UNIQUE,
    /* other columns here... */
);

我希望发生的是,当我将一个新行INSERT到这个表中时,如果它的unique_col列已经存在(即,插入将违反唯一性约束),那么我希望在插入发生之前,* 现有 * 的违规行将其unique_col设置为NULL。
我想我是在寻找某种“ON CONFLICT SET NULL“特性,但我在SQLite文档中找不到任何立即适用的特性。
我知道我可以直接在表上使用before-insert触发器来实现这一点,但是是否有一种方法可以在表模式中使用列约束或类似约束来实现我在文档中可能遗漏的功能?
谢谢你!

qq24tv8q

qq24tv8q1#

假设您已经使用如下语句创建了该表:

CREATE TABLE Example (unique_col TEXT UNIQUE, other_col TEXT);

使用返回要插入的行的CTE,并在INSERT语句中对表执行LEFT联接:

WITH cte(unique_col, other_col) AS (VALUES ('unique_value1', 'other_value1'))
INSERT INTO EXAMPLE(unique_col, other_col) 
SELECT NULLIF(c.unique_col, e.unique_col),
       c.other_col
FROM cte c LEFT JOIN Example e
ON e.unique_col = c.unique_col;

请参阅demo

相关问题