【问题标题】:SQLite Insert or Ignore/Replace with lastInsertID in one statementSQLite 在一个语句中插入或忽略/替换为 lastInsertID
【发布时间】:2016-01-21 06:38:49
【问题描述】:

我觉得这应该很容易......

我有一张这样的桌子:

CREATE TABLE table_name (
  id INTEGER PRIMARY KEY,
  name TEXT NOT NULL,
  UNIQUE (name COLLATE NOCASE)
)

没有两个名称相同,不区分大小写。现在我有用户添加名称,它会这样做:

INSERT INTO table_name (name) VALUES ("my name");

我需要获取行的 id,这很容易使用 PHP PDO 的 lastInsertID()。但我也想,如果用户正在添加一个已经在数据库中的名称,则无需将任何内容添加到数据库中,但仍然可以获取该 id 而无需进行另一个数据库调用。我希望像

INSERT OR REPLACE INTO table_name (name) VALUES ("my name");

让它只是将相同的数据覆盖到单元格中并返回 lastInsertID(即使它没有被插入?)。但这不起作用。我还有哪些其他选择?我是否需要进行单独的数据库查询以查看 name 字段是否已存在?

【问题讨论】:

    标签: sqlite pdo


    【解决方案1】:

    使用 OR REPLACE 子句,语句总是删除任何旧行。

    只需使用两个语句。 (在单个语句中这样做没有技术原因。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-22
      • 2014-10-29
      • 2015-05-11
      • 1970-01-01
      • 2019-02-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多