android中sqlite联合主键,SQLite - 使用复合主键并自动增加两列

我有下表:

CREATE TABLE methods (

id INTEGER NOT NULL,

version INTEGER NOT NULL,

text TEXT NOT NULL,

PRIMARY KEY (id,version)

);

我希望列'id'在新行上为null时自动递增,我还希望将列'version'设置为1。

我想将自动增量值存储在sqlite_sequence中。

当插入一行'id'时,我希望'version'增加1。

我已经在应用程序级别复制了这个,但我需要在数据库级别,我知道我将不得不创建一个或两个触发器。

谢谢

更新:

这只是一个版本文档的模式,它可能不是最好的,也可能不安全。有没有人看到这个错误或更好的实施方法?

更新2:

我添加了一个“当前”列来跟踪当前版本。

更新时,我添加了一个查询来提取该ID的最高版本,然后添加1。

我还添加了另一个触发器来防止更新任何非当前版本。

我有这个工作:

CREATE TABLE IF NOT EXISTS 'methods' (

'id' INTEGER NULL,

'version' INTEGER NULL,

'current' INTEGER NOT NULL DEFAULT 0,

'name' TEXT NOT NULL,

PRIMARY KEY ('id','version')

);

INSERT INTO sqlite_sequence (name,seq) VALUES ('methods',0);

CREATE TRIGGER method_insert AFTER INSERT ON "methods" WHEN (NEW.id IS NULL)

BEGIN

UPDATE sqlite_sequence SET seq = seq + 1 WHERE name = 'methods';

UPDATE methods SET id = (

SELECT seq FROM sqlite_sequence WHERE name = 'methods'

), version = 1 WHERE ROWID = NEW.ROWID;

END;

CREATE TRIGGER method_update_not_current BEFORE UPDATE ON methods WHEN (OLD.current != 1)

BEGIN

SELECT RAISE(ABORT,'Only current version of method can be updated.');

END;

CREATE TRIGGER method_update AFTER UPDATE ON methods WHEN (OLD.id == NEW.id)

BEGIN

UPDATE methods SET current = 0 WHERE id = OLD.id;

UPDATE methods SET version = (

SELECT MAX(version) FROM methods WHERE id = OLD.id

) + 1 WHERE ROWID = OLD.ROWID;

INSERT INTO methods (id,version,name) VALUES (OLD.id,OLD.version,OLD.name);

END;

INSERT INTO methods (name) VALUES ('Test');

INSERT INTO methods (name) VALUES ('Test2');

UPDATE methods SET name = 'Tested' WHERE id = 1;

SELECT * FROM methods;

1|2|1|Tested

2|1|1|Test2

1|1|0|Test

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值