検索

ホームページ  >  に質問  >  本文

MySQL でのスペース、NULL 値、無効な日付の使用を防ぐ: どうすればよいですか?

ユーザーテーブル

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...) -> エラーが返されるはずです

null 値を受け入れないようにする方法は? ("", " ", " ", " ", etc...) -> エラーが返されるはずです

null 値を受け入れないようにする方法は? ("", " ", " ", " ", etc...) -> エラーが返されるはずです

無効な値を受け入れないようにするにはどうすればよいですか?文字、数字、無効な形式などの無効な値を挿入する場合は、「0000-00-00 00:00:00」と入力する代わりにエラーが返される必要があります。

USERS テーブルでこれらの要件を処理する最善の方法は何ですか?

P粉553428780P粉553428780294日前348

全員に返信(1)返信します

  • P粉845862826

    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 の実行後に次のコードを実行しません。

    返事
    0
  • キャンセル返事