Création de table / inventaire des types de données

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 à l'instruction SQL qu'on exécute pour créer une table, et en particulier aux mots-clés qu'on va utiliser pour définir les types des colonnes qui constitueront cette table. Alors, d'une manière générale, l'instruction qu'on exécute pour créer une table, c'est l'instruction CREATE TABLE. On peut ensuite rajouter IF NOT EXISTS pour éviter qu'il y ait une erreur lorsque l'on crée une table et qu'une table porte déjà le même nom dans notre base de données. En l'occurrence, si on essaie de créer une table et que le nom qu'on a choisi pour notre table est déjà utilisé, lorsque l'instruction IF NOT EXISTS est utilisée, à ce moment-là, la table n'est pas créée. Ensuite, dans notre table, il faut qu'on choisisse un nom. On va choisir, par exemple, CLIENT. D'une manière générale, il est souhaitable d'adopter un certain nombre de conventions quand on crée des objets dans notre base de données. Je peux vous recommander celle-ci, qui est de toujours mettre les tables avec une majuscule et au pluriel. Vous choisirez celle que vous voudrez, mais l'important, c'est d'être régulier, de toujours utiliser la même convention de manière à ce qu'on puisse s'y retrouver ensuite dans la syntaxe de nos instructions SQL. Ensuite, on va mettre dans cette table la liste des colonnes dont elle sera constituée. Pour commencer, il faut qu'on nomme la colonne. On peut, par exemple, donner un nom à notre client. Ensuite, on va indiquer le type de données qu'on va stocker dans cette colonne. Par exemple, on peut choisir VARCHAR de 50. Ça veut dire qu'on va stocker l'information sous forme d'une chaîne de caractères de 50 caractères au maximum. On peut ensuite indiquer si cette colonne accepte une absence de valeur ou s'il faut véritablement, à chaque fois qu'on crée un enregistrement ou qu'on le modifie, que le nom ait une valeur. Donc, on va mettre NOTE NUL si on impose qu'il y ait une valeur et si on souhaite accepter l'absence de valeur, on peut mettre NUL. Il y a d'autres choses qu'on peut indiquer derrière cette indication-là. On peut définir une valeur par défaut, on peut définir une contrainte particulière, faire en sorte que cette colonne soit unique dans toute la table. C'est-à-dire qu'on ne puisse pas avoir deux enregistrements qui portent la même valeur pour cette colonne dans la table. On aura l'occasion de revenir sur tout ce qu'on peut mettre derrière ce NUL pour chaque colonne dans les vidéos à venir. Dans celle-ci, on va s'intéresser à cette partie-là qui nous intéresse plus particulièrement. C'est le type de données que l'on souhaite stocker dans la colonne de notre table. Il y a de nombreux types de données qu'on peut utiliser et comme vous le voyez, j'ai commencé à rédiger un document dans lequel on passe en revue les principaux types de données qu'on peut utiliser. Il y a beaucoup de choses à savoir sur le sujet. Je vous ai mis des renvois vers la documentation officielle pour que vous ayez la possibilité de creuser un peu certains sujets si vous en avez besoin ou envie. Je vous ai fait ici un résumé des principaux points à avoir en mémoire. Lorsque l'on souhaite stocker des entiers, on a la possibilité de choisir parmi un certain nombre de mots-clés. Le premier, par exemple, c'est TinyInt. On a aussi SmallInt, MediumInt, Int ou BigInt, par exemple. Chacune de ces valeurs peut être suivie par le mot-clé Signed ou Unsigned. C'est optionnel. C'est pour ça que je l'ai indiqué entre crochets ici et c'est une convention que je reprends dans la suite du document. Si on ne précise rien, par défaut, c'est Signed qui est choisi. Qu'est-ce que ça signifie ? Ça veut dire que ce TinyInt peut accepter des entiers négatifs, mais jusqu'à une certaine mesure. Si l'entier accepte des valeurs négatives pour TinyInt, elles devront être comprises entre –128 et 127 pour les valeurs positives. Si on précise qu'on veut un TinyInt Unsigned, à ce moment-là, on n'impose que la colonne qui porte ce type ne stocke que des valeurs positives et dans ce cas, on peut stocker des valeurs comprises entre 0 et 255 pour cette colonne-là. Le même principe s'applique aux autres types à la différence près qu'on peut stocker des nombres de plus en plus grands. Par exemple, on peut stocker jusqu'à une valeur allant jusqu'à 65 535 pour un SmallInt s'il est Unsigned et on dépasse allègrement le million pour voir le milliard et même plus encore pour les types suivants. Dans bien des cas, le type Int sera suffisant. Maintenant, si vous savez que les règles métiers qui s'appliquent à votre base de données vous imposent de ne pas dépasser une certaine valeur, par exemple 100, c'est complètement inutile d'aller allouer de la mémoire et de choisir un Int pour la colonne qui devra stocker cette valeur-là. N'hésitez pas à choisir un TinyInt. Il y a des équivalences. Par exemple, lorsque l'on écrit Int, c'est la même chose qu'écrire Integer. Dans certains cas, on va avoir besoin de stocker des nombres extrêmement grands. Ça peut être le cas sur une table qui va contenir un nombre très important d'enregistrements et lorsque l'on veut utiliser un Entier comme clé primaire, on aura la possibilité à ce moment-là d'utiliser Serial comme type, ce qui équivaut à un BigInt Unsigned Not Null Autoincrement Unique. Ça veut dire qu'en fait, c'est un nombre positif qui peut aller jusqu'à 10 exposant 18 comme valeur, qui ne peut pas être nul, qui va être incrémenté à chaque insertion d'une unité et qui ne doit pas être redondant entre enregistrements. Alors, j'attire votre attention aussi sur le fait que certaines versions de MySQL acceptent une option qui est zéro fil derrière la déclaration du type d'entier. Cette option n'est plus supportée à partir de MySQL 8, donc il vaut mieux éviter de l'utiliser. Elle avait l'intérêt de rajouter des zéros à gauche du chiffre qu'on stocke dans la base de données. Il y a d'autres manières de procéder que de continuer à utiliser ça. Alors, passons aux exemples. Ici, dans cette instruction SQL, on va créer une table qui s'appelle mass et qui comporte deux colonnes. Une colonne espèce qui stocke le nom d'une espèce sous forme d'une chaîne de caractère et une colonne mass kilo qui stocke la masse d'un animal de cette espèce sous forme d'un tiny int. Je n'ai pas précisé s'il était signed ou unsigned, donc par défaut, il est signed. C'est exactement la même chose que si j'avais écrit ça. Donc, créons cette table. On voit qu'elle s'est rajoutée à la liste des tables et puis ensuite, on va pouvoir faire une liste d'insertion. Une série d'insertions. Ici, j'insère trois enregistrements. Tout se passe bien. Effectivement, les valeurs sont comprises dans la plage de valeurs autorisées. Le problème, c'est que je peux aussi faire cette insertion là, par exemple. Pour le mouton, j'ai mis une masse négative, ce qui n'a pas de sens. Donc, il est important de faire attention à ne pas utiliser les valeurs par défaut sur les entiers si l'on sait à l'avance que notre colonne devra stocker uniquement des valeurs positives. Donc, il faut ne pas hésiter à utiliser unsigned à la place de signed. Cela aura aussi une incidence sur l'amplitude des valeurs que je peux stocker dans cette table. Par exemple, ici, si j'essaie d'insérer le lion à 250 kg, cela ne marche pas parce que lorsque la colonne est un tiny int signed, elle pourra stocker une valeur positive que si elle est inférieure à 127. Alors, supprimons cette table et essayons de la recréer en utilisant unsigned cette fois-ci. Donc, je recrée ma table. Je peux insérer à nouveau ces enregistrements. Cela passe bien. Seulement, celui-ci ne passera pas. Pourquoi ? Parce que la valeur est négative et que j'ai demandé à ce que la masse, la colonne masse, ne stocke que des entiers positifs. C'est unsigned, donc cela va jusqu'à 255, donc je pourrais faire rentrer mon lion dans cette table. Passons ensuite à un type particulier de valeur numérique qui est le type boolean ou bol. Alors, il est stocké en fait sous forme d'un tiny int de 1. Alors, c'est une notation qui n'est plus réellement supportée par MySQL dans sa version 8 qui précisait qu'en fait, on utilisait un tiny int mais qu'on ne souhaitait afficher qu'un seul caractère, qu'un seul chiffre sur le nombre qu'on stocke. Concrètement, une colonne qui a le type boolean est prévue pour stocker un entier compris entre 0 et 9. Toute valeur différente de 0 est assimilée à true et 0 est assimilée à false. Alors, il faut savoir que on peut aussi utiliser un certain nombre de mots-clés, notamment true et false, mais que la correspondance entre les valeurs comprises entre 2 et 9 et true n'est possible que dans un seul sens, c'est-à-dire que si j'utilise true comme mot-clé, alors la correspondance s'établit dans les deux sens avec 1. Par contre, si j'utilise un nombre compris entre 2 et 9, alors la correspondance avec true ne s'établit que dans un seul sens. Alors, ça peut sembler pas très clair, alors prenons un exemple. On va créer ici une table qu'on appelle régime et qui comporte 2 colonnes, une colonne espèce comme précédemment et une colonne de type booléen qui stocke une information sur le régime alimentaire de l'espèce. Donc, en l'occurrence, on s'attend à ce que la valeur stockée soit true si l'espèce est herbivore et false si elle ne l'est pas. Alors, on va créer cette table et ensuite essayer d'insérer un certain nombre de valeurs. Toutes mes insertions passent. Alors, remarquons que pour la première valeur, j'ai utilisé le mot-clé false, donc je m'attends à ce que la valeur stockée en table soit 0. J'ai stocké 0 ici, donc ce sera 0 qui sera stocké. Ici, j'ai utilisé true, donc la valeur stockée sera 1. Et pour les deux dernières lignes, le cheval et la chèvre, j'ai mis 1 et 2. Les valeurs stockées seront 1 et 2 parce qu'elles sont comprises dans les valeurs admises par le type de colonne tinyInt de 1. Si j'essaye de visualiser les enregistrements qui sont présents dans cette table, je peux donc exécuter cette instruction. Alors, j'attire votre attention sur cette expression-là. Il s'agit en fait d'une fonction qui prend trois arguments. Le premier est la colonne éherbivore qui renvoie une valeur assimilée à un booléen. Le deuxième argument est la valeur que cette fonction renvoie si le premier argument est assimilé à true et s'il est assimilé à false, la fonction if renvoie le troisième argument. Ici, j'ai oublié un alias, ça va avec ou sans, on n'est pas obligé de mettre le as pour avoir un alias. Si j'exécute cette table, cette instruction, j'ai les informations que j'attendais, c'est-à-dire que pour les deux premiers enregistrements, je m'attendais à avoir 0, c'est le cas. Pour le deuxième enregistrement, j'ai bien eu... Pour le troisième enregistrement, j'ai bien eu 1, et pour les deux derniers, j'ai bien eu 1 et 2. Et je vois que dans les deux premiers enregistrements, la valeur stockée est assimilée à false, et dans les trois derniers, elle est assimilée à true. Je supprime cette table. Ensuite, on va s'intéresser au nombre à virgule. On a trois types de nombres à virgule qu'on peut stocker dans une table mayesquelle. Le type décimal stocke des valeurs fixes. On a trois syntaxes qu'on peut utiliser avec le type décimal, sans parenthèse, avec des parenthèses et un seul argument, avec des parenthèses et deux arguments. Lorsqu'on a un seul argument, c'est la précision, c'est-à-dire le nombre total de caractères qu'on a dans notre nombre décimal. Si on indique en plus un deuxième argument, c'est ce qu'on appelle l'échelle, scale en anglais, qui nous indique le nombre de chiffres qu'on aura après la virgule. Alors, il y a des valeurs maximales pour ces deux paramètres. Le premier doit être inférieur à 65 et le deuxième doit être inférieur à 30. Alors, si on ne fournit pas de valeur pour ces deux arguments, par défaut, ils valent respectivement 10 et 0, c'est-à-dire que c'est la valeur utilisée quand on utilise le mot-clé décimal, sans rien préciser. Il faut savoir aussi qu'il y a des correspondances avec d'autres mots-clés, c'est-à-dire que quand on utilise décimal, c'est comme si on utilisait dec ou numérique ou fixed. On a d'autres types de nombres à virgule, et en particulier à virgule flottante, donc c'est l'équivalent des notations scientifiques. On a le type float et le type double. Alors, le type float apporte une précision moindre que le type double, double étant sous-entendu double précision, en fait. On voit que ça reste néanmoins des nombres qui peuvent être relativement importants. Float peut, quant à lui, accepter un argument entre parenthèses et selon sa valeur, en fait, mayesquuelle, va attribuer le type float ou double à la colonne. Donc si, par exemple, la valeur qu'on fournit entre parenthèses est inférieure ou égale à 24, ce sera le type float qui sera attribué, et si c'est supérieur à 25, supérieur ou égal à 25 mais inférieur ou égal à 53, à ce moment-là, ce sera le type double. Alors, il faut avoir en tête que le type float peut conduire à des comportements inattendus lorsque on utilise la colonne dans des calculs, donc il vaut mieux utiliser le type double si on envisage d'utiliser la colonne pour faire des calculs par la suite. Il y a des équivalences, l'instruction, le mot-clé double est équivalent à double precision ou real. Alors, notons que il y a des usages qui ne sont plus supportés dans la version 8 de MySQL, notamment la possibilité d'utiliser le mot-clé unsigned derrière un type décimal, float ou double. De même, par le passé, il était possible d'utiliser deux arguments pour float et double comme on le fait pour décimal et c'est quelque chose qui est déprécié dans la version 8 de MySQL. On va s'intéresser ensuite au type chaîne de caractère. Alors, ça fait partie des types qu'on utilise le plus souvent, donc il faut bien comprendre comment cela fonctionne. On a globalement deux grandes catégories de type texte, de type chaîne de caractère, le type char et varchar, et les types texte à proprement parler. En ce qui concerne le type char et varchar, ils sont relativement proches mais ont des différences de comportement importantes qu'il faut avoir en tête et notamment, déjà, le nombre maximal de caractères qu'ils peuvent stocker. On voit que char contiendra au mieux 255 caractères alors qu'un varchar pourrait aller jusqu'à 65 535. En fait, ça dépend d'un certain nombre de paramètres et en particulier de la valeur de l'argument qui est passé entre parenthèses derrière le type. Donc si on indique car de 5 par exemple, la colonne car contiendra 5 caractères. Si on utilise varchar de 5, la colonne pourra contenir jusqu'à 5 caractères. La différence c'est que car va toujours compléter la valeur qu'on lui passe par des espaces pour qu'on ait le nombre de caractères qu'on a indiqué entre les parenthèses alors que le type varchar ne va pas compléter la valeur qu'on passe lorsqu'on insère un enregistrement dans la table. Alors, ça peut sembler un peu confus donc je vous donne l'exemple ici. Dans ce tableau, je compare le comportement du type car au type varchar lorsque la valeur n est 4. Pour 4 insertions différentes, donc la première insertion, on insère une chaîne constituée de 4 caractères underscore. L'avantage c'est que ça me permet d'avoir un formatage vertical aussi et de voir combien de caractères les lignes suivantes comportent et en particulier lorsqu'il s'agit d'espaces. Dans ce cas de figure, il n'y a absolument aucune différence entre le type car et varchar que ce soit pour la valeur stockée ou la valeur restituée. Si par contre j'essaye de stocker une chaîne vide c'est à dire une absence de caractères pour le type car, on aura quand même un stockage qui se fera sous forme de 4 caractères ici des caractères d'espacement. La valeur restituée sera la même dans les deux cas. Si j'essaye de stocker la chaîne AB donc 2 caractères, pour le varchar, ce sera toujours stocké sous forme de 4 caractères avec un ajout de 2 espaces à la droite de la valeur ce qui n'est pas le cas du type varchar qui va simplement se contenter de stocker la valeur qu'on lui a transmise. Si par contre il y a un espace il va y avoir une différence de comportement entre les deux. Dans la mesure où là où car va compléter pour avoir 4 caractères, ce ne sera pas le cas pour varchar et varchar ne va pas chercher à éliminer les caractères d'espacement qui sont ajoutés à la fin de ma chaîne de caractères AB espace. Dans la valeur restituée, ça se ressentira puisqu'en fait le type car va retourner simplement AB en omettant l'espacement final alors que cet espacement final est préservé quand on utilise le type varchar. Il est dans certaines situations possible de stocker dans des colonnes de type car ou varchar des chaînes de caractères qui comportent plus de caractères que ce qui est spécifié entre parenthèses après le type car ou varchar. Ce n'est possible que si le mode stripped est désactivé ce qui n'est généralement pas le cas. Dans la plupart des cas une erreur sera levée lorsqu'on essaiera d'insérer dans une colonne un nombre de caractères supérieur à ce qu'elle est configurée pour contenir. On a différents types textes c'est le même principe que pour les autres types on a en fonction du type texte qu'on choisit la possibilité de stocker plus ou moins d'informations. En partant d'un tiny text qui contient jusqu'à 255 caractères à un long text au maximum qui peut contenir 4 milliards de caractères. On a une particularité sur le type texte, c'est qu'il peut accepter un argument qui est optionnel et qui indique le nombre de caractères qu'on peut stocker. C'est plus ou moins le nombre de caractères ça dépend de la taille occupée par chaque caractère, mais globalement c'est approximatif de considérer que c'est le nombre de caractères qu'on peut stocker. On pourrait stocker dans un champ de type texte jusqu'à 65 535 caractères. On va s'intéresser ensuite au type enum. Il est très pratique dans certaines situations et présente un certain nombre de particularités qui font qu'il peut être difficile à utiliser ou en tout cas qui peut présenter des comportements inattendus si on ne le comprend pas complètement. Alors je vous explique comment est-ce que ça fonctionne. Lorsqu'on indique le type enum, on va préciser entre parenthèses une série de valeurs qui sont des valeurs littérales, des chaînes de caractère encadrées par des guillemets simples ou doubles. Ces valeurs-là sont les seules valeurs que peut prendre le champ qui porte ce type. Par exemple ici, donc j'ai un type enum avec une série de chaînes de caractère. Et bien seules ces chaînes de caractère sont admissibles pour ce champ. La particularité des enums, c'est qu'en fait elles ne stockent pas ces valeurs sous forme de chaînes de caractère mais sous forme d'entiers. L'entier stocké correspond à l'index de la chaîne de caractère dans la série, c'est-à-dire que la première valeur à l'index 1, la deuxième à l'index 2, etc. Donc si j'essaye d'insérer un enregistrement ayant pour valeur S pour la colonne de ce type-là, et bien la valeur qui sera stockée réellement dans la base de données, c'est pas S, c'est 2. Ça a deux conséquences. La première, c'est que ça nous permet un gain de performance puisqu'on n'aura pas besoin de stocker des chaînes de caractère qui peuvent parfois être longues. On se contente de stocker des entiers, ça prend moins de place. La deuxième chose, c'est qu'il est fortement déconseillé d'utiliser les énumérations pour stocker des chaînes de caractère, ou en tout cas pour stocker des entiers sous forme de chaînes de caractère, parce qu'alors on risque de ne pas avoir la correspondance attendue. Donc dans l'exemple précédent où on a des valeurs qui vont de V1 à VN, et bien l'index de la valeur V1 c'est 1 et l'index de la valeur VN c'est N. Il faut savoir aussi que la valeur par défaut d'une colonne de type énum dépend des circonstances. Si la colonne est nullable, c'est-à-dire si elle accepte des valeurs nulles, alors la valeur par défaut stockée dans cette colonne c'est nulle. Si par contre la colonne est non nullable, c'est-à-dire qu'il lui faut une valeur, alors par défaut la valeur qui sera utilisée dans cette colonne c'est la première valeur de l'énum. Il faut savoir également qu'il est possible de faire des insertions dans une colonne de type énum en n'utilisant non pas une chaîne de caractère, mais un entier qui correspond à l'index de la valeur qu'on veut insérer. Et que finalement la valeur stockée peut être valorisée aussi si on utilise un calcul. Si on utilise la colonne dans un calcul, cette valeur numérique réellement stockée sera utilisée pour le calcul. Ça a aussi une incidence sur la manière dont les tris vont être effectués sur cette colonne, c'est-à-dire si on essaie de trier les enregistrements sur une colonne qui est de type énum, on n'aura pas forcément le comportement qu'on attend. En fait le tri va se faire sur les index et non pas sur les valeurs. Donc si on veut réellement stocker, si on veut réellement ordonner nos enregistrements sous forme sur la base des valeurs, il faudra prendre des précautions supplémentaires. Premièrement, indiquer au moment de la déclaration, de la création de notre table, les valeurs par ordre alphabétique. Comme ça on est sûr que l'ordre alphabétique correspond à l'ordre des index. Ou alors effectuer une conversion de type, ce qu'on appelle un cast, qu'on réalise de la manière suivante. Il suffit d'utiliser le mot clé cast, suivi entre parenthèses du nom de la colonne, as est le type dans lequel on veut faire la conversion, en l'occurrence car. Prenons un exemple, ici on crée une table qu'on appelle le vêtement qui comporte trois colonnes. Une première colonne ID qui contient un entier auto-incrémenté, le nom du vêtement sous forme de chaîne de caractère, et puis la taille du vêtement qui est une énumération. Supposons que l'on crée cette énumération de sorte à ce qu'elle soit nullable. Supposons que l'on exécute cette instruction, donc ça va nous rajouter la table qu'on attendait dans notre base de données, et ensuite on va essayer de faire l'insertion de quatre enregistrements. Donc on va insérer ça, si on essaye ici de visualiser le contenu de notre table, qu'est ce qui se passe ? On a effectivement enregistré, on a renseigné quatre, ajouté quatre enregistrements dans notre table, et on voit qu'on ordonne nos enregistrements par taille décroissante, donc on s'attendrait logiquement à avoir les tailles XS avant les S, et ce qui n'est pas le cas en réalité, c'est ordonné par index, et on peut le voir ici en exécutant cette instruction qui nous rajoute une colonne dans laquelle on multiplie la taille par 1. Ce faisant, on oblige MySQL à valoriser la valeur numérique réellement stockée dans le champ plutôt que la valeur textuelle qu'il restitue quand on essaye d'interroger la table. Donc exécutons cette instruction, et on voit que l'ordre est bien sûr toujours le même, et que l'index associé à chaque taille est bien celui qu'on attendait, et que finalement le tri des enregistrements se fait bien sur la base de l'index. On voit qu'ici, même si par ordre alphabétique ça ne correspond pas, l'ordre de tri décroissant est bien le bon pour la dernière colonne qu'on a rajoutée. Si on veut réellement trier les colonnes sur la base des valeurs de notre taille et non pas sur la base de l'index, il faut faire un cast, c'est ce que l'on fait ici, et donc là on a bien les tailles XS qui apparaissent en haut comme on devrait l'avoir dès le départ. Je peux supprimer ma table et supposons que je modifie le type de ma dernière colonne pour qu'il soit note nulle, et que j'effectue de nouveau les insertions, et bien cette fois-ci je n'aurai pas la même valeur par défaut, on voit que le troisième enregistrement a comme taille la valeur par défaut de ce champ, ça correspond au gene gris, et si je regarde ici dans ma table, et bien en fait la valeur qui est attribuée c'est la première des valeurs de l'énumération. Donc je supprime cette table, alors il y a un type particulier qui est le type 7, qui permet de manière assez similaire aux énumérations d'indiquer à l'avance quelles sont les valeurs possibles que l'on peut stocker dans un champ, et la différence entre une énum et un 7 c'est que lorsque l'on utilise un 7 on peut stocker plusieurs de ces valeurs, alors je vous décourage d'utiliser ce type là, très clairement il y a des manières de stocker plusieurs valeurs pour un enregistrement qui sont plus adaptées, et notamment d'utiliser des jointures comme on l'a fait d'ailleurs dans notre base de données, par exemple ici un médicament est associé à plusieurs voies par le biais de différentes tables qui sont liées entre elles par des relations clés primaires, clés étrangères, c'est comme ça qu'il faut procéder plutôt que d'utiliser des 7. Cependant si vous voulez regarder la documentation à ce sujet et bien vous pouvez le faire, je vous ai mis ici un lien que vous pouvez aller visiter. Dernier type que l'on va voir dans cette vidéo c'est le type date et heure, alors c'est intéressant on a globalement cinq types majeurs qu'on peut utiliser pour stocker des dates et des heures, le type date qui va stocker uniquement la fraction date, le type date-time qui va stocker les deux comme le type timestamp, le type time qui va stocker que la fraction heure, et le type year qui lui va stocker que l'année. Alors on voit que en fonction du type que l'on choisit on n'a pas forcément la même amplitude de valeur qu'on peut stocker, le type timestamp est beaucoup plus restrictif que le type date-time, donc je vous invite plutôt à utiliser le type date-time d'une manière générale. Alors chose intéressante, le type date-time et timestamp peuvent bénéficier d'automatisme et notamment se voir attribuer par défaut la date et l'heure courante au moment de la création d'un enregistrement ou au moment où on met à jour cet enregistrement, c'est quelque chose qui est très utile donc il faut savoir s'en servir donc je vous montre comment on procède. Le principe est le suivant, donc on choisit le type date-time ou timestamp pour notre colonne et si l'on veut qu'à l'insertion d'un nouvel enregistrement, on ait la date et l'heure courante d'insertion qui soient automatiquement renseignées, on rajoute derrière la définition du type default current timestamp, si on veut qu'il y ait une mise à jour, qu'il y ait la date de mise à jour de l'enregistrement qui soit renseignée lorsque les valeurs de cet enregistrement sont modifiées et bien on rajoute derrière on update current timestamp, si on veut avoir les deux comportements à la fois et bien on utilise les deux. Donc dans cet exemple c'est exactement ce qu'on fait, donc je vais créer une table test qui va comporter quatre colonnes, donc un entier, là une colonne création de type date-time qui va contenir la date et l'heure à laquelle l'enregistrement va être créé, la deuxième MAJ pour mise à jour qui va contenir l'information de la mise à jour lorsque l'enregistrement va être modifié et la dernière création mise à jour qui sera mis à jour au moment de la création et au moment de la mise à jour, donc qui combine finalement les propriétés des deux premiers. Donc je vais créer cette table et ensuite effectuer cette insertion, puis je vais mettre à jour les enregistrements de ma table, alors ici je modifie la valeur stockée dans la colonne 1 pour y stocker la valeur 5 dans tous les enregistrements pour lesquels la valeur précédente était un multiple de 2, j'utilise l'opérateur modulo, donc si je fais ensuite un select all from test, je vois que la colonne création n'a pas changé, c'est la même pour tous les enregistrements, c'est à dire que la valeur qui est stockée c'est celle qui a été stockée à la création de l'enregistrement et lorsque les enregistrements ont été mis à jour, donc tous ceux qui contiennent la valeur 5 sont ceux qui ont été mis à jour, et bien la valeur n'a pas changé. Par contre la valeur de la mise à jour a changé pour la colonne mise à jour, elle n'a changé que pour les seuls enregistrements qui ont été mis à jour. L'enregistrement 1, 3 n'était pas des multiples de 2, donc du coup ils n'ont pas été mis à jour et la valeur stockée dans la colonne mise à jour est restée à nul. En ce qui concerne la dernière colonne création mise à jour, elle contient finalement la date de création qui n'a pas été modifiée pour les enregistrements qui n'ont pas été modifiés et la date de création qui a été mise à jour avec la date et l'heure de mise à jour pour les enregistrements qui ont été modifiés, donc ils combinent finalement le comportement des deux colonnes précédentes. Donc voilà ce que j'avais à vous proposer pour les types de données, il y a beaucoup d'autres choses à savoir sur le sujet, je vous invite à aller consulter la documentation en ligne pour approfondir la question si vous en avez le besoin ou l'envie.

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