SQL-де кестедегі жазбадағы деректерді қалай өзгертуге болады: SQL UPDATE сұранысы
SQL жазбаларын жаңарту, кестедегі қатарды өзгерту үшін SQL командаларын қалай жазуға болады?
Мен SQL дерекқорында деректерді редактирлеуді оңай сөздермен, түсініксіз сөздерсіз түсіндіремін. UPDATE SET командасы оңай! MySQL, PostgresQL, MS SQL, SQLite, Oracle, MariaDB және басқа SQL DBMS үшін жарамды.
SQL-дағы UPDATE командасы кестедегі бар деректерді өзгертуде қолданылады
Бұл бір немесе бірнеше қатарды, сондай-ақ таңдалған жазудағы бір немесе бірнеше өрісті жаңартуға мүмкіндік береді. SQL UPDATE SET сұрауының синтаксисі мынадай:
UPDATE
tableName
SET
field1 = value1,
field2 = value2
WHERE
condition;
Бұл "TABLE ДЕРЕКТЕРІН ЖАҢАРТУ, ЖАҢА МАҒЫНАЛАРДЫ БЕКІТУДІ БОЛАДЫ, ШАРТҚА САЙ КЕЛЕТІН ЖАЗБАЛАРДА" дегенді білдіреді.
Егер шарт көрсетілмесе, кестедегі барлық қатарлар жаңартылады!
Сондықтан, көп жағдайда жаңартылатын деректерді шектеу үшін шартты (WHERE) пайдалану маңызды.
Соңғы жаңартылған өріс пен WHERE операторы арасында үтір болмауы керек; әйтпесе, қате пайда болады!
Мысалы, біздің дерекқорымызда "products" деп аталатын өнімдер кестесі бар, және біз белгілі бір идентификаторға (id) ие өнімнің бағасын өзгертуіміз керек.
Неге id? Бұл кестедегі әрбір қатардың уникалды нөмірі.
Ол жерде бір кестеде бірнеше бірдей id бола алмайды, бұл бізге жазбаның id-ін білген кезде дәл сол жазбаны өзгертуге гарантия береді.
SQL командасы көмегімен id бойынша жазбаны жаңарту мысалы:
id 5 болатын өнімнің бағасын жаңарту үшін SQL сұрауы мынадай болады:
UPDATE products SET price = 200 WHERE id = 5;
Бұл жағдайда id 5 болатын өнімнің бағасы 200-ге жаңартылады.
Ескеріңіз, егер біз WHERE шартын өткізсеңіз, кестедегі барлық өнімдердің бағасы жаңартылады.
SQL-да жазбадағы бірнеше өрісті қалай өзгертуге болады?
UPDATE командасы арқылы біз тек бір өрісті емес, бірнешеуін бірден жаңарта аламыз. Мысалы, егер id 5 болатын өнімнің атауы мен бағасын жаңартқымыз келсе, SQL сұрауы мынадай болады:
UPDATE products SET name = 'Новый продукт', price = 200 WHERE id = 5;
SQL-да шарт негізінде бірнеше жазбаны қалай жаңартуға болады:
Кейде бірнеше қатарды бірден белгілі бір критерий бойынша жаңарту керек. Мысалы, егер біз "Электронды құралдар" категориясындағы (id-і 5 дейік) барлық өнімдердің бағасын 10%-ға көтергіміз келсе, келесі сұрауды пайдалана аламыз:
UPDATE products SET price = price * 1.10 WHERE category_id = 5;
Бұл жағдайда id 5 болатын категориядағы барлық өнімдердің бағасы көтеріледі. Мұндай шарттарды пайдалана отырып, деректерді кешенді өңдеуге тиімді түрде өңдей аламыз.
SQL-да ішкі сұрауларды пайдаланып деректерді жаңарту:
Субсұрауды пайдалану керек болғанда SQL-дағы UPDATE командасының мысалы. Субсұрауларды қолдану, егер біз басқа кестеден алынған деректер негізінде жазбаларды жаңартуға қажет болса, пайдалы болуы мүмкін.
Мысалы, егер "discounts" деп аталатын кестеміз болса және өнімдердің бағасын олардың қазіргі жеңілдіктеріне негізделген жаңартқымыз келсе, онда сұрау мынадай болуы мүмкін:
UPDATE
products
SET
price = price - (
SELECT
discount
FROM
discounts
WHERE
products.id = discounts.product_id
);
Бұл сұрау әр өнімнің бағасын жаңартып, оны жеңілдіктер кестесінен алынған тиісті жеңілдіктің мөлшерімен азайтуды білдіреді.
SQL-да деректерді жаңартқанда транзакцияларды пайдалану
Кейде жаңартулар үлкен көлемдегі деректерді талап етеді, және дерекқордың интегритетін қамтамасыз ету үшін UPDATE команданы транзакцияға орау мағынасы бар. Бұл өзгерістерде қате болған жағдайда оралуға мүмкіндік береді.
Транзакциялар бірнеше операцияларды бір бүтін ретінде орындау үшін топтастыруға мүмкіндік береді. Егер транзакциядағы операциялардың бірі сәтсіз болса, барлық транзакцияны қайтарып алуға болады, және деректер бастапқы күйде қалуы мүмкін.
Бізде "accounts" деп аталатын кесте бар екенін және бір есепшоттан екінші есепшотқа ақша аударғымыз келсе. Бұл процесс екі кезеңнен тұрады: жіберуші есепшоттан соманы алып тастау және сол соманы қабылдаушы есепшотқа қосу.
Деректерді жаңартқанда SQL транзакциясының мысалы:
BEGIN;
UPDATE
accounts
SET
balance = balance - 100
WHERE
account_id = 1;
UPDATE
accounts
SET
balance = balance + 100
WHERE
account_id = 2;
-- Жаңартулар сәтті өтті ме тексеру
IF (SELECT balance FROM accounts WHERE account_id = 1) < 0 THEN
ROLLBACK; -- Егер есепшотта қаражат жетіспесе транзакцияны қайтарып алу
ELSE
COMMIT; -- Егер бәрі жақсы болса, өзгерістерді растама
END IF;
Бұл транзакциялар пайдаланудың арқасында көптеген әлеуетті қателерден аулақ болуға және дерекқор деректерінің интегритетін қамтамасыз етуге көмектесетін өте қарапайым мысал.
Біз BEGIN командасымен транзакцияны бастаймыз. Содан кейін жіберуші есепшоттың балансын азайту және қабылдаушы есепшоттың балансын арттыру үшін екі жаңартуды орындаймыз. Одан кейін, жіберуші есепшотта жеткілікті қаражат бар-жоғын тексереміз. Егер баланс азайғаннан кейін теріс мәнге айналса, ROLLBACK командасын пайдалана отырып транзакцияны қайтарып аламыз. Егер бәрі жақсы болса, COMMIT командасын пайдаланып өзгерістерді растаймыз.