本文讨论SQLite3数据库表数据的添加、修改和删除操作,包括insert into语句、update语句、delete语句的基本应用及语法变形。
数据表添加记录时主要使用insert into语句,基本应用格式如下:
insert into <表> (字段1,字段2,...)values(值1,值2,...);
其中,<表>指定数据表的名称,两组括号中的字段和值要一一应用。
接下来使用t1表进行测试,其创建语句如下:
create table t1( f1 text unique not null, f2 integer check(f2 in (0,1,2)) default 0, f3 text, f4 text);
如果t1表已存在,可以通过“delete from t1;”语句删除其中的测试数据,或使用"drop table t1;"语句删除表后重新创建。
下面的代码会在t1表中添加一条记录,并使用last_insert_rowid()函数返回新记录的ID字段(rowid)数据。
insert into t1(f1,f2) values('user01',1); select last_insert_rowid();
如果t1表为空表,添加第一条记录的rowid字段数据为1。
insert into语句中的values关键字后还可以使用多组数据同时添加多条记录,如下面的代码。
insert into t1(f1,f2) values('user02',2), ('user03',0); select changes();
执行代码会向t1表中添加两条记录,并显示2,其中,changes()函数可以返回本次事务中insert、update、delete命令改变数据的行数。
此外,total_changes()函数可以返回本次数据库连接以来,insert、update、delete命令改变数据行数量的合计。
insert into语句还有一些变形,如:
下面的代码会根据t1表的f1字段数据判断是直接添加数据还是删除后添加新记录。
replace into t1(f1,f2,f4) values('user02',0,'111');
执行语句后,可以使用“select rowid,* from t1;”语句查询t1表记录,查询结果如下图的示。
请注意,t1表中rowid字段为2的记录已经删除,而新的f1字段为'user02'的记录rowid字段数据为4,即添加了新的记录。
修改表数据时使用update语句,应用格式如下:
update <表> set 字段1=值1,字段2=值2,... where <条件>;
请注意,虽然使用where关键字指定数据更新条件是可选的,但需要谨慎操作,如果不指定更新条件,表中所有记录的数据都会被更新,应确认操作目的是否真的是这样。一般来讲,如果需要更新一条记录的数据,可以使用主键或唯一键字段数据作为更新条件,如下面的代码可以更新f1字段为'user03'的记录数据。
update t1 set f2=0, f3='20206-9-15 15:31:09', f4='222' where f1='user03';
执行代码会更新f1字段为'user03'记录的f2、f3、f4字段数据。可以使用“select rowid,* from t1;”语句查询t1表的数据,结果如下图所示。
讨论使用insert语句添加记录时,replace(insert or replace)语句可以在主键或唯一键字段数据不存在时添加记录,主键或唯一键数据存在时删除原记录并添加新的记录;而实际工作中,可能需要的操作是:当主键或唯一键数据存在时更新记录,不存在时添加记录,此时可以在insert语句后使用on conflict(pk) do update语句,其中,conflict用于指定主键或唯一键字段,即可能产生数据冲突的字段。下面的代码演示了相关操作。
insert into t1(f1,f4)values('user03','111') on conflict(f1) do update set f4='111';
代码中会以f1字段(唯一键字段)数据作为记录是否存在的依据,本例,f1字段为'user03'的记录已经存在,会执行do关键字后的update操作,即将f4字段数据更新为'111'。执行操作后,t1表的数据如下图所示。
下面的代码演示了主键或唯一键数据不存在时的添加操作。
insert into t1(f1,f4)values('user04','222') on conflict(f1) do update set f4='222';
执行代码后,t1表的数据如下图所示,其中rowid为5的记录为新增记录。
删除数据时使用delete语句,应用格式如下:
delete from <表> where <条件>;
删除语句比较简单,只需要设置表名和删除条件即可。请注意,delete语句中的where关键字和数据删除条件同样为可选,不指定条件时会删除表的所有数据,应确认操作目的是否确实如此。同样的,如果需要删除一条记录,使用主键或唯一键字段作为条件是比较常见的操作,如下面的代码可以从t1表中删除f1字段为'user04'的记录。
delete from t1 where f1='user04';
下一篇文章会讨论数据的查询、排序和联合操作,还会有更多条件设置的讨论和演示。