2

次の表があります。

CREATE TABLE people(
first_name VARCHAR(128) NOT NULL,
nick_name VARCHAR(128) NULL
)

挿入を試みた場合に、ニックネームがファーストネームと同じになるのを防ぎたいと思います。first_name と nick_name が同じレコードが挿入されないようにするためのルールとして、どちらの列にもインデックスを作成したくありません。

first_nameが と等しいレコードの挿入を防止するルールを作成する方法はありnick_nameますか?

4

3 に答える 3

3
CREATE TRIGGER `nicknameCheck` BEFORE INSERT ON `people` FOR EACH ROW begin
  IF (new.first_name = new.nick_name) THEN
    SET new.nick_name = null;
  END IF;
END

または、first_name を NULL に設定すると、SQL エラーが発生し、それを処理して警告を表示することができます。

于 2013-04-26T21:21:19.530 に答える
0

BEFORE INSERTとのトリガーのみが必要ですBEFORE UPDATE。これらに値をチェックさせ、等しい場合は操作を中止させます。

警告: MySQL の古いがまだ広く使用されているバージョン (5.5 IIRC より前) では、書き込まれたテーブルから読み取るか、(中止するために) 存在しないテーブル/列からより簡単に読み取るなど、悪いことをする必要があります。

于 2013-04-26T21:21:37.307 に答える
0

同じ場合にテストして削除するAFTER INSERTトリガー...

CREATE TABLE ek_test (
    id INT PRIMARY KEY NOT NULL AUTO_INCREMENT,
    one INT NOT NULL,
    two INT NOT NULL
);

delimiter //
CREATE TRIGGER ek_test_one_two_differ AFTER INSERT ON ek_test 
FOR EACH ROW 
BEGIN
  IF (new.one = new.two) THEN
    DELETE FROM ek_test WHERE id = new.id;
  END IF;
END//
delimiter ;

INSERT INTO ek_test (one, two) VALUES (1, 1);

SELECT * FROM ek_test;

注: AFTER UPDATE トリガーも必要です。

于 2017-07-31T14:42:23.357 に答える