我在SQLite 3中有一个表,因此:
sqlite> .schema
CREATE TABLE table1 (id INTEGER PRIMARY KEY NOT NULL,
title TEXT UNIQUE NOT NULL,
priority INTEGER UNIQUE NOT NULL);
以下是一些示例数据,以供说明:
sqlite> SELECT * FROM table1;
id title priority
---------- ---------- ----------
1 a 1
2 b 2
3 c 3
4 d 4
我希望将priority
的所有单元格中的加1 priority > 1
。这是我的第一次尝试:
sqlite> UPDATE table1 SET priority = priority + 1 WHERE priority > 1;
Error: column priority is not unique
这可能会失败,大概是因为未按顺序进行更新,从而使UPDATE可以尝试将priority
列中的一个单元格设置为现有单元格的值。所以,这是我的第二次尝试:
sqlite> UPDATE table1 SET priority = priority + 1 WHERE priority > 1
ORDER BY priority DESC;
Error: near "ORDER": syntax error
这也失败了,大概是因为我的SQLite
3安装未使用SQLITE_ENABLE_UPDATE_DELETE_LIMIT选项进行编译。
因为我可能最终希望将我的SQL语句与Android上的SQLite一起使用,并且后者也没有启用SQLITE_ENABLE_UPDATE_DELETE_LIMIT,所以与重新启用SQLITE_ENABLE_UPDATE_DELETE_LIMIT的SQLite
3相比,我最好找到另一种方法来实现我的目标。那么,这是我的第三次尝试:
sqlite> BEGIN TRANSACTION;
UPDATE table1 SET priority = priority + 1 WHERE priority > 1;
END TRANSACTION;
Error: column priority is not unique
这也失败了,大概是因为SQLite在提交事务之前检查了唯一性约束。
三次尝试失败,但我确信这是可能的。问题是: 如何做到 ;在那里面, 怎么做最好 呢?
注意:我希望不要依赖任何未经检验的假设。
出现问题是正确的,因为SQLite会在每次更新行之后而不是在语句末尾或事务结束时检查约束。
我看到此问题的解决方法(SQLite的实现不UPDATE
正确)。假设该priority
列没有任何负值,我们可以将它们(负值)用作临时值,以避免UNIQUE
约束错误:
UPDATE table1 SET priority = - (priority + 1) WHERE priority > 1 ;
UPDATE table1 SET priority = - priority WHERE priority < 0 ;
我有一个Spring MVC应用程序,它使用Spring Data JPA作为我的JPA提供者来持久化Hibernate。我有一个数据库表,在列上有一个唯一的约束,因此为什么保存相应的实体可能会导致唯一的约束冲突。我想检测这是否发生在我的服务层中,以便我可以向用户呈现有意义的错误消息。以下是我的服务方法。 我的Spring Data JPA存储库看起来像这样: 现在,当发生唯一的约束冲突时,我得到
我错过了什么?我找不到任何处理这种异常的例子(例如,唯一的Contains)。
问题内容: 当违反唯一约束时,将引发a。但是可能有多种原因抛出异常。我如何才能发现违反了唯一约束? 问题答案: 我如何才能发现违反了唯一约束? 异常是链接在一起的,您必须递归调用以获取提供程序特定的异常(并可能转到),以将其转换为应用程序可以很好地为用户处理的内容。下面将打印异常链: 对于异常处理和“翻译”,您可以执行类似于Spring的操作(请参阅各种类,例如,以获取想法)。 所有这些都不是很好
这是我的限制: 该查询证明约束实际上不起作用: 下面是输出: 为什么唯一性没有被强制执行?
我有一个用户创建屏幕,它记录了各种用户详细信息以及名字和手机号码。我有一个对应的用户表,其中名字和手机号码构成一个复合唯一键。此表中还定义了其他完整性约束。 当在创建用户屏幕上输入违反此约束的用户数据时,需要向用户显示“用户友好”错误消息。 当这种违反发生时,我从MySQL数据库中得到的异常是: 有两个选项可以显示有意义的消息(例如:“错误:给定手机号码的用户名已存在,请更改其中一个”)。 选项1
我有一个实体,比如说雇员 with字段名标记为唯一。 提前谢谢你