简体   繁体   中英

Create mysql unique key based on three columns and a specific value

I have a table with a unique index across two columns user_id and country_id

I have added a new column deleted_at so I can delete rows whilst keeping the data.

I would now like to update the unique key so that it is based on user_id , country_id and where deleted_at IS NULL. Is this possible, if so how?

+----+---------+------------+------------+
+ id | user_id | country_id | deleted_at |
+----+---------+------------+------------+
+  2 |    3    |      1     |     NULL   |
+  3 |    3    |      1     | 2012-10-16 |
|  4 |    3    |      1     | 2012-10-15 |
+----+---------+------------+------------+

Using the above as reference, rows could not be added because of id 2, however if row 2 was not set a new row could be created.

Modifying your table mytable should do the trick:

alter table mytable drop index user_country;
alter table mytable add 
unique index user_country_deleted (user_id, country_id, deleted_at);

Edit: I was too quick. According to CREATE INDEX Syntax this works only for BDB storage.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM