Cegah ruang, nilai nol dan tarikh tidak sah dalam MySQL: Apa yang boleh saya lakukan?
P粉553428780
P粉553428780 2024-03-19 20:38:50
0
1
256

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

  • Bagaimana untuk menjadikannya tidak menerima nilai nol? ("", " ", " ", " ", 等等...) -> 应该返回错误
  • Jika sudah ada nilai, bagaimana untuk membuang semua ruang di dalamnya? ("bf9 d 34 c9 08" = "bf9d34c908")

Lajur nama

  • Bagaimana untuk menjadikannya tidak menerima nilai nol? ("", " ", " ", " ", 等等...) -> 应该返回错误

Bar E-mel

  • Bagaimana untuk menjadikannya tidak menerima nilai nol? ("", " ", " ", " ", 等等...) -> 应该返回错误
  • Jika sudah ada nilai, bagaimana untuk membuang semua ruang di dalamnya? ("nkr owks lpehqp jmgdb @ gm ail.com" = "[电子邮件受保护]")
lajur

CREATED_IN dan SIGNED_IN

  • Bagaimana untuk menjadikannya tidak menerima nilai yang tidak sah? Apabila memasukkan nilai tidak sah seperti huruf, nombor atau format tidak sah, ralat harus dikembalikan dan bukannya memasukkan 0000-00-00 00:00:00.

Versi MySQL ialah 5.7

Apakah cara terbaik untuk mengendalikan keperluan ini pada borang PENGGUNA?

P粉553428780
P粉553428780

membalas semua(1)
P粉845862826

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.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!