Тази страница обяснява как да актуализирате съществуващи данни в MySQL база данни.
Така че вече сме добавили данни към нашата база данни. Но сега осъзнаваме, че нашите данни съдържат грешка. На ябълките е присвоен
UnitId
от 1
— но това трябва да е 2
.
Можете да видите това тук:
Няма проблем. Просто ще актуализираме този запис.
UPDATE
Изявление
SQL UPDATE
изявление ни позволява да актуализираме данните в нашата база данни. Можем да използваме този израз, за да променим идентификатора на единицата от 1
до 2
. За да направим това, използваме WHERE
клауза, за да посочим точния запис, който трябва да актуализираме. Като това:
UPDATE Fruit SET UnitId = 2 WHERE FruitId = 1;
По принцип е препоръчително, когато правите UPDATE
операция, за да посочите полето за ID на записа, който се опитвате да актуализирате (или какъвто и да е неговият първичен ключ). Това помага да се предпазите от случайно актуализиране на грешен запис/и. В този пример знаехме, че ябълките имат FruitId
от 1
. Но може да не винаги знаете идентификатора на записа, който се опитвате да актуализирате. В такъв случай можете да направите нещо подобно:
UPDATE Fruit SET UnitId = 2 WHERE FruitName = 'Apple' AND UnitId = 1;
Можем да последваме всяко от тях с SELECT
изявление и ето резултата:
Имайте предвид, че DateUpdated колоната също е актуализирана, въпреки че не сме посочили актуализация за тази колона. Това е така, защото когато създадохме таблицата, ние настроихме тази колона да се актуализира с текущата дата/час всеки път, когато има актуализация на записа.
Ето кода, който използвахме, когато създадохме тази колона:
DateUpdated TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
По-конкретно, това е ON UPDATE CURRENT_TIMESTAMP
което доведе до актуализиране на колоната точно сега, когато изпълнихме UPDATE
изявление.
Безопасни актуализации
Можехме също толкова лесно да изградим нашата UPDATE
команда като тази (без AND UnitId = 1
):
UPDATE Fruit SET UnitId = 2 WHERE FruitName = 'Apple';
Въпреки това, може да срещнете следната грешка, ако се опитате да направите това:
Безопасен режим на актуализации
Ако срещнете горната грешка, това е, защото вашата MySQL връзка работи в режим на безопасни актуализации. Това ни помага да предотвратим случайно презаписване на големи количества данни. Всъщност, ако бяхме забравили да включим WHERE
клауза щяхме да актуализираме всеки един запис в таблицата!
Да, изпълнението на следния код ще доведе до актуализиране на всеки запис в нашата таблица до Banana :
UPDATE Fruit SET FruitName = 'Banana'
Така че има реална полза, като работите в режим на безопасни актуализации.
Въпреки това, ако наистина трябва да изпълните тази заявка (или ако всичките ви плодове наистина са се превърнали в банани), можете да направите едно от следните неща:
- Променете заявката си, за да включите
KEY
колона. Направихме това в примерите в горната част на тази страница. - Деактивирайте режима на безопасни актуализации.
Деактивирайте безопасния режим на актуализации
Ако установите, че трябва да извършите UPDATE
операция без използване на KEY
поле, винаги можете да деактивирате режима на безопасни актуализации.
За да деактивирате режима на безопасни актуализации, изпълнете следната команда, преди да стартирате вашия UPDATE
изявление:
set sql_safe_updates = 0;
Винаги е добра идея да възстановите настройката до предишното й състояние, след като сте готови — особено с настройки, които биха могли да имат широко въздействие като тази.
За да активирате режима на безопасни актуализации, изпълнете следното:
set sql_safe_updates = 1;
Всъщност можете да стартирате всичко едновременно, както следва:
set sql_safe_updates = 0; UPDATE Fruit SET UnitId = 2 WHERE FruitName = 'Apple'; select * from Fruit; set sql_safe_updates = 1;
Актуализиране на множество полета
Можете да актуализирате множество полета, като използвате запетая, за да разделите всяко присвоено поле. Като това:
UPDATE Fruit SET FruitName = 'Red Grapes', Inventory = '11' WHERE FruitId = 5;
Резултат: