Mysql

如何設置唯一列組合

  • October 18, 2015

見下表:

   CREATE TABLE IF NOT EXISTS `default_messages_users` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `message_id` int(11) NOT NULL,
 `owner_user_id` int(11) NOT NULL,
 `to_user_id` mediumint(8) NOT NULL
 PRIMARY KEY (`id`)
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;

我只需要設置列 message_id、owner_user_id、to_user_id 的一種可能組合,這意味著組合(例如)1、1、1 只能存在一次,因此不允許重複。我該怎麼做?在它們之間創建索引?

提前歡呼和感謝

一個UNIQUE約束(或唯一索引,mysql對約束和索引這兩個概念沒有太大區別)可以根據需要由多個列(2、3、…)組成。您的案例的範例具有由 3 列組成的約束:

ALTER TABLE default_messages_users 
 ADD CONSTRAINT Unique__message__owner_user__to_user   --- you choose a sensible name
                                                       --- for the constraint
   UNIQUE message_id_owner_user_id_to_user_id_UQ       --- and the index 
     (message_id, owner_user_id, to_user_id) ;

引用自:https://dba.stackexchange.com/questions/23001