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

标签 mysql

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

例如。 表包含 Money_Transfer_status 列,现在可以是待处理、进行中、已批准、已拒绝等。

现在,对于给定用户,如果存在 in_progress 或待处理状态,我不想为该用户添加新的转账,否则应该没问题。

数据库中有什么方法可以指定这个吗?

最佳答案

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

类似这样的事情:

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

关于mysql - DB 列中多个值的唯一性检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19098034/

相关文章:

javascript - Node Js mysql(和 mysql2) ECONNRESET

Mysql查询顺序

sql - 从 LOAD DATA INFILE 查找 MySQL 错误

php - mysql按值排序,合并列

php - 如何显示内部连接表中的必填字段

c# - 使用 Entity Framework 将 MySql 数据转换为 Microsoft Sql

python - Web.py db.insert() 不插入行

Javascript 不从数据库添加变量

php - 评级查询结构和流程经济性

php - 因级联下降而大汗淋漓和尖叫