Empêcher les espaces, les valeurs nulles et les dates invalides dans MySQL : que puis-je faire ?
P粉553428780
P粉553428780 2024-03-19 20:38:50
0
1
257

Tableau utilisateur

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

Déclencheur

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

Colonne ID

  • Comment faire en sorte qu'il n'accepte pas les valeurs nulles ? ("", " ", " ", " ", 等等...) -> 应该返回错误
  • S'il existe déjà une valeur, comment supprimer tous les espaces qu'elle contient ? ("bf9 d 34 c9 08" = "bf9d34c908")

Colonne Nom

  • Comment faire en sorte qu'il n'accepte pas les valeurs nulles ? ("", " ", " ", " ", 等等...) -> 应该返回错误

Barre de courrier électronique

  • Comment faire en sorte qu'il n'accepte pas les valeurs nulles ? ("", " ", " ", " ", 等等...) -> 应该返回错误
  • S'il existe déjà une valeur, comment supprimer tous les espaces qu'elle contient ? ("nkr owks lpehqp jmgdb @ gm ail.com" = "[电子邮件受保护]")

Colonnes CREATED_IN et SIGNED_IN

  • Comment faire en sorte qu'il n'accepte pas les valeurs invalides ? Lors de l'insertion d'une valeur non valide telle qu'une lettre, un chiffre ou un format non valide, une erreur doit être renvoyée au lieu de saisir 0000-00-00 00:00:00.

La version MySQL est 5.7

Quelle est la meilleure façon de gérer ces exigences sur le formulaire UTILISATEURS ?

P粉553428780
P粉553428780

répondre à tous(1)
P粉845862826

Un déclencheur peut ressembler à ceci :

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

REMARQUE - Ce déclencheur permet à n'importe quelle valeur d'être NULL (mais seul l'e-mail peut être NULL, toutes les autres colonnes sont définies comme NON NULL).

Vous pouvez réorganiser les blocs et mettre en premier la condition avec la probabilité la plus élevée. Le déclencheur n'exécutera pas le code suivant après l'exécution de SIGNAL.

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!