SQLITE 批量更新语句

Posted

技术标签:

【中文标题】SQLITE 批量更新语句【英文标题】:SQLITE bulk UPDATE statement 【发布时间】:2013-03-19 14:08:57 【问题描述】:

我想执行许多这样的 SQL UPDATE 语句:

UPDATE cityd SET time_zone='-7.000000' WHERE locId = 173567;
UPDATE cityd SET time_zone='-8.000000' WHERE locId = 173568;
UPDATE cityd SET time_zone='-6.000000' WHERE locId = 173569;
UPDATE cityd SET time_zone='-5.000000' WHERE locId = 173570;
UPDATE cityd SET time_zone='-6.000000' WHERE locId = 173571;

我想优化事务时间,所以我需要使用 BEGIN TRANSACTION/COMMIT 对。如何在 SQLtite Manager 中用 SQL 语法编写?

编辑: 当我在 SQLite Manager 中使用标准语法时,我收到以下错误消息: "SQLiteManager: BEGIN TRANSACTION; [不能在事务中启动事务"

【问题讨论】:

所以运行 SQL 语句的代码已经在它们周围放置了一个事务。因此,在这种情况下,您不需要围绕它们包装交易...... 【参考方案1】:

根据SQL Documention,CASE有两种支持的语法

CASE x WHEN w1 THEN r1 WHEN w2 THEN r2 ELSE r3 END

CASE WHEN x = w1 THEN r1 WHEN x = w2 THEN r2 ELSE r3 END

因此您的多个UPDATE 语句可以进一步简化为

UPDATE  cityd
SET     time_zone = CASE locId
                        WHEN 173567 THEN '-7.000000'
                        WHEN 173568 THEN '-8.000000'
                        WHEN 173569 THEN '-6.000000'
                        WHEN 173570 THEN '-5.000000'
                        WHEN 173571 THEN '-6.000000'
                    END
WHERE   locId IN (173567, 173568, 173569, 173570, 173571)

【讨论】:

非常感谢,它真的帮助了我。我正在使用 sqlcipher,我正在创建一个保存在列中的随机标志。【参考方案2】:
BEGIN TRANSACTION;
.....YOUR SQL Statements here

COMMIT;

【讨论】:

当我在 SQLite 管理器中输入此内容时,我收到此错误:“SQLiteManager: BEGIN TRANSACTION; [无法在事务中启动事务” 看起来 SQLiteManager 默认在事务中运行您的 SQls,但我不确定。

以上是关于SQLITE 批量更新语句的主要内容,如果未能解决你的问题,请参考以下文章

Mybatis实现批量更新sql语句(SSM实现批量更新sql语句)

Mybatis实现批量更新sql语句(SSM实现批量更新sql语句)

MySQL批量插入批量更新及批量删除语句

为啥批量插入/更新更快?批量更新如何工作?

使用 where 语句批量更新 mysql

sql server有批量插入和批量更新的sql语句吗