当前位置 : 主页 > 网络编程 > 其它编程 >

安卓数据库约束性问题

来源:互联网 收集:自由互联 发布时间:2023-07-02
感觉自己就是个坑师公的娃今天师公突然把我年初写的那部分代码拉出来了很明确地指着某一行告诉我那有逻辑问题。然后我对着屏幕做发呆状半天也没觉得有什么问题很明确地指着某
感觉自己就是个坑师公的娃今天师公突然把我年初写的那部分代码拉出来了很明确地指着某一行告诉我那有逻辑问题。然后我对着屏幕做发呆状半天也没觉得有什么问题很明确地指着某一行告诉我那有逻辑问题。

然后我对着屏幕做发呆状半天也没觉得有什么问题那不就是一个if-else判断语句阿

问题是这样的我们数据库数据有更新的时候UI上也会进行相应的更新我自己呢在数据库那是写了一个insert和一个update

我想着数据库里没这条数据的时候就insert有的时候就update但是没有考虑全条件。。。。导致师公莫名其妙地耗了好多流量然后这问题就被他给发现啦吐舌头吐舌头

看来以后用if-else的时候要谨慎些多考虑下条件

不过有问题也是好事好歹今天又学到了数据库的约束性问题。

当我们想要数据库中某个字段保持唯一性的时候除了主键可以使用UNIGUE这个关键字。

java创建数据库语句后面可以增加“UNIQUE列名ON CONFLICT REPLACE”

对于INSERT和UPDATE,关键词"ON CONFLICT"由"OR"替代这样语法显得自然。例如不用写"INSERT ON CONFLICT IGNORE"而是"INSERT OR IGNORE".二者表示相同的意思。

关于ON CONFLICT子句有五个选择ROLLBACK, ABORT, FAIL, IGNORE, 和REPLACE.缺省方案是ABORT.选项含义如下

ROLLBACK 当发生约束冲突立即ROLLBACK即结束当前事务处理命令中止并返回SQLITE_CONSTRAINT代码。若当前无活动事务(除了每一条命令创建的默认事务以外)则该算法与ABORT相同。 ABORT 当发生约束冲突命令收回已经引起的改变并中止返回SQLITE_CONSTRAINT。但由于不执行ROLLBACK所以前面的命令产生的改变将予以保留。缺省采用这一行为。 FAIL 当发生约束冲突命令中止返回SQLITE_CONSTRAINT。但遇到冲突之前的所有改变将被保留。例如若一条UPDATE语句在100行遇到冲突100th前99行的改变将被保留而对100行或以后的改变将不会发生。 IGNORE 当发生约束冲突发生冲突的行将不会被插入或改变。但命令将照常执行。在冲突行之前或之后的行将被正常的插入和改变且不返回错误信息。 REPLACE 当发生UNIQUE约束冲突先存在的导致冲突的行在更改或插入发生冲突的行之前被删除。这样更改和插入总是被执行。命令照常执行且不返回错误信息。当发生NOT NULL约束冲突导致冲突的NULL值会被字段缺省值取代。若字段无缺省值执行ABORT算法。 当冲突应对策略为满足约束而删除行时它不会调用删除触发器。但在新版中这一特性可能被改变。 INSERT或UPDATE的OR子句定义的算法会覆盖CREATE TABLE所定义的。ABORT算法将在没有定义任何算法时缺省使用。

【文章转 东台网站制作 http://www.1234xp.com/dongtai.html 提供,感恩】
网友评论