唯一性检查列DB中的多个值

时间:2013-09-30 15:26:03

标签: mysql

我知道创建唯一索引。但我的问题有点不同。 我想要对同一列的不同状态进行唯一性检查。

例如。 表包含Money_Transfer_status列,现在可以挂起,in_progress,已批准,拒绝等。

现在对于给定用户,如果存在in_progress或挂起状态,我不想为用户添加新的汇款,否则它应该没问题。

在DB中有什么方法可以指定吗?

1 个答案:

答案 0 :(得分:2)

您必须在桌面上创建一个插入前触发器。

这样的事情:

DELIMITER $$
CREATE TRIGGER trigger_name BEFORE INSERT ON your_table 
FOR EACH ROW
BEGIN
IF EXISTS (SELECT 1 FROM your_table WHERE user_id = NEW.user_id AND money_trans_status = 'pending')
THEN
   SIGNAL SQLSTATE '02000'
   SET MESSAGE_TEXT = 'pending money transfer...';
END IF;
END $$

然后你的插入语句被中止。

详细了解信号here

编辑:有两点需要注意,它也会表现得像这样:

insert into your_table values ('valid_value'); -- succeeds as expected
insert into your_table values ('non-valid_value'); -- fails as expected

insert into your_table ('valid_value'), ('non_valid_value'), ('valid_value'); -- everything fails as one row is bad

并且至少需要MySQL版本5.5