我需要大量填充我的SQLite数据库 - 理想情况下使用脚本而不是代码。
我想这样做(MySQL语法),但对于SQLite,但我不确定你是否可以在脚本中定义变量:
INSERT INTO `parent` (id, name) values(NULL, "some name!");
SET @parentId= last_insert_rowid();
INSERT INTO `child` (id, parentId, name, ) values (NULL, @parentId, 'some name!);
当我尝试在我的SQLite脚本中声明变量时,SQLite会抛出错误。这可以在SQLite中完成吗?
答案 0 :(得分:1)
对于这种情况,您可以使用函数last_insert_rowid()
而不使用脚本var:
insert into parent (id, name) values (NULL, 'some name!');
然后:
insert into child (id, parentId, name) values (NULL, last_insert_rowid(), 'child name!');
转录物:
SQLite version 3.7.6.3
sqlite> create table parent (id integer primary key, name);
sqlite> create table child (id integer primary key, parentId integer, name);
sqlite> insert into parent (id, name) values (NULL, 'some name!');
sqlite> insert into child (id, parentId, name) values (NULL, last_insert_rowid(), 'child name!');
sqlite> select * from parent;
1|some name!
sqlite> select * from child;
1|1|child name!
sqlite>
如果您需要将值保持一段时间(例如通过多个插入),请使用临时表:
sqlite> create temp table stash (id integer primary key, parentId integer);
sqlite> insert into parent (id, name) values (NULL, 'another name!');
sqlite> replace into stash values (1, last_insert_rowid());
sqlite> insert into child (id, parentId, name) values (NULL, (select parentID from stash where id = 1), 'also a name!');
sqlite> select * from parent;
1|some name!
2|another name!
sqlite> select * from child;
1|1|child name!
2|2|also a name!
sqlite>
答案 1 :(得分:0)
不幸的是,您无法在SQLite脚本中声明此类变量。此外,AFAIK所有声明除第一个之外不会被执行。另请查看HERE