Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
更新attched sqlite数据库_Sql_Sqlite - Fatal编程技术网

更新attched sqlite数据库

更新attched sqlite数据库,sql,sqlite,Sql,Sqlite,我需要从另一个数据库更新sqlite db表。 我使用了下面的代码来复制它,但我无法使它在single.sqlite数据库有新行时更新 以下是我所拥有的: $db = new SQLite3("db/multi_db.db"); // copy/clone single.sqlite to multi_db.db $db->exec("ATTACH DATABASE 'db/single.sqlite' AS single"); $db->exec('CREATE TABLE "va

我需要从另一个数据库更新sqlite db表。 我使用了下面的代码来复制它,但我无法使它在single.sqlite数据库有新行时更新

以下是我所拥有的:

$db = new SQLite3("db/multi_db.db");
// copy/clone single.sqlite to multi_db.db
$db->exec("ATTACH DATABASE 'db/single.sqlite' AS single");
$db->exec('CREATE TABLE "vars" AS SELECT * FROM single."vars"');
// update multi_db with new rows from single.sqlite
$db->exec('UPDATE TABLE "vars" SELECT * FROM single."vars"');

我尝试了不同的更新方法,但没有任何效果。

看起来您的表拼写错误。我假设它应该是单身,而不是单身


您的更新命令无效

您可以使用:

$db->exec('INSERT INTO vars SELECT * FROM single.vars');
$db->exec('INSERT OR REPLACE INTO vars SELECT * FROM single.vars');
但请注意,如果目标表中已经存在具有相同rowid的行,则可能会发生冲突。要替换表上的值,可以使用:

$db->exec('INSERT INTO vars SELECT * FROM single.vars');
$db->exec('INSERT OR REPLACE INTO vars SELECT * FROM single.vars');

PS:创建一个新bd的副本非常有效,只是当single.sqlite db有新行时,更新不会发生。如果您尝试通过sqlite命令行工具,而不是通过代码,您也会遇到问题吗?也就是说,你能制作一个纯SQLite吗?这不是有效的。检查错误。不管怎样,你是如何区分新行和其他行的?@CL.你能说得更具体一点吗。我查看了文档,看不出错误在哪里。Thanks@CL.例如,rowid应该是区分新rowswa和其他rowswa的一种方法。Real table拼写正确。我更新了主线谢谢@Bernardo Ramos。工作完美。如果存在INSERT或REPLACE和DROP表并每次重新创建它,那么它们之间的性能差异如何?所以,从性能的角度来看,最好的方法是什么。首先删除表并创建它,还是使用INSERT或REPLACE INTO选项?什么选项更快?更具体地说,从性能的角度来看,什么是最好的方法:1。版本1:$db=newsqlite3db/multi_db.db$db->execDROP表格(如果存在变量)$db->execATTACH数据库“db/single.sqlite”作为单个$db->exec'createtablevaras-SELECT*fromsingle.vars';或2。版本2:$db=newsqlite3db/multi_db.db$db->execATTACH数据库“db/single.sqlite”作为单个$db->exec'createtablevaras-SELECT*fromsingle.vars'$db->exec'INSERT或REPLACE INTO vars SELECT*FROM single.vars';