SQLite:如果不存在,可以更新行或插入?
发布时间:2020-12-12 19:10:22 所属栏目:百科 来源:网络整理
导读:我确定我可以通过选择它来检查一行是否存在,但是我想知道是否有一个我只是不知道的一个渺小的方式 – 似乎是一个很常见的任务,可能是.这个SQLite表看起来像这样: rowID QID ANID value------ ------ ----- ------0 axo 1 451 axo 2 12 如果QID和ANID的组合
我确定我可以通过选择它来检查一行是否存在,但是我想知道是否有一个我只是不知道的一个渺小的方式 – 似乎是一个很常见的任务,可能是.这个SQLite表看起来像这样:
rowID QID ANID value ------ ------ ----- ------ 0 axo 1 45 1 axo 2 12 如果QID和ANID的组合已经存在,则应该更新该值,如果QID和ANID的组合不存在,则应该插入该值.虽然它简单的写道: SELECT * where QID = 'axo' and ANID = 3; 并检查该行是否存在,然后分支并插入/更新我不禁要寻找一个更好的方法.提前致谢! insert文档详细说明了一个REPLACE选项INSERT OR REPLACE INTO tabname (QID,ANID,value) VALUES ('axo',3,45) “INSERT OR REPLACE”可以缩写为REPLACE. Perl中的示例 修改了以下示例来使用复合主键 use strict; use DBI; ### Connect to the database via DBI my $dbfile = "simple.db"; unlink $dbfile; my $dbh = DBI->connect("dbi:SQLite:dbname=$dbfile"); ### Create a table $dbh->do("CREATE TABLE tblData (qid TEXT,anid INTEGER,value INTEGER,PRIMARY KEY(qid,anid))"); ### Add some data my $insert = $dbh->prepare("INSERT INTO tblData (qid,anid,value) VALUES (?,?,?)"); $insert->execute('axo',1,45); $insert->execute('axo',2,12); $insert->finish; ### Update data my $insert_update = $dbh->prepare("REPLACE INTO tblData (qid,?)"); $insert_update->execute('axo',500); $insert_update->execute('axo',10,500); $insert_update->finish; ### Print out the data my $select = $dbh->prepare("SELECT * FROM tblData ORDER BY 1,2"); $select->execute; while (my @row = $select->fetchrow_array()) { printf "Row: %sn",join(" - ",@row); } $select->finish; $dbh->disconnect; exit 0; 产生以下输出,演示一行更新和另一行的插入 Row: axo - 1 - 45 Row: axo - 2 - 500 Row: axo - 10 - 500 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- Ruby:遍历一个对象数组,忽略具有重复属性的项目
- c – VS2010在不同平台上生成的可执行文件是否应该不同?
- ruby-on-rails – 我应该在Rails 5中放置自定义验证器?
- c – 工厂方法模式
- source-maps – “无效映射”错误尝试使用babel需要hook和p
- swift – 类型’String’的值没有成员’characterAtIndex’
- ruby-on-rails – wicked_pdf不导入twitter bootstrap样式
- ruby-on-rails – after_destroy子回调可以保存父项的依赖关
- 跨域问题之jsonp的实现
- org.xml.sax.SAXParseException异常处理