gpt4 book ai didi

MySQL UNIQUE CONSTRAINT 在随后的 INSERT CREATE TABLE 中失败

转载 作者:太空宇宙 更新时间:2023-11-03 10:41:08 25 4
gpt4 key购买 nike

使用 phpMyAdmin 和 MySQL v5.5.49 考虑:

CREATE TABLE op_sys (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) NOT NULL,
version VARCHAR(255) NOT NULL,
-- UNIQUE KEY name_version (name, version)
-- CONSTRAINT name_version UNIQUE (name, version)
-- UNIQUE(name, version)
-- CONSTRAINT UNIQUE(name, version)
)ENGINE=InnoDB;

我已经尝试了所有四种被注释掉的尝试,以简单地停止 INSERT INTO sys_op 的“名称”和“版本”重复值。所有四个都处理无误。

插入到:

INSERT INTO op_sys(name, version)
VALUES ('ANDROID','ANDROID');

“成功”执行。 ANDROID ANDROID现在是一排。我哪里出错了或者我不知道哪一步?我已经检查了 MySQL 手册和这里的几个不同的帖子,它们似乎说我做得正确......谢谢。

最佳答案

你好像误解了什么UNIQUE KEY意思是:

A UNIQUE index creates a constraint such that all values in the index must be distinct. An error occurs if you try to add a new row with a key value that matches an existing row. For all engines, a UNIQUE index permits multiple NULL values for columns that can contain NULL.

如果你的表有UNIQUE(name, version),那么你可以这样做:

INSERT INTO op_sys(name, version) VALUES ('ANDROID','ANDROID');

但是,下次你这样做时,它会失败,因为该表已经保存了一条与你要插入的记录具有相同对(名称,版本)的记录。

要防止插入具有相同 name 和 version 值的记录,您可以使用 trigger :

CREATE TRIGGER different_values BEFORE INSERT ON op_sys
FOR EACH ROW BEGIN
DECLARE identical_values CONDITION FOR SQLSTATE '45000';
IF NEW.name = NEW.version THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Identical values for name and version';
END IF;
END;

它将在表 sys_op 上的每个 INSERT 之前运行,并且如果 nameversion 字段保持相同值,它将产生错误并且插入将失败。

返回的错误如下所示:

ERROR 1644 (45000): Identical values for name and version

文档:
- CREATE INDEX
- CREATE TRIGGER
- SIGNAL

关于MySQL UNIQUE CONSTRAINT 在随后的 INSERT CREATE TABLE 中失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38400361/

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