Mysql
 sql >> Base de données >  >> RDS >> Mysql

Mettre à jour les données dans une base de données MySQL

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 :