gpt4 book ai didi

mysql - 当自动增量字段达到最大值时,使用重复键更新插入失败且不会出现错误

转载 作者:行者123 更新时间:2023-11-29 16:07:50 24 4
gpt4 key购买 nike

请参阅以下示例:

CREATE TABLE autoincrement_test (
ID tinyint(2) unsigned NOT NULL AUTO_INCREMENT,
NAME varchar(128) COLLATE utf8_unicode_ci NOT NULL,
DESCRIPTION varchar(128) COLLATE utf8_unicode_ci DEFAULT NULL,
PRIMARY KEY (ID),
UNIQUE KEY UNIQUE_KEY (NAME)
) ENGINE=InnoDB AUTO_INCREMENT=255 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

ALTER TABLE autoincrement_test AUTO_INCREMENT = 255;

INSERT INTO autoincrement_test (NAME, DESCRIPTION) VALUES ('a', 'aaaa') ;

INSERT INTO autoincrement_test (NAME, DESCRIPTION) VALUES ('b', 'bbbb') , ('c', 'cccc') ON DUPLICATE KEY UPDATE DESCRIPTION = VALUES(DESCRIPTION);

由于自动增量字段达到最大值,最后一条语句应该失败,但事实并非如此。

如果我删除重复部分,它将失败。

使用mysql 5.6.40

最佳答案

这符合预期。

考虑:

CREATE TABLE autoincrement_test (
ID tinyint(1) unsigned NOT NULL AUTO_INCREMENT,
NAME varchar(128) COLLATE utf8_unicode_ci NOT NULL,
`DESC` varchar(128) COLLATE utf8_unicode_ci DEFAULT NULL,
PRIMARY KEY (ID),
UNIQUE KEY UNIQUE_KEY (NAME)
) ENGINE=InnoDB AUTO_INCREMENT=255 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
ALTER TABLE autoincrement_test auto_increment = 255;
INSERT INTO autoincrement_test (NAME, `DESC`) VALUES ('a', 'aaaa');
INSERT INTO autoincrement_test (NAME, `DESC`) VALUES ('b', 'bbbb');

这会生成以下错误:

ER_DUP_ENTRY: Duplicate entry '255' for key 'PRIMARY'

这基本上就是您所期望的。

现在,如果将 ON DUPLICATE KEY UPDATE 添加到最后一个 INSERT 语句,则不会生成错误,并且表内容现在为:

| ID  | NAME | DESC |
| --- | ---- | ---- |
| 255 | a | bbbb |

<强> Demo on MySQL 5.6 DB Fiddle (您可以注释 ON DUPLICATE KEY 子句来生成错误)。

注意:DESC 是 MySQL 中的保留字(以及大多数其他 RDBMS 中的保留字,因此需要用反引号括起来)。

关于mysql - 当自动增量字段达到最大值时,使用重复键更新插入失败且不会出现错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55558769/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com