Rumah  >  Soal Jawab  >  teks badan

Cegah ruang, nilai nol dan tarikh tidak sah dalam MySQL: Apa yang boleh saya lakukan?

Jadual pengguna

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` datetime NOT NULL,
 `SIGNED_IN` datetime NOT NULL,
 PRIMARY KEY (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci

Pencetus

CREATE TRIGGER `ABC` BEFORE INSERT ON `USERS` FOR EACH ROW 
IF NEW.ID = "" OR NEW.NAME = "" OR 
NEW.CREATED_IN = "" OR NEW.CREATED_IN = "0000-00-00 00:00:00" OR 
NEW.SIGNED_IN = "" OR NEW.SIGNED_IN = "0000-00-00 00:00:00" 
THEN SIGNAL SQLSTATE "45000"; END IF

ruangan ID

Lajur nama

Bar E-mel

lajur

CREATED_IN dan SIGNED_IN

Versi MySQL ialah 5.7

Apakah cara terbaik untuk mengendalikan keperluan ini pada borang PENGGUNA?

P粉553428780P粉553428780213 hari yang lalu284

membalas semua(1)saya akan balas

  • P粉845862826

    P粉8458628262024-03-20 00:49:38

    Pencetus boleh kelihatan seperti ini:

    CREATE TRIGGER process_input
    BEFORE INSERT ON USERS
    FOR EACH ROW
    BEGIN
        SET NEW.id = REPLACE(NEW.id, ' ', '');
        IF NEW.id = '' THEN
            SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = '`id` cannot be empty.';
        END IF;
    
        SET NEW.name = TRIM(NEW.name);
        IF NEW.name = '' THEN
            SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = '`name` cannot be empty.';
        END IF;
    
        SET NEW.email = REPLACE(NEW.email, ' ', '');
        IF NEW.email = '' THEN
            SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = '`email` cannot be empty.';
        END IF;
    
        IF STR_TO_DATE(created_in, '%Y-%m-%d %H:%i:%s') IS NULL THEN
            SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Incorrect `created_in` datetime value.';
        END IF;
    
        IF STR_TO_DATE(signed_in, '%Y-%m-%d %H:%i:%s') IS NULL THEN
            SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Incorrect `signed_in` datetime value.';
        END IF;
    END
    

    NOTA - Pencetus ini membenarkan sebarang nilai menjadi NULL (tetapi hanya e-mel boleh menjadi NULL, semua lajur lain ditakrifkan sebagai BUKAN NULL).

    Anda boleh menyusun semula blok dan meletakkan keadaan dengan kebarangkalian yang paling tinggi dahulu. Pencetus tidak akan melaksanakan kod berikut selepas melaksanakan SIGNAL.

    balas
    0
  • Batalbalas