0

在 H2 中使用 MySQL 模式,发现适用于 MySQL 但不适用于 H2 的情况。

如果为 AUTO_INCREMENT 列插入并指定 NULL 值,如果存在重复键冲突,H2 会默默地应用 ON DUPLICATE KEY UPDATE 子句。

一个简单的例子:

DROP TABLE IF EXISTS `example`;
CREATE TABLE `example` (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `hostname` varchar(64) NOT NULL,
  `exit_code` int(11) NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`),
  UNIQUE KEY `host` (`hostname`),
);

INSERT INTO example (id, hostname, exit_code)
  VALUES (NULL, 'host', 0) 
  ON DUPLICATE KEY UPDATE exit_code = 0;
SELECT * FROM example;

INSERT INTO example (id, hostname, exit_code)
  VALUES (NULL, 'host', 14) 
  ON DUPLICATE KEY  UPDATE exit_code = 14;
SELECT * FROM example;

最后一次选择的结果显示 exit_code 0,它应该是 14。

有一个简单的解决方法,将最后一个 INSERT 更改为:

INSERT INTO example (hostname, exit_code)
  VALUES ('host', 14) 
  ON DUPLICATE KEY UPDATE exit_code = 14;

然后它工作。想在这里发布一个问题:你同意这是一个错误吗?

4

0 回答 0