我必须更新一个SQLite3数据库,该数据库将删除一个表,重新创建它,然后重新填充该表。我想确保所有其他访问数据库的进程都必须等待事务完成,以避免潜在的空表/丢失表准备就绪。
这时我的代码如下:
PRAGMA foreign_keys=OFF;
BEGIN TRANSACTION;
DROP TABLE IF EXISTS mytable;
CREATE TABLE mytable(key VARCHAR(256), value VARCHAR(256), PRIMARY KEY(key));
INSERT INTO "mytable" VALUES('key','value');
COMMIT
虽然这可行,但我不确定我是否真的在锁定数据库。我在网上找到了一些矛盾的信息,其中提到“ BEGIN TRANSACTION EXCLUSIVE”与“ BEGIN TRANSACTION”。
有人可以解释我需要哪种交易类型,以确保在锁定状态下没有其他读取成功吗?