我有一个包含用户元数据的表。有4个字段...
`ID`,`meta_name`,`meta_value`,`user_id`
我想在此表中存储电子邮件。当然,这些必须是唯一的。但是我也想在此表中存储其他数据,其中数据不需要是唯一的。有什么方法可以限制 'meta_value'
是唯一的,只有当 'meta_name'
等于 'email' 时?
最佳答案
通过 MySQL 的限制 - 不。
但是您可以使用插入/更新触发器来验证数据的唯一性并禁止非法操作。
这是插入触发器的草稿(你可以在这里玩:http://sqlfiddle.com/#!2/5c9e3):
DELIMITER //
CREATE TRIGGER VerifyInsert BEFORE INSERT ON YourTestTable
FOR EACH ROW
BEGIN
IF (SELECT COUNT(1) FROM YourTestTable
WHERE YourTestTable.meta_name = 'EMail' AND YourTestTable.meta_value = NEW.meta_value
AND NEW.meta_name = YourTestTable.meta_name) > 0 THEN
SIGNAL SQLSTATE '45001' SET MESSAGE_TEXT = 'VerifyInsertFailed';
END IF;
END;
//
关于MySQL 唯一键仅在另一个键包含特定值的情况下,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12384910/