Implémentation de contraintes Check

Vidéo non disponible ! Réessayez plus tard
Cette vidéo fait partie de la formation
Apprendre MySQL 8.0 par la pratique
Revoir le teaser Je m'abonne
Transcription

Cette leçon fait partie de la formation
89,00€ Je commande

Formation incluse dans l'abonnement Elephorm Je m'abonne à Elephorm

DescriptionProgrammeAvis

Cette leçon fait partie de la formation
89,00€ Je commande

Formation incluse dans l'abonnement Elephorm Je m'abonne à Elephorm

Être capable de créer et exploiter une base de données MySQL au quotidien de manière autonome.

Cette formation a été conçue à destination d'un public sans connaissances préalables sur les bases de données, avec l'ambition de transmettre les notions fondamentales permettant d'entrer sereinement et efficacement dans l'univers des bases de données, et d'exploiter MySQL au quotidien de manière autonome.

Elle permet de tirer parti de logiciels de qualité conçus spécialement pour travailler avec les bases de données : MySQL Workbench et Datagrip.

Elle met l'accent sur la pratique, et comprend de nombreuses démonstrations, mises en situations, exercices corrigés et commentés.

Elle met à disposition en ressources téléchargeables 3 bases de données portant sur des thèmes variés (médicaments vétérinaires, sécurité routière, prénoms), les scripts SQL des démonstrations les plus longues, et intègre un code promotionnel vous permettant de bénéficier d'une prolongation à 4 mois de la période d'essai gratuite de Datagrip.

Voir plus
Dans cette vidéo, on va s'intéresser à la manière de rajouter des contraintes sur notre table. Alors, ces contraintes sont une manière d'implémenter des règles métier dans notre table. Alors, concrètement, prenons un exemple. Je veux, dans ma base de données médicaments, rajouter une table dans laquelle je vais stocker des informations sur des déclarations de pharmacovigilance, par exemple. On va faire ça de manière extrêmement simple. Globalement, il s'agit de stocker des informations, des signalements d'effets indésirables, par exemple sur des médicaments. Et donc, cette table qui va contenir les informations est créée par le script que j'ai déjà renseigné dans le document que vous pouvez télécharger. Donc, elle s'appelle déclaration et comporte un certain nombre de colonnes. Une première, ID, qui va servir de clé primaire. Une deuxième, MedocID, qui va faire le lien avec la table Medoc. Là, il s'agit d'une clé étrangère. Une colonne création qui contient la date de création de l'enregistrement. Elle est renseignée par défaut à la date et l'heure du jour. Ensuite, on a un certain nombre de colonnes sur lesquelles on a le mot-clé check qui vient se rajouter par rapport à ce qu'on a vu précédemment. Ce mot-clé check, c'est le marqueur de l'existence d'une contrainte check sur la colonne. Notez qu'on peut définir des contraintes check à deux niveaux. Au niveau des colonnes, auquel cas la contrainte s'applique uniquement sur cette colonne. Ou au niveau table. C'est le cas ici, à la fin de la table, après la déclaration de la dernière colonne. On a une contrainte check de niveau table. Cette contrainte peut s'appliquer sur une colonne ou sur un ensemble de colonnes d'un même enregistrement. Ces contraintes check vont s'appliquer à chaque fois qu'on va essayer d'insérer un enregistrement dans notre table ou de modifier un enregistrement existant. Si l'enregistrement vérifie les contraintes qu'on a implémentées, à ce moment-là, l'insertion ou la modification seront effectuées. Mais si au moins une des contraintes est violée, à ce moment-là, l'insertion ou la mise à jour ne se feront pas. Notez que les contraintes de niveau table, par convention, sont inscrites à la fin, après la dernière colonne, mais on peut réellement les insérer n'importe où. On peut commencer avant même la première colonne à déclarer une contrainte check. On peut donc accéder, finalement, dans l'instruction de déclaration d'une contrainte check, aux colonnes avant même qu'elles soient déclarées. Prenons le cas de notre champ, notre colonne destination. Il est prévu qu'elle contienne un unique caractère, et j'ai défini la contrainte check suivante. Je veux que la valeur qui est stockée dans cette colonne soit comprise entre H et V. Globalement, c'est soit H, soit V, mais pas un autre caractère. Si j'essaie d'insérer un enregistrement qui contient K, ça ne marchera pas. Ensuite, la colonne nombre substance est un tiny int inside, donc on s'attend à ce qu'elle comprenne un entier positif inférieur à 255. Seulement, je veux être un peu plus restrictif. Je veux limiter le nombre de substances à 10. Il faut que ce soit au moins 1 et au plus 10. Donc, j'impose cette contrainte check ici. Sur la colonne signalement, qui est un dead time, not null, j'aimerais faire en sorte qu'on ne puisse pas rajouter un signalement de pharmacovigilance pour une date de signalement qui soit postérieure à la date de création de mon enregistrement. J'ai envie ici de rajouter une contrainte sur cette colonne en utilisant par exemple la valeur du signalement antérieure à la date et l'heure courante. Donc, on utilise la fonction now dans MySQL pour la récupérer. J'ai commenté cette déclaration de contrainte check pour la bonne et simple raison qu'elle n'est pas admissible par MySQL. En fait, on peut avoir recours à des fonctions dans la déclaration des contraintes check, mais il faut que ces fonctions retournent toujours la même valeur. C'est-à-dire que si j'utilise la fonction now, qui typiquement va me retourner une date et une heure différentes à chaque fois que je l'appelle, ça ne me retourne pas toujours la même valeur, donc ça ne peut pas être utilisé comme ça. Je peux être tenté aussi de définir la contrainte check comme ceci en calculant la différence entre la date de création et la date de signalement, et en exigeant que la date de création soit postérieure à la date de signalement. Le problème, c'est que lorsque je définis une contrainte check de niveau colonne, je ne peux pas accéder à la valeur d'une autre colonne, en l'occurrence la valeur stockée dans la colonne création. Donc, il faudra que je procède autrement. C'est typiquement les circonstances dans lesquelles on va utiliser une contrainte check de niveau table, et c'est ce que je fais ici. Globalement, je reprends exactement la même contrainte que celle que j'étais tenté de déclarer au niveau colonne, sauf que je le déclare au niveau table, et j'en profite également pour nommer cette contrainte. Par convention, on nomme les contraintes avec le préfixe ck underscore le nom de la table underscore le nom de la colonne concernée par la contrainte. Il faut avoir en tête que les contraintes sont toujours nommées, et que si on ne les nomme pas explicitement, MySQL va les nommer lui-même, et que le nom qu'on utilise lorsqu'on choisit de nommer soi-même la contrainte doit être unique, c'est-à-dire qu'on ne doit pas avoir dans notre base de données deux contraintes qui portent le même nom. C'est particulièrement intéressant d'avoir le nom parce que ça nous permettra ensuite, si on souhaite modifier la structure de notre table, ou notamment modifier cette contrainte-là, de pouvoir y faire référence. Enfin, on a une dernière colonne, non déclarant, qui est un varchar 200, note nulle, et je veux imposer qu'on refuse désenregistrement si le nom proposé comporte moins de 5 caractères, c'est-à-dire que je pourrais insérer désenregistrement si le nom comporte au minimum 6 caractères. J'utilise pour ce faire la fonction length, qui est une fonction native de MySQL, qui calcule la longueur du champ non déclarant. On peut utiliser les fonctions natives, par contre, dans MySQL, on peut aussi se créer un certain nombre de fonctions personnelles, qu'on appelle les fonctions stockées. On ne peut pas utiliser ces fonctions-là dans une contrainte check. Il y a d'autres contraintes également, on ne peut pas utiliser des procédures stockées, on ne peut pas faire référence à une colonne d'une autre table. Si on devait être tenté de le faire, il vaut mieux passer par des triggers, j'y reviendrai par la suite de la formation. De la même manière, on ne peut pas utiliser une sous-requête dans une contrainte check. Alors, créons notre table. On voit qu'on a cette table déclaration qui s'est rajoutée dans la liste de nos tables, et on voit en particulier qu'on a ici une arborescence qui regroupe toutes les contraintes check sur cette table. On voit que j'ai la contrainte check que j'ai nommée moi-même, et puis les trois autres contraintes ont été nommées automatiquement par MySQL. On voit que le pattern de nommage suivi par MySQL, c'est d'utiliser le nom de la table suivi de CHK pour check, et ensuite un index qui fait référence à l'ordre de déclaration de cette contrainte dans la syntaxe de déclaration de la table. On a une autre manière d'accéder aux informations sur les contraintes, c'est d'exécuter l'instruction show create table. Donc, exécutons cette instruction. Je vois que le script que MySQL a exécuté réellement lorsque j'ai demandé à créer cette table a transformé finalement les déclarations de contraintes check de la manière suivante. J'ai bien sûr la contrainte que j'avais créée moi-même, et puis les contraintes de niveau colonne que j'avais créées ont été transformées en ces trois lignes-là. Il faut savoir que cette syntaxe, avec le mot-clé constraint, le nom suivi de CHK peut aussi s'utiliser au niveau colonne. Seulement, c'est vrai qu'en général, au niveau colonne, on utilise une syntaxe qui est volontairement plus concise. Essayons d'insérer dans notre table un certain nombre d'enregistrements. Le premier enregistrement valide tous les critères, toutes les contraintes check qui sont définies sur cette table. Donc, l'insertion fonctionne bien. Sur le deuxième enregistrement, j'ai un problème sur le nom du déclarant qui comporte quatre caractères, donc qui sera refusé. Sur la troisième insertion, j'ai un problème puisque sur le champ Destination, j'essaye d'insérer un enregistrement qui comporte la lettre D, alors que j'avais spécifié qu'on ne pouvait utiliser que H ou V, alors l'enregistrement ne pourra pas être inséré. Même principe sur la quatrième insertion, j'essaye d'insérer un enregistrement avec 11 substances, alors que j'ai spécifié qu'on ne pouvait en contenir qu'entre 1 et 10, et donc c'est refusé. Enfin, le dernier enregistrement sera refusé également parce que j'essaye de créer un enregistrement pour lequel la date de signalement est antérieure de deux jours à la date de création de l'enregistrement. Donc finalement, si je consulte le contenu de ma table, le seul enregistrement que j'ai, c'est l'enregistrement que j'ai inséré lors de la première insertion de données, c'est le seul finalement qui est valide. Donc remarquez qu'on a parfois la possibilité d'implémenter des contraintes de différentes manières. Si l'on prend par exemple cette table, et en particulier la déclaration de la colonne Destination, j'aurais très bien pu aussi, au lieu d'utiliser le type Quart de 1, utiliser une énum en précisant deux valeurs dans cette énum, H et V. C'est une question de préférence, à vous de choisir celle qui vous convient en fonction du contexte.

Programme détaillé

Je commande Je m'abonne
Je commande Je m'abonne
Je commande Je m'abonne
Je commande Je m'abonne
Je commande Je m'abonne
Je commande Je m'abonne
Je commande Je m'abonne
Je commande Je m'abonne
Je commande Je m'abonne
Je commande Je m'abonne
Je commande Je m'abonne
Je commande Je m'abonne
Je commande Je m'abonne
Je commande Je m'abonne
Je commande Je m'abonne
Je commande Je m'abonne
Je commande Je m'abonne
Je commande Je m'abonne
Je commande Je m'abonne
Je commande Je m'abonne
Je commande Je m'abonne
Unions 06:39
Je commande Je m'abonne
Je commande Je m'abonne
Je commande Je m'abonne
Je commande Je m'abonne
Je commande Je m'abonne
Je commande Je m'abonne
Je commande Je m'abonne
Je commande Je m'abonne
Je commande Je m'abonne
Je commande Je m'abonne
Je commande Je m'abonne
Je commande Je m'abonne
Je commande Je m'abonne
Je commande Je m'abonne
Je commande Je m'abonne
Je commande Je m'abonne
Je commande Je m'abonne
Je commande Je m'abonne
Je commande Je m'abonne
Je commande Je m'abonne
Je commande Je m'abonne
Je commande Je m'abonne
Je commande Je m'abonne
Je commande Je m'abonne
Je commande Je m'abonne
Je commande Je m'abonne
Nos dernières formations Code & Data
  • Nouveau
    Maîtriser FlutterFlow - De l'Idée à l'Application
    Découvrir
    Cette formation en FlutterFlow est l'outil idéal pour tout développeur souhaitant créer des applications mobiles robustes et interactives sans coder de manière complexe. Grâce à des modules complets et structurés, vous apprendrez à utiliser FlutterFlow et Firebase, à sécuriser vos données, à concevoir des interfaces utilisateur élégantes et à intégrer des API telles qu'OpenIA. Rejoignez-nous pour transformer vos idées en applications innovantes et performantes.
    4h08 57 leçons
  • Nouveau
    Webflow - Créer la landing Page d'OpenAI
    Découvrir
    À l'issue de cette formation, les participants seront capables de créer de manière autonome une landing page sophistiquée, similaire à celle d'OpenAI, en utilisant les fonctionnalités avancées de Webflow pour le design responsive et les interactions.
    3h48 19 leçons
  • Apprendre Svelte 3 et SvelteKit 1.0
    Découvrir
    Créez des applications web modernes et ultra-rapides avec notre formation "Apprendre Svelte 3 et SvelteKit 1.0". Rejoignez-nous et devenez un expert du développement JavaScript ! 🚀 #Svelte #SvelteKit #DéveloppementWeb
    7h42 77 leçons
  • Apprendre Vue JS 3
    Découvrir
    Apprenez à créer des applications web modernes avec notre formation "Apprendre Vue JS 3". Rejoignez-nous et maîtrisez ce puissant framework JavaScript ! 🚀 #VueJS #FormationWeb #Développement
    11h47 91 leçons
  • Gratuit
    Apprendre ChatGPT
    Découvrir
    Ce cours vise à fournir une compréhension approfondie de l'intelligence artificielle, en se concentrant sur l'utilisation pratique de ChatGPT et DALL-E. Les participants découvriront comment l'IA peut transformer des domaines variés tels que le marketing, le développement web, et le design graphique. Le contenu couvre les bases de l'IA, l'art de créer des prompts efficaces, l'utilisation de plugins avancés, et le codage assisté par IA. Des projets pratiques permettront d'appliquer ces connaissances dans des scénarios réels. Destiné aux professionnels de la technologie, aux marketeurs, aux développeurs, et à toute personne intéressée par l'IA, ce cours est une opportunité d'acquérir des compétences innovantes et applicables dans divers contextes professionnels et créatifs. Les prérequis incluent une compréhension basique de l'informatique et un intérêt pour l'IA. Le cours promet une aventure d'apprentissage enrichissante, ouvrant de nouvelles perspectives dans l'utilisation de l'intelligence artificielle.
    3h12 30 leçons

éditeur de vidéos pédagogiques

Des supports pédagogiques en vidéo, produits avec les meilleurs experts. Dans nos studios à Paris, Lyon ou Montpellier. Vous souhaitez travailler avec nous ?
image-micro