我有一个包含用户元数据的表。有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;

//

10-05 22:51