sqlite在非主键创建一个自增字段

sqlite 自增比较奇葩,自增字段必须建在主键上,但主键很重要。不是每种情况都是给自增去做。比如要实现replace into 时, 要主键作为更新标识。用自增很难实现。

开工:

1、建立一个主表,主表的ID是自增ID,但不是主键。而billno 是主键

CREATE TABLE base_user (

id INTEGER UNIQUE ON CONFLICT ROLLBACK,

billno TEXT (20) NOT NULL

DEFAULT ('')

PRIMARY KEY ON CONFLICT ROLLBACK,

userno TEXT (20) DEFAULT (''),

password TEXT (20) DEFAULT (''),

username TEXT (50) DEFAULT (''),

lastdate DATETIME,

admin TEXT (20) DEFAULT (''),

linecode TEXT (10) DEFAULT (''),

linename TEXT (30) DEFAULT ('')

);

2、选创建一个用于记录自动ID的辅助表。

CREATE TABLE tmp_newid (

id INTEGER,

billno TEXT (20) PRIMARY KEY

DEFAULT ('')

);

3、在base_user 表上创建触发器,从而实现ID的自增

CREATE TRIGGER autoincrement_user_id

AFTER INSERT

ON base_user

FOR EACH ROW

BEGIN

INSERT INTO tmp_newid (

id,

billno

)

SELECT (IFNULL(MAX(id), 0) + 1),

NEW.billno

FROM base_user;

UPDATE base_user

SET id = max(tmp_newid.id)

FROM tmp_newid

WHERE tmp_newid.billno = new.billno;

END;

3、向用户表添加数据试试

到此大功告成。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值