【发布时间】:2010-02-09 18:34:54
【问题描述】:
考虑以下 SQL:
CREATE TABLE USER1
(
pkUSER1_ID INT UNSIGNED NOT NULL AUTO_INCREMENT,
DATE_UPDATED TIMESTAMP NULL DEFAULT NULL,
NAME VARCHAR(25) NOT NULL,
CONSTRAINT PRIMARY KEY (pkUSER1_ID),
CONSTRAINT UNIQUE (NAME)
)
ENGINE = INNODB;
INSERT INTO USER1
SET NAME = 'asdf'
ON DUPLICATE KEY
UPDATE DATE_UPDATED = NOW();
INSERT INTO USER1
SET NAME = 'asdf'
ON DUPLICATE KEY
UPDATE DATE_UPDATED = NOW();
INSERT INTO USER1
SET NAME = 'asdf1'
ON DUPLICATE KEY
UPDATE DATE_UPDATED = NOW();
SELECT * FROM USER1;
现在注意结果集。尽管没有插入任何内容,但 auto_increment 增加了。
+------------+---------------------+-------+
| pkUSER1_ID | DATE_UPDATED | NAME |
+------------+---------------------+-------+
| 1 | 2010-02-09 13:29:15 | asdf |
| 3 | NULL | asdf1 |
+------------+---------------------+-------+
我在两台不同的服务器上得到不同的行为......上面的输出来自 MySQL v5.0.45 在 2.6.9-023stab048.6-enterprise 上运行(我认为它是 Red Hat)。在 2.6.26-2-amd64(显然是 Debian)上运行的 MySQL v5.0.51a-24+lenny2-log 上不存在该问题。
是否有我可以更改的配置设置来避免这种情况?我的数据库中有大约 300 个用户,但是由于插入/更新语句运行的频率,最新的用户 id 超过了 600,000。
【问题讨论】:
标签: mysql