我有一个包含用户元数据的表。有4个字段…
`ID`,`meta_name`,`meta_value`,`user_id`
我想把电子邮件放在这张桌子上。当然,这些必须是独一无二的。不过,我也希望在这个表中存储其他数据,其中的数据不需要是唯一的。只有当
'meta_value'
等于“email”时,我才能限制'meta_name'
是唯一的吗? 最佳答案
根据mysql的禁忌-不。
但是,您可以使用insert/update触发器来验证数据的唯一性并禁止非法操作。
这是插入触发器的草稿(您可以在这里使用它: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;
//