gpt4 book ai didi

MySQL 复合主键列顺序不敏感

转载 作者:行者123 更新时间:2023-11-30 23:07:23 25 4
gpt4 key购买 nike

对于 MySQL 中的复合键,列的顺序对于确保行的唯一性是否重要?

例如

CREATE TABLE test (
A INT NOT NULL,
B INT NOT NULL,
PRIMARY KEY (A, B)
);

现在,假设我已经有包含值 A = 1、B = 2 的行,MySQL 会拒绝插入包含 A = 2、B = 1 的行吗?

我问这个是因为我需要一个使用复合键并忽略值顺序的解决方案。

最佳答案

索引中的顺序很重要。作为顺序重要性的提醒,请考虑如果类型不兼容会发生什么——比如 datevarchar(255)。这些值不可互换。

如果您希望两个值都具有唯一性,那么您将需要添加一个触发器。触发器可能会实现一个更简单的条件,即 A 小于 B 的要求。这与主键结合将保证两个值之间的唯一性。您可以在 MySQL 中表达此约束:

CONSTRAINT CHECK (A < B)

但是,唉,MySQL 会解析代码,但不会执行检查。相反,您可以在更新前和插入前添加触发器以将最小值放入 A。这是一个例子:

CREATE TRIGGER table_beforeinsert BEFORE INSERT ON table
FOR EACH ROW
BEGIN
declare xx int;
if (NEW.A > NEW.B) then
set xx := NEW.A;
set NEW.A = NEW.B;
set NEW.B = xx;
endif;
END

关于MySQL 复合主键列顺序不敏感,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21266421/

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