在 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;
然后它工作。想在这里发布一个问题:你同意这是一个错误吗?