2016-09-02 9 views
0

ユーザー(id、company、name)

これは私のスキーマです。どのように新しい行を挿入する前に、重複をチェックするトリガーを書く必要があります。受信したデータが受信レコードと重複していないことを確認する必要があります。着信レコードが存在する場合、そのレコードをテーブルに挿入すべきではない。もしそのレコードを複製していないと挿入されなければならない!以下は挿入する前に重複するレコードを確認するためにmysqlにトリガーを書き込むにはどうすればいいですか?

は、私が試したトリガーですが、それはここでは受け入れ答えによると、「最後の最後」行​​

DELIMITER $$ 
CREATE TRIGGER userDuplicate 
BEFORE INSERT ON `users` FOR EACH ROW 

BEGIN 
    DECLARE recordId VARCHAR(999); 

    SET recordId = (SELECT id FROM users WHERE company= NEW.companyAND name = NEW.name); 

    IF recordId IS NOT NULL 
    THEN 
     INSERT INTO users (company,name) VALUES (NEW.name,NEW.company); 
    END IF; 
END; 
$$ DELIMITER; 
+1

あなたはユニークなインデックスを作成しようとしたことがありますか? https://stackoverflow.com/questions/635937/how-do-i-specify-unique-constraint-for-multiple-columns-in-mysql – Surberus

+0

はい!私はトリガーを実装する必要があります。 –

+0

トリガーが必要な場合や、重複していないレコードをエラーなく挿入する必要がある場合は、 –

答えて

0

でエラーを与える:How to abort INSERT operation in MySql trigger?あなたはMySQLのトリガがINSERTをキャンセルすることはできません。 PostgreSQL(BEFORE INSERTトリガーは単にNULLを返します)では簡単ですが、MySQLはそれを処理できません。

あなたがすることができる事は、しかし、INSERT IGNOREです:

INSERT IGNORE INTO users (company, name) 
VALUES ('ABC','DEF'); 
関連する問題