我有这样的数据库结构,用mysql的外键有可能有一个基于列值的外键?
SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
CREATE TABLE IF NOT EXISTS `announces` (
`tracker` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`failCount` smallint(5) unsigned NOT NULL DEFAULT '0',
PRIMARY KEY (`tracker`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
CREATE TABLE IF NOT EXISTS `hashes` (
`hash` binary(20) NOT NULL,
`indexed` tinyint(1) NOT NULL DEFAULT '0',
PRIMARY KEY (`hash`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
CREATE TABLE IF NOT EXISTS `trackers` (
`hash` binary(20) NOT NULL,
`tracker` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`seeders` mediumint(8) unsigned NOT NULL DEFAULT '0',
`leechers` mediumint(8) unsigned NOT NULL DEFAULT '0',
KEY `hashFK` (`hash`),
KEY `trackerFK` (`tracker`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
ALTER TABLE `trackers`
ADD CONSTRAINT `hashFK` FOREIGN KEY (`hash`) REFERENCES `hashes` (`hash`)
ON DELETE CASCADE,
ADD CONSTRAINT `trackerFK` FOREIGN KEY (`tracker`) REFERENCES `announces` (`tracker`)
ON DELETE CASCADE;
表跟踪器有2个外键一个用于跟踪器,一个用于哈希值。
这个我认为确保哈希不能在没有首先进入哈希的情况下进入跟踪器。如果哈希从哈希中删除,那么它也会从跟踪器中删除。
跟踪器一样,跟踪器必须存在于通告中,才能存在于跟踪器中,并且如果它从通知中删除,它也会从跟踪器中删除。
我的问题是,哈希应该跟踪只存在如果indexed
的hashes
行中的对应值为== 1
。这可能吗?
你想设置索引= 1到只要跟踪器插入朝向它FK哈希?或者,也许您希望每当使用fk将跟踪器插入到索引为!= 1的哈希中时引发错误? – Sebas
最好后者,据我了解手册,我不认为我可以添加外键的触发器?谢谢 – Griff