Ed *_*rty 10 sqlite relational
我正在使用SQLite,我有一个属性表和一个子属性表.每个子属性使用fkPropertyId列指向其父级.现在,要创建初始数据库,我有一个看起来像这样的脚本:
INSERT INTO property VALUES(1,.....);
INSERT INTO property VALUES(2,.....);
INSERT INTO property VALUES(3,.....);
INSERT INTO subproperty VALUES(1,.....,3);
INSERT INTO subproperty VALUES(2,.....,3);
INSERT INTO subproperty VALUES(3,.....,3);
INSERT INTO property VALUES(4,.....);
Run Code Online (Sandbox Code Playgroud)
现在,我想摆脱硬编码的rowId,所以它会是这样的:
INSERT INTO property VALUES(NULL,.....);
INSERT INTO property VALUES(NULL,.....);
INSERT INTO property VALUES(NULL,.....);
INSERT INTO subproperty VALUES(NULL,.....,X);
INSERT INTO subproperty VALUES(NULL,.....,X);
INSERT INTO subproperty VALUES(NULL,.....,X);
INSERT INTO property VALUES(NULL,.....);
Run Code Online (Sandbox Code Playgroud)
其中x指的是属性表中最后插入的rowId.现在,那是
(SELECT MAX(rowId) FROM property)
Run Code Online (Sandbox Code Playgroud)
是否有更好(更技术准确)的方式来编写这个脚本?
Ben*_*n S 30
使用last_insert_rowid功能:
SELECT last_insert_rowid();
Run Code Online (Sandbox Code Playgroud)
嗯,我想出的解决方案使用了last_insert_rowidBen S 的函数:
INSERT INTO property VALUES(NULL,.....);
INSERT INTO property VALUES(NULL,.....);
INSERT INTO subproperty VALUES(1,.....,-1);
INSERT INTO subproperty VALUES(2,.....,-1);
INSERT INTO subproperty VALUES(3,.....,-1);
INSERT INTO property VALUES(NULL,.....);
UPDATE subproperty SET fkPropertyId = (SELECT last_insert_rowid()) WHERE fkPropertyId=-1;
INSERT INTO property VALUES(NULL,.....);
Run Code Online (Sandbox Code Playgroud)
不确定这是否是最好的方法,但它对我有用,并且它不使用任何额外的表来存储临时数据。
| 归档时间: |
|
| 查看次数: |
15546 次 |
| 最近记录: |