MySQL唯一键仅在另一个键包含特定值的情况下

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

//
上一篇:Centos安装NPM


下一篇:给 Web 开发人员推荐的通用独立 UI 组件(一)(按钮很不错)