MySQL でのスペース、NULL 値、無効な日付の使用を防ぐ: どうすればよいですか?
P粉553428780
P粉553428780 2024-03-19 20:38:50
0
1
281

ユーザーテーブル

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」と入力する代わりにエラーが返される必要があります。

  • MySQLのバージョンは5.7
  • です
USERS テーブルでこれらの要件を処理する最善の方法は何ですか?

P粉553428780
P粉553428780

全員に返信(1)
P粉845862826

トリガーは次のようになります:

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
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!