ユーザーテーブル
CREATE TABLE `USERS` ( `ID` char(255) COLLATE utf8_unicode_ci NOT NULL、 `NAME` char(255) COLLATE utf8_unicode_ci NOT NULL、 `EMAIL` char(255) COLLATE utf8_unicode_ci DEFAULT NULL, `CREATED_IN` 日時が NULL ではありません。 `SIGNED_IN` 日時が NULL ではありません。 主キー (`ID`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci######引き金######
各行の「USERS」に挿入する前にトリガー「ABC」を作成してください IF NEW.ID = "" または NEW.NAME = "" OR NEW.CREATED_IN = "" または NEW.CREATED_IN = "0000-00-00 00:00:00" または NEW.SIGNED_IN = "" または NEW.SIGNED_IN = "0000-00-00 00:00:00" THEN SIGNAL SQLSTATE "45000"; END IF
ID列null 値を受け入れないようにする方法は? ("", " ", " ", " ", etc...) -> エラーが返されるはずです
("bf9 d 34 c9 08" = "bf9d34c908")
名前列null 値を受け入れないようにする方法は? ("", " ", " ", " ", etc...) -> エラーが返されるはずです
メールコラムnull 値を受け入れないようにする方法は? ("", " ", " ", " ", etc...) -> エラーが返されるはずです
("nkr owks lpehqp jmgdb @ gm ail.com" = "[email protected]")
CREATED_IN 列と SIGNED_IN 列無効な値を受け入れないようにするにはどうすればよいですか?文字、数字、無効な形式などの無効な値を挿入する場合は、「0000-00-00 00:00:00」と入力する代わりにエラーが返される必要があります。
USERS テーブルでこれらの要件を処理する最善の方法は何ですか?
P粉8458628262024-03-20 00:49:38
トリガーは次のようになります:
CREATE TRIGGER process_input ユーザーに挿入する前に 行ごとに 始める SET NEW.id = REPLACE(NEW.id, ' ', ''); IF NEW.id = '' THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = '`id` を空にすることはできません。'; 終了 IF; SET NEW.name = TRIM(NEW.name); IF NEW.name = '' THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = ''name` を空にすることはできません。 終了 IF; SET NEW.email = REPLACE(NEW.email, ' ', ''); IF NEW.email = '' THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = '`email` を空にすることはできません。'; 終了 IF; STR_TO_DATE(created_in, '%Y-%m-%d %H:%i:%s') が NULL の場合 SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'created_in` の日時値が正しくありません。'; 終了 IF; STR_TO_DATE(signed_in, '%Y-%m-%d %H:%i:%s') が NULL の場合 SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = '「signed_in」日時値が正しくありません。'; 終了 IF; 終わり
注 - このトリガーでは、任意の値を NULL にすることができます (ただし、NULL にできるのは電子メールのみであり、他のすべての列は NOT NULL として定義されます)。
ブロックを並べ替えて、最も確率の高い条件を最初に置くことができます。トリガーは、SIGNAL の実行後に次のコードを実行しません。