sqlite 字段默认值等于id值

时间:2022-09-06 15:07:20
sqlite 中
CREATE TABLE table1 (
id integer primary key autoincrement,
name text default '',
[index] integer default ROWID
)

有没有类似的功能,让 index 的值默认等于id,比如
insert into table1 (id,name) values (null,'第一行');
insert into table1 (id,name) values (null,'第二行');

我希望结果是
id  name   index
1   第一行 1
2   第二行 2

能实现吗?

12 个解决方案

#1


CREATE TABLE table1 ( 
id integer primary key autoincrement, 
name text default '', 
[index] integer  
)

trigger:
Begin Transaction;
Drop Trigger If Exists MAIN.[dd];
Create  Trigger MAIN.[dd] AFTER INSERT On [table1b] FOR EACH ROW
begin
 update table1b set 'index'=id  where id=new.id     ;
end;
Commit Transaction;

insert into table1 (id,name) values (null,'第一行'); 
insert into table1 (id,name) values (null,'第二行');

#2


引用 1 楼 wwwwb 的回复:
CREATE TABLE table1 (
id integer primary key autoincrement,
name text default '',
[index] integer 
)

trigger:
Begin Transaction;
Drop Trigger If Exists MAIN.[dd];
Create  Trigger MAIN.[dd] AFTER INSERT On [table1b] FOR EACH ROW
begin
update table1b set 'index'=id  where id=new.id    ;
end;
Commit Transaction;

insert into table1 (id,name) values (null,'第一行');
insert into table1 (id,name) values (null,'第二行');


一定要用到触发器和存储过程吗?不能直接设置成默认值吗

#3


呵呵,不能,测试了一下不行

#4


引用 3 楼 wwwwb 的回复:
呵呵,不能,测试了一下不行

嗯,知道了,果然是不行的

#5


测试可以这样 :
insert into table1c  values (null,'第一行',(select rowid from table1c));

#6


引用 4 楼 microsofttyc 的回复:
引用 3 楼 wwwwb 的回复:
 呵呵,不能,测试了一下不行

 嗯,知道了,果然是不行的

sorry,刚刚测试,用ROWID可行

#7


只能用触发器。 没有办法

#8


引用 5 楼 wwwwb 的回复:
测试可以这样 :
insert into table1c  values (null,'第一行',(select rowid from table1c));

values中可以用到子查询吗,好像不行吧

#9


6楼的方法有误,只有用TRIGGER

#10


ROWID 试过,不行

#11


SQLite 中,只能用触发器来实现这种功能。

#12


考虑到有可能换数据库的情况,还是用程序实现了!

#1


CREATE TABLE table1 ( 
id integer primary key autoincrement, 
name text default '', 
[index] integer  
)

trigger:
Begin Transaction;
Drop Trigger If Exists MAIN.[dd];
Create  Trigger MAIN.[dd] AFTER INSERT On [table1b] FOR EACH ROW
begin
 update table1b set 'index'=id  where id=new.id     ;
end;
Commit Transaction;

insert into table1 (id,name) values (null,'第一行'); 
insert into table1 (id,name) values (null,'第二行');

#2


引用 1 楼 wwwwb 的回复:
CREATE TABLE table1 (
id integer primary key autoincrement,
name text default '',
[index] integer 
)

trigger:
Begin Transaction;
Drop Trigger If Exists MAIN.[dd];
Create  Trigger MAIN.[dd] AFTER INSERT On [table1b] FOR EACH ROW
begin
update table1b set 'index'=id  where id=new.id    ;
end;
Commit Transaction;

insert into table1 (id,name) values (null,'第一行');
insert into table1 (id,name) values (null,'第二行');


一定要用到触发器和存储过程吗?不能直接设置成默认值吗

#3


呵呵,不能,测试了一下不行

#4


引用 3 楼 wwwwb 的回复:
呵呵,不能,测试了一下不行

嗯,知道了,果然是不行的

#5


测试可以这样 :
insert into table1c  values (null,'第一行',(select rowid from table1c));

#6


引用 4 楼 microsofttyc 的回复:
引用 3 楼 wwwwb 的回复:
 呵呵,不能,测试了一下不行

 嗯,知道了,果然是不行的

sorry,刚刚测试,用ROWID可行

#7


只能用触发器。 没有办法

#8


引用 5 楼 wwwwb 的回复:
测试可以这样 :
insert into table1c  values (null,'第一行',(select rowid from table1c));

values中可以用到子查询吗,好像不行吧

#9


6楼的方法有误,只有用TRIGGER

#10


ROWID 试过,不行

#11


SQLite 中,只能用触发器来实现这种功能。

#12


考虑到有可能换数据库的情况,还是用程序实现了!