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

标签 mysql mysql5

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

相关文章:

mysql - 以字符串格式返回 MySQL 表中的所有列

MySQL编辑器

mysql - 正在安装 MySQL 系统表...错误 : 1136 Column count doesn't match value count at row 1?

mysql - MySQL中的表名是否区分大小写?

php - 使用 Google Maps API 查找两个位置之间的路线和距离并将其显示在表格中

php - 处理查询结果中的引号 PHP

php - 向博客添加类别和子类别

javascript - PHP Ajax mysql 选择 onload

Mysql LEFT JOIN 在超过 25.000 行时变得非常慢

MySQL 1062 - key '0' 的重复条目 'PRIMARY'