gpt4 book ai didi

mysql - SQL(MySQL): Best way to force different values two columns of a row?

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

给出下表:

CREATE TABLE `tbl_termsynonyms` (
`ts_term1Id` int(10) unsigned NOT NULL,
`ts_term2Id` int(10) unsigned NOT NULL,
PRIMARY KEY (`ts_term1Id`,`ts_term2Id`),
KEY `fk_tbl_termSynonyms_tbl_term_t_id2` (`ts_term2Id`),
CONSTRAINT `fk_tbl_termSynonyms_tbl_term_t_id1` FOREIGN KEY (`ts_term1Id`) REFERENCES `tbl_term` (`t_id`) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT `fk_tbl_termSynonyms_tbl_term_t_id2` FOREIGN KEY (`ts_term2Id`) REFERENCES `tbl_term` (`t_id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci

如您所见,此表用于引用 tbl_term 表中的同义词。

示例:表 tbl_term 包含 ID 为 34 和 71 的单词“fun”和“joke”,这些 ID 一起保存为一行。

现在我想阻止术语引用自身的行,例如:

71 - 71
31 - 31

有没有一种(SQL方式)可以轻松实现这一点?

最佳答案

在 SQL 中有一个简单的方法可以做到这一点:

alter table tbl_termsynonyms add constraint chk_ts_term1Id_ts_term2Id check (ts_term1Id <> ts_term2Id);

不幸的是,MySQL 忽略检查约束,因此这在 MySQL 中不起作用。

唉,你唯一的选择就是使用触发器。

据推测,您的数据中可以有循环 - 所以 3 是 4 的同义词,4 是 3 的同义词。如果是这样的话,我看不出术语本身是同义词的真正损害.

当你想查询表时,你可以过滤掉它们:

create view vw_termsynonyms as
select ts.*
from tbl_termsynonyms ts
where ts_term1Id <> ts_term2Id;

关于mysql - SQL(MySQL): Best way to force different values two columns of a row?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46892904/

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