这是我的db表模式,
S_DB_Column _db_ott_option[N_DB_OTT_OPTION] =
{
{"int", "ott_param_type", "%d"},
{"int", "ott_param_id", "%d"},
{"int", "ott_param_value", "%d"},
{"char (128)", "ott_param_name", "%Q"},
};我想在db中控制电影字幕pid。DB使用自动增量。
例如,我的查询如下,
insert or replace into _ottsubt ( ott_param_type, ott_param_id, ott_param_value, ott_param_name ) values ( 0, 9291, 8190, 'Movie 1' );
insert or replace into _ottsubt ( ott_param_type, ott_param_id, ott_param_value, ott_param_name ) values ( 0, 9291, 260, 'Movie 1' );记录在表中复制,
如果存在相同的记录,我希望进行更新,如果不存在相同的记录,则希望插入。
发布于 2018-12-24 06:39:14
您的问题是,插入的列都没有唯一的约束。
我相信你想用以下方法来创建表格:
create table if not exists _ottsubt(id INTEGER PRIMARY KEY, ott_param_type int, ott_param_id int UNIQUE, ott_param_value int, ott_param_name char (128));那么上面的内容就会起作用。
工作实例:-
drop table if exists _ottsubt;
create table if not exists _ottsubt(id INTEGER PRIMARY KEY AUTOINCREMENT, ott_param_type int, ott_param_id int UNIQUE, ott_param_value int, ott_param_name char (128));
insert or replace into _ottsubt ( ott_param_type, ott_param_id, ott_param_value, ott_param_name ) values ( 0, 9291, 8190, 'Movie 1' );
insert or replace into _ottsubt ( ott_param_type, ott_param_id, ott_param_value, ott_param_name ) values ( 0, 9291, 260, 'Movie 1' );
SELECT * FROM _ottsubt;结果:-

或者,您可以删除id列,而使用(以及rowid的别名)将ott_parm_id作为主键:-
create table if not exists _ottsubt(ott_param_type int, ott_param_id int INTEGER PRIMARY KEY, ott_param_value int, ott_param_name char (128));AUTOINCREMENT关键字会增加额外的CPU、内存、磁盘空间和磁盘I/O开销,如果不是严格需要的话,应该避免。通常是不需要的。
https://stackoverflow.com/questions/53909888
复制相似问题