Документация insert подробно описывает параметр REPLACE
INSERT OR REPLACE INTO tabname (QID,ANID,value) VALUES ('axo',3,45)
«ВСТАВИТЬ ИЛИ ЗАМЕНИТЬ» можно сократить до «ЗАМЕНИТЬ».
Пример в 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,anid,value) VALUES (?,?,?)");
$insert_update->execute('axo', 2, 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: %s\n", join(" - ", @row);
}
$select->finish;
$dbh->disconnect;
exit 0;
Создает следующий вывод, демонстрирующий обновление одной строки и вставку другой
Row: axo - 1 - 45
Row: axo - 2 - 500
Row: axo - 10 - 500