插入或更新条目,但由于违反唯一约束而失败

扬·加森(Jan Gassen)

想象一个这样的表:

+-----+-------+
| id  | value |
+-----+-------+ 
| id1 | val1  |
| id2 | val2  |
+-----+-------+

idisPRIMARY KEYvalue具有UNIQUE约束。

我想做的是使用一个查询,该查询基于其主键插入或更新条目,但是如果违反了唯一约束,则查询失败。

例如,如果我尝试插入id1, val2,我希望查询失败,而插入id1, val3应更新第一行。

但是我在sqlite3中观察到的是,如果我使用INSERT OR REPLACE插入id1, val2,它将替换两个现有条目。我也看过ON CONFLICTsqlite子句,但是似乎没有办法区分UNIQUEPRIMARY KEY约束违规。

有什么办法可以用sqlite做这样的事情,或者是否有另一种方法可以解决这样的情况?

扬·加森(Jan Gassen)

您可以通过如下创建表来实现此目的:

CREATE TABLE test (
   id INTEGER, 
   value VARCHAR(32) UNIQUE ON CONFLICT FAIL, 
   PRIMARY KEY(Id) ON CONFLICT REPLACE
);

关键是ON CONFLICT为不同的列定义不同的子句。PRIMARY KEY(Id) ON CONFLICT REPLACE在插入具有冲突PK的新记录时,将导致sqlite替换记录,而value VARCHAR(32) UNIQUE ON CONFLICT FAIL在插入value违反UNIQUE约束的条件导致sqlite失败

当插入具有相同主键的新记录时,这将更新现有值,但是如果您尝试插入具有不同主键和相同值的两条记录,它将失败。

举个例子

INSERT INTO test VALUES (1, "test");
INSERT INTO test VALUES (1, "update");

将导致

SELECT * FROM test;
1|update

但是用新的PK插入相同的值

INSERT INTO test VALUES (2, "update");

将导致Error: UNIQUE constraint failed: test.value

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Mysql错误1062(23000):重复的条目。更新不会违反唯一约束的行

来自分类Dev

违反唯一约束

来自分类Dev

违反Oracle SQL唯一约束

来自分类Dev

重复键违反唯一约束

来自分类Dev

由于列的值太大而违反了唯一约束 (Oracle)

来自分类Dev

插入并选择Oracle:仅插入ID,且不违反唯一约束

来自分类Dev

PostgreSQL的WSO2 DAS事件插入错误(重复的键值违反了唯一约束)

来自分类Dev

勺式转换的更新给出“重复的键值违反了唯一约束”

来自分类Dev

唯一约束与插入之前的检查

来自分类Dev

SQL插入的唯一约束-ORACLE

来自分类Dev

SQLiteConstraintException:唯一约束失败

来自分类Dev

SQLite IntegrityError:唯一约束失败:

来自分类Dev

唯一约束失败 - Django

来自分类Dev

Flutter DatabaseException(唯一约束失败)

来自分类Dev

Oracle / J2EE Hibernate:ORA-00001:由于HBM生成序列而违反了唯一约束

来自分类Dev

SQLAlchemy IntegrityError重复键违反唯一约束

来自分类Dev

休眠:重复的键值违反了集合的唯一约束

来自分类Dev

合并Upsert而不违反唯一约束

来自分类Dev

grails / gorm多列唯一约束违反

来自分类Dev

Django:重复的键值违反了唯一约束

来自分类Dev

如何从JPA唯一约束违反中获取价值?

来自分类Dev

重复的键值违反了SaveChangesAsync的唯一约束

来自分类Dev

ORA-00001:违反唯一约束pk

来自分类Dev

Heroku重复键值违反唯一约束(django)

来自分类Dev

导入的数据,重复的键值违反了唯一约束

来自分类Dev

违反唯一约束后,事务仍然提交

来自分类Dev

Django:重复的键值违反了唯一约束

来自分类Dev

BatchUpdateException重复键值违反唯一约束

来自分类Dev

唯一约束违反了oracle错误。如何在python中获取违规的插入语句?

Related 相关文章

  1. 1

    Mysql错误1062(23000):重复的条目。更新不会违反唯一约束的行

  2. 2

    违反唯一约束

  3. 3

    违反Oracle SQL唯一约束

  4. 4

    重复键违反唯一约束

  5. 5

    由于列的值太大而违反了唯一约束 (Oracle)

  6. 6

    插入并选择Oracle:仅插入ID,且不违反唯一约束

  7. 7

    PostgreSQL的WSO2 DAS事件插入错误(重复的键值违反了唯一约束)

  8. 8

    勺式转换的更新给出“重复的键值违反了唯一约束”

  9. 9

    唯一约束与插入之前的检查

  10. 10

    SQL插入的唯一约束-ORACLE

  11. 11

    SQLiteConstraintException:唯一约束失败

  12. 12

    SQLite IntegrityError:唯一约束失败:

  13. 13

    唯一约束失败 - Django

  14. 14

    Flutter DatabaseException(唯一约束失败)

  15. 15

    Oracle / J2EE Hibernate:ORA-00001:由于HBM生成序列而违反了唯一约束

  16. 16

    SQLAlchemy IntegrityError重复键违反唯一约束

  17. 17

    休眠:重复的键值违反了集合的唯一约束

  18. 18

    合并Upsert而不违反唯一约束

  19. 19

    grails / gorm多列唯一约束违反

  20. 20

    Django:重复的键值违反了唯一约束

  21. 21

    如何从JPA唯一约束违反中获取价值?

  22. 22

    重复的键值违反了SaveChangesAsync的唯一约束

  23. 23

    ORA-00001:违反唯一约束pk

  24. 24

    Heroku重复键值违反唯一约束(django)

  25. 25

    导入的数据,重复的键值违反了唯一约束

  26. 26

    违反唯一约束后,事务仍然提交

  27. 27

    Django:重复的键值违反了唯一约束

  28. 28

    BatchUpdateException重复键值违反唯一约束

  29. 29

    唯一约束违反了oracle错误。如何在python中获取违规的插入语句?

热门标签

归档