加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读