Salut à tous.

Envoyé par
CinePhil
1) Pourquoi faire un REPLACE plutôt qu'un INSERT ?
C'est une commande qui permet dee faire à la fois un INSERT si la ligne n'existe pas ou un UPDATE si la ligne existe déjà.

Envoyé par
CinePhil
2) La colonne id est de type entier et vous lui donnez en valeur une chaîne vide ! Pourquoi ?
Le message d'erreur que vous obtenez est d'ailleurs explicite à ce sujet !
@ LampeRouge : En effet, pourquoi mettre vide comme valeur pour la colonne "id" ?
Cette colonne attend une valeur numérique entière et rien d'autre.
Il faut être logique, soit vous mettez une valeur numérique entière pour la colonne "id" et dans ce cas là, je comprends pourquoi vous utilisez le REPLACE.
Soit vous n'introduisez pas la colonne "id" dans votre requête et vous laissez MySql se débrouiller tout seul pour lui attribuer une valeur.
Mais dans ce cas là, ce n'est pas un REPLACE que vous devez faire, mais bien un INSERT.
Ne pas oublier que le critère du choix de l'insertion ou de la mise à jour se fait sur votre clef primaire, qui dans ce cas-çi est la colonne "id".

Envoyé par
CinePhil
3) De plus, elle est auto-incrémentée donc vous n'avez pas besoin de spécifier l'identifiant dans votre requête d'insertion.
Ca depend de l'usage que LampeRouge veut faire de sa requête.
S'il précise une valeur à la colonne "id", deux cas peuvent se présenter.
a) soit la valeur de la colonne "id" existe déjà dans la table et sa requête va faire une mise à jour.
b) soit la valeur de la colonne "id" n'existe pas dans la table et sa requête va faire une insertion.
S'il désire conserver le "REPLACE" alors il doit préciser la colonne "id" afin que la requête sache quoi faire sur la ligne, comme je viens de l'expliquer.
S'il ne désire pas mettre la colonne "id" dans sa requête, le mieux est de mettre un INSERT à la place.

Envoyé par
CinePhil
4) En SQL, les valeurs textuelles s'écrivent entre apostrophes, pas entre guillemets !
En SQL pur, je veux bien. Mais ne sachant pas le contexte où se trouve cette requête, on peut supposer qu'il s'agisse en fait du php.
--> https://pbnaigeon.developpez.com/tut...phe-guillemet/
de ce fait, une chaîne entre apostrophe ne sera pas modifier tandis qu'une chaîne entre guillemet peut éventuellement l'être.

Envoyé par
CinePhil
5) Vous devriez nommer vos tables au singulier. Le pluriel peut prêter à confusion dans la compréhension du schéma.
Entièrement d'accord. On peut même ajouter un préfixe s'il est nécessaire de faire une distinction sur le suffixe.

Envoyé par
CinePhil
6) Le moteur MyISAM ne bénéficie pas des clés étrangères. Vous risquez donc une incohérence de données si vous n'utilisez pas cet outil essentiel de l'intégrité référentielle entre les tables.
7) Pour la colonne value est-elle de type LONGTEXT ? Vous voulez enregistrer des romans en base de données ?[/quote]
--> https://dev.mysql.com/doc/refman/8.0...-overview.html
La bonne question concerne l'usage que l'on va faire de se texte.
Et si l'on pratique une recherche sur des mots clefs, il vaut mieux définir cette colonne en "FTS" (full text serach).
En ce qui concerne la syntaxe du REPLACE, je vous conseille de lire la documentation mysql :
--> https://dev.mysql.com/doc/refman/8.0/en/replace.html
Si vous désirez faire une insertion dans la table, vous avez le choix entre :
INSERT INTO variables (`nom`, `value`) VALUES ('test', 'ici');
ou bien :
REPLACE INTO variables (`nom`, `value`) VALUES ('test', 'ici');
qui aura la même syntaxe que le INSERT.
Juste une remarque : quand vous utilisez des mots réservés, vous devez les mettre entre apostrophes inversées.
Il s'agit de la touche : alt gr + 7 : `
@+
Partager