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,'第二行');
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
一定要用到触发器和存储过程吗?不能直接设置成默认值吗
#3
呵呵,不能,测试了一下不行
#4
嗯,知道了,果然是不行的
#5
测试可以这样 :
insert into table1c values (null,'第一行',(select rowid from table1c));
insert into table1c values (null,'第一行',(select rowid from table1c));
#6
sorry,刚刚测试,用ROWID可行
#7
只能用触发器。 没有办法
#8
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,'第二行');
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
一定要用到触发器和存储过程吗?不能直接设置成默认值吗
#3
呵呵,不能,测试了一下不行
#4
嗯,知道了,果然是不行的
#5
测试可以这样 :
insert into table1c values (null,'第一行',(select rowid from table1c));
insert into table1c values (null,'第一行',(select rowid from table1c));
#6
sorry,刚刚测试,用ROWID可行
#7
只能用触发器。 没有办法
#8
values中可以用到子查询吗,好像不行吧
#9
6楼的方法有误,只有用TRIGGER
#10
ROWID 试过,不行
#11
SQLite 中,只能用触发器来实现这种功能。
#12
考虑到有可能换数据库的情况,还是用程序实现了!