Cette page explique comment mettre à jour les données existantes dans une base de données MySQL.
Nous avons donc déjà ajouté des données à notre base de données. Mais maintenant nous nous rendons compte que nos données contiennent une erreur. Les pommes ont reçu un
UnitId
de 1
- mais cela devrait être 2
.
Vous pouvez le voir ici :
Aucun problème. Nous allons simplement mettre à jour cet enregistrement.
La UPDATE
Déclaration
Le SQL UPDATE
déclaration nous permet de mettre à jour les données dans notre base de données. Nous pouvons utiliser cette déclaration pour changer l'ID d'unité de 1
à 2
. Pour ce faire, nous utilisons le WHERE
clause pour spécifier l'enregistrement exact que nous devons mettre à jour. Comme ceci :
UPDATE Fruit SET UnitId = 2 WHERE FruitId = 1;
Généralement, c'est conseillé lors d'une UPDATE
opération, pour spécifier le champ ID de l'enregistrement que vous essayez de mettre à jour (ou quelle que soit sa clé primaire). Cela permet d'éviter de mettre à jour accidentellement le ou les mauvais enregistrements. Dans cet exemple, nous savions que les pommes avaient un FruitId
de 1
. Mais vous ne connaissez peut-être pas toujours l'ID de l'enregistrement que vous essayez de mettre à jour. Dans ce cas, vous pourriez faire quelque chose comme ceci :
UPDATE Fruit SET UnitId = 2 WHERE FruitName = 'Apple' AND UnitId = 1;
Nous pouvons suivre l'un ou l'autre avec un SELECT
déclaration et voici le résultat :
Notez que le DateUpdated a également été mise à jour, même si nous n'avons pas spécifié de mise à jour pour cette colonne. En effet, lorsque nous avons créé la table, nous avons défini cette colonne pour qu'elle soit mise à jour avec la date/heure actuelle à chaque mise à jour de l'enregistrement.
Voici le code que nous avons utilisé lors de la création de cette colonne :
DateUpdated TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
Plus précisément, il s'agit du ON UPDATE CURRENT_TIMESTAMP
qui a entraîné la mise à jour de la colonne tout à l'heure lorsque nous avons exécuté le UPDATE
déclaration.
Mises à jour sécurisées
Nous aurions tout aussi bien pu construire notre UPDATE
commande comme celle-ci (sans AND UnitId = 1
):
UPDATE Fruit SET UnitId = 2 WHERE FruitName = 'Apple';
Cependant, vous pourriez rencontrer l'erreur suivante si vous essayez de le faire :
Mode de mises à jour sécurisées
Si vous rencontrez l'erreur ci-dessus, c'est parce que votre connexion MySQL s'exécute en mode Safe Updates. Cela nous évite d'écraser accidentellement de grandes quantités de données. En fait, si nous avions oublié d'inclure le WHERE
clause, nous aurions mis à jour chaque enregistrement de la table !
Oui, l'exécution du code suivant entraînera la mise à jour de chaque enregistrement de notre table vers Banana :
UPDATE Fruit SET FruitName = 'Banana'
L'exécution en mode Mises à jour sécurisées présente donc un réel avantage.
Cependant, si vous avez vraiment besoin d'exécuter cette requête (ou si tous vos fruits se sont vraiment transformés en bananes), vous pouvez effectuer l'une des opérations suivantes :
- Modifiez votre requête pour inclure une
KEY
colonne. Nous l'avons fait dans les exemples en haut de cette page. - Désactiver le mode de mises à jour sécurisées.
Désactiver le mode de mises à jour sécurisées
Si vous trouvez que vous devez effectuer une UPDATE
opération sans utiliser de KEY
champ, vous pouvez toujours désactiver le mode Safe Updates.
Pour désactiver le mode Safe Updates, exécutez la commande suivante avant d'exécuter votre UPDATE
déclaration :
set sql_safe_updates = 0;
C'est toujours une bonne idée de restaurer le paramètre à son état précédent une fois que vous avez terminé, en particulier avec des paramètres qui pourraient avoir un impact généralisé comme celui-ci.
Pour activer le mode Safe Updates, exécutez ce qui suit :
set sql_safe_updates = 1;
En fait, vous pourriez tout exécuter en même temps, comme ceci :
set sql_safe_updates = 0; UPDATE Fruit SET UnitId = 2 WHERE FruitName = 'Apple'; select * from Fruit; set sql_safe_updates = 1;
Mettre à jour plusieurs champs
Vous pouvez mettre à jour plusieurs champs en utilisant une virgule pour séparer chaque affectation de champ. Comme ceci :
UPDATE Fruit SET FruitName = 'Red Grapes', Inventory = '11' WHERE FruitId = 5;
Résultat :