在sqlite3中切换值

时间:2012-11-22 00:46:07

标签: sqlite

我的表格中有一个名为status的列,数据类型为CHARACTER。我希望做到以下几点。

  

如果主键不存在行,请在其中插入“active”   status。如果某行已有主键条目,则切换   status。使用ativenot_active值进行切换。

目前我正在通过编写多个查询来完成它。有没有像Mysql一样的单一查询?

1 个答案:

答案 0 :(得分:1)

SQLite没有IF之类的控制逻辑命令,因为这在嵌入式数据库中没有意义。

以您用于访问数据库的任何语言实现控制逻辑:

db.begin_transaction()
result = db.execute("SELECT status FROM MyTable WHERE id = ?", [id]);
if result.length > 0:
    new_status = if result[0][0] == 'active': 'not_active' else: 'active'
    db.execute("UPDATE MyTable SET status = ? WHERE id = ?", [new_status, id])
else:
    db.execute("INSERT INTO MyTable(id, status) VALUES(?, ?)", [id, 'active'])
db.commit()

但是,切换逻辑本身可以使用CASE expression实现,因此如果您不太关心清晰度,则可以按此顺序执行以下两个命令({{1}如果记录不存在则不会执行任何操作,如果新记录违反任何唯一约束,INSERT OR IGNORE将不执行任何操作):

UPDATE