假设我在表email
属性上有一个唯一键users
并且我想存储或更新刚刚登录的用户数据:
INSERT INTO users (email, count) VALUES('john@doe.com',0)
ON CONFLICT(email) DO UPDATE SET count=count+1
现在在 PHP 中,我可以使用 lastInsertRowID(( 来检索插入的 rowid,但是如果触发ON CONFLICT
子句怎么办?我是否可以比运行其他选择更优雅地获取相关的 rowid(插入或更新(?
我在参考资料中没有看到提及这一点。
可以使用 INSERT OR REPLACE 语句在表中写入新行或替换现有行。插入或替换语句的语法和行为类似于插入语句。与 INSERT 语句不同,如果行已存在,则 INSERT OR REPLACE 语句不会生成错误。
INSERT OR REPLACE INTO users (email, count)
VALUES ('john@doe.com', IFNULL((SELECT count FROM users WHERE email = 'john@doe.com'), 0) + 1)