1. 程式人生 > >MYSQL 去重觸發器 並且允許空值重複的策略

MYSQL 去重觸發器 並且允許空值重複的策略

DELIMITER //
CREATE TRIGGER `kill_repeats` BEFORE INSERT ON `table_name`
 FOR EACH ROW BEGIN   
    if NEW.name1<>'' and NEW.name1 in (select name1 from table_name)
    then  SIGNAL SQLSTATE 'Q001' SET MESSAGE_TEXT = 'name1 has been exsits';  
    end if;
    if NEW.name2<>'' and NEW.name2 in (select name2 from table_name)
    then  SIGNAL SQLSTATE 'Q001' SET MESSAGE_TEXT = 'name2 has been exsits';  
    end if;
    if NEW.name3<>'' and NEW.name3 in (select name3 from table_name)
    then  SIGNAL SQLSTATE 'Q001' SET MESSAGE_TEXT = 'name3 has been exsits';  
    end if;
    /*需要檢測多少個欄位就可以重複幾次*/
END

上面是建立一個觸發器的程式碼,目前已經是解了我的燃眉之急,但是在效能上可能沒有保證,還望各位資料庫領域的大佬加以之指正。

程式碼裡面的table_name、name1、name2、name3、訊號值、資訊欄位請自行替換。當然,這個只是分享一下,畢竟是在學習的過程中。