相关疑难解决方法(0)

MySQL ON DUPLICATE KEY - 最后一次插入ID?

我有以下查询:

INSERT INTO table (a) VALUES (0)
  ON DUPLICATE KEY UPDATE a=1
Run Code Online (Sandbox Code Playgroud)

我想要插入或更新的ID.通常我会运行第二个查询以获取此信息,因为我认为insert_id()只返回'inserted'ID而不是更新的ID.

有没有办法INSERT/UPDATE并检索行的ID而不运行两个查询?

mysql insert-id

125
推荐指数
2
解决办法
7万
查看次数

时间戳自动更新无法使用ON DUPLICATE KEY UPDATE(PDO)

我有一个表格作品集,时间戳设置为自动更新.

CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
Run Code Online (Sandbox Code Playgroud)

PHP中的PDO语句不会导致时间戳更新.

$statement = $this->connection->prepare("
INSERT INTO folio(publication, productId) 
VALUES(:publication, :productId) 
ON DUPLICATE KEY UPDATE 
id=LAST_INSERT_ID(id), publication=:publication, productId=:productId");
Run Code Online (Sandbox Code Playgroud)

以下手动方法有效但不可取.

$statement = $this->connection->prepare(
"INSERT INTO folio(publication, productId) 
VALUES(:publication, :productId) 
ON DUPLICATE KEY UPDATE 
id=LAST_INSERT_ID(id), publication=:publication, productId=:productId, timestamp=NOW()");
Run Code Online (Sandbox Code Playgroud)

更新:这是我的作品集表结构

CREATE TABLE `folio` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `publication` varchar(255) DEFAULT NULL,
  `productId` varchar(255) DEFAULT NULL,
  `timestamp` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  UNIQUE KEY `unique_folio` (`publication`,`productId`)
) ENGINE=InnoDB AUTO_INCREMENT=17 DEFAULT CHARSET=utf8;
Run Code Online (Sandbox Code Playgroud)

更新2:将timestamp设置为not null后的表结构 …

php mysql timestamp on-duplicate-key

3
推荐指数
1
解决办法
5027
查看次数

标签 统计

mysql ×2

insert-id ×1

on-duplicate-key ×1

php ×1

timestamp ×1