我的表格中有一个名为status
的列,数据类型为CHARACTER
。我希望做到以下几点。
如果主键不存在行,请在其中插入“active”
status
。如果某行已有主键条目,则切换status
。使用ative
,not_active
值进行切换。
目前我正在通过编写多个查询来完成它。有没有像Mysql一样的单一查询?
答案 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