gpt4 book ai didi

mysql - sql交换列的主键

转载 作者:行者123 更新时间:2023-11-29 07:03:06 27 4
gpt4 key购买 nike

这是我试图实现的目标:

我有一张表fabric,其中包含用于构建产品的 Fabric 。当管理员记录一种新 Fabric 时,他可以定义该 Fabric 是否可以与另一种 Fabric 一起选择(为了 Material 的兼容性)。

这种排除关系是可交换的。如果X不和Y一起去,就意味着Y不能和X一起去。

为了实现这一点,我创建了一个表 fabric_exclusion,其中两个字段(id_fabric1id_fabric2)形成主键。

但是如何让 CRUD 操作与此底层逻辑配合使用 (id_fabric1=X|id_fabric2=Y) = (id_fabric1=Y|id_fabric2=X)

更新:这是我已经尝试过的:

CREATE TABLE IF NOT EXISTS `PREFIX_fabric_exclusion` (
`id_fabric1` INT(10) NOT NULL,
`id_fabric2` INT(10) NOT NULL,
CONSTRAINT `ids` UNIQUE (`id_fabric1`, `id_fabric2`),
PRIMARY KEY `ids`
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

最佳答案

可能会产生一点开销,但您可以使用基于 id_fabric1 的计算字段,结合 id_fabric2 以及计算字段上的唯一约束(甚至主键) 。因此,可以确保,例如,如果元组 (3,4) 存在,则无法插入元组 (4,3),反之亦然:

CREATE TABLE `PREFIX_fabric_exclusion` (
`id_fabric1` INT(10) NOT NULL,
`id_fabric2` INT(10) NOT NULL,
combinedKey int(21) as (if (id_fabric1 < id_fabric2, id_fabric1*100000000+ id_fabric2, id_fabric2*100000000+id_fabric1)) stored primary key
)

insert into PREFIX_fabric_exclusion(id_fabric1, id_fabric2) values (3, 4);

insert into PREFIX_fabric_exclusion(id_fabric1, id_fabric2) values (4, 3); # Error: Duplicate entry '300000004' for key 'PRIMARY'

关于mysql - sql交换列的主键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42655659/

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