我的数据库中有以下值:
我想在 tv_series_id+name+tv_season_number+tv_episode_number
上创建一个唯一的 key 。但是,使用传统方法,上述内容不适用于我的目的:
ALTER TABLE main_itemmaster ADD UNIQUE KEY (tv_series_id, tv_season_number, tv_episode_number, name)
因为空值。在数据库级别(而不是查询端)解决此问题的方法是什么?
需要澄清的是,上述内容不应被允许,因为“97736-Season 4-4-NULL”重复了 10 次。我考虑作为最后手段实现的解决方案是存储一个额外的字符串列以确保唯一性,因此上述内容为“97736-Season 4-4-”。
最佳答案
根据要求,我的建议(未经测试):
ALTER TABLE main_itemmaster ADD COLUMN uniquer BIGINT NOT NULL;
DELIMITER $$
CREATE TRIGGER add_uniquer BEFORE INSERT ON main_itemmaster
FOR EACH ROW
BEGIN
SET NEW.uniquer = (SELECT UUID_SHORT());
END $$
DELIMITER ;
ALTER TABLE main_itemmaster ADD UNIQUE KEY (tv_series_id, tv_season_number, tv_episode_number, name, uniquer);
uniquer 背后的算法完全取决于您。我选择了short UUID这里。您可能需要一个长 UUID。或 UUID might not be right for you 。基于时间的可能会起作用。您可以将其基于插入行中值的 MD5。
关于mysql - 创建具有 NULL 值的复合唯一索引的首选方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36093788/