60-Mavzu: Yozuvlarni o‘chirish. Reja: 1. Ma'lumotlar bazasidan ma'lumotlarni o'chirish (DELETE) 2. DELETE FROM 3. UPDATE `USERS Ma'lumotlar bazasidan o'chirish "DELETE" buyrug'i yordamida amalga oshiriladi (ingliz tilidan "DELETE" deb tarjima qilingan). Funktsiya bir qatorni emas, balki bir nechtasini o'chiradi, shu bilan birga o'chirish uchun qatorni "SELECT" funksiyasi mantig'iga ko'ra tanlaydi. Ya'ni ma'lumotlar bazasidan ma'lumotlarni o'chirish uchun ularni aniq belgilash kerak. Bitta qatorni o'chirish uchun misol SQL buyrug'i:
DELETE FROM `USERS` WHERE `ID` = 2 LIMIT 1;
Ushbu so'rov "ID" ustunida "2" qiymatiga ega bo'lgan "FOYDALANUVCHILAR" jadvalidan bitta yozuvni olib tashlaydi.
Shuni esda tutingki, so'rov oxirida "LIMIT 1;" tanlovi chegarasi mavjud. 1 qator o'lchamda. Agar "ID" maydoni "ASOSIY KEY" bo'lsa, uni o'rnatib bo'lmaydi (asosiy kalit, ya'ni u faqat noyob qiymatlarni o'z ichiga oladi). Lekin baribir biz “LIMIT 1;” chegarasini belgilashni tavsiya qilamiz. har qanday holatda, agar siz faqat bitta qatorni o'chirmoqchi bo'lsangiz.
Keling, bir vaqtning o'zida ma'lumotlar oralig'ini o'chirishga harakat qilaylik. Buning uchun so'rovni tuzish kifoya, buning natijasida bir nechta qatorlar qaytariladi. Ushbu qatorlar o'chiriladi:
DELETE FROM `USERS` WHERE `ID` >= 5;
Bu soʻrov “ID” ustunidagi qiymati 5 dan kichik boʻlgan jadvallardagi barcha qatorlarni oʻchirib tashlaydi. Agar “QAYERDA” sharti va “CHEKLAMLI” chegarani qoʻymasangiz, jadvaldagi mutlaqo barcha satrlar oʻchiriladi:
DELETE FROM `USERS`;
MySQL-ning ba'zi versiyalarida barcha qatorlarni o'chirishning " DELETE FROM _; " usuli " TRUNCATE _; " dan sekinroq bo'lishi mumkin ; Shuning uchun, butun jadvalni tozalash uchun hali ham "TRUNCATE" dan foydalanish yaxshiroqdir.
Ma'lumotlar bazasidagi ma'lumotlarni yangilash (UPDATE)
Yangilash funksiyasi "UPDATE" (ingliz tilidan "UPDATE" deb tarjima qilingan) veb-sayt loyihalarida juda tez-tez ishlatiladi. “OʻCHIRISH” funksiyasida boʻlgani kabi, yangilash funksiyasi, agar olib kelish cheklovi boʻlmasa, shartlarga mos keladigan barcha maydonlarni yangilamaguncha toʻxtamaydi. Shuning uchun, bitta qator o'rniga jadvalning yarmini tasodifan yangilamaslik uchun aniq shartlarni o'rnatish kerak. Mana "UPDATE" buyrug'idan foydalanishga misol:
UPDATE `USERS` SET `NAME` = 'Мышь' WHERE `ID` = 3 LIMIT 1;
Ushbu misolda, "ID" ustuni "3" ga o'rnatilgan qatorning "NAME" ustunida "Foydalanuvchilar" jadvali "Sichqoncha" ga o'rnatiladi. Vergul bilan ajratilgan qiymatlarni o'tkazish orqali bitta yozuv uchun bir vaqtning o'zida bir nechta ustunlarni yangilashingiz mumkin. Bitta so‘rov yordamida nafaqat “NAME” ustunidagi qiymatni, balki “OZIQ-OVQAT” ustunidagi qiymatni ham yangilashga harakat qilaylik:
UPDATE `USERS` SET `NAME` = 'Мышь', `FOOD` = 'Сыр' WHERE `ID` = 3 LIMIT 1;
Agar siz hech qanday LIMIT chegaralari va QAYER shartlarini o'rnatmasangiz, barcha jadval yozuvlari istisnosiz yangilanadi.
DELETE iborasi vaqtinchalik yoki doimiy asosiy jadvallar, ko'rinishlar yoki kursorlardan qatorlarni olib tashlaydi va oxirgi ikki holatda operatorning ta'siri ushbu ko'rinishlar yoki kursorlarga ma'lumotlar olingan asosiy jadvallarga kengaytiriladi . O'chirish operatori oddiy sintaksisga ega:
FROMDAN OʻCHIRISH
[ WHERE
] ;
Agar WHERE bandi bo'lmasa , jadval yoki ko'rinishdagi barcha satrlar o'chiriladi (ko'rinish yangilanishi kerak). Transact-SQL da buyruq yordamida ushbu operatsiyani (jadvaldagi barcha qatorlarni o'chirish) tezroq bajarishingiz mumkin.
TRUNCATE TABLE Biroq, TRUNCATE TABLE buyrug'ini amalga oshirishda bir qator o'ziga xosliklar mavjud, ularni yodda tutish kerak:
alohida jadval qatorlarini o'chirish jurnalga yozilmaydi; jurnalda faqat jadval ma'lumotlari bilan band bo'lgan sahifalarning chiqarilishi qayd etiladi;
triggerlarni, xususan, o'chirish triggerini qayta ishlamang;
agar jadvalga chet el kaliti havola qilingan bo'lsa va hatto chet el kalitida kaskadni o'chirish opsiyasi bo'lsa ham buyruq qo'llanilmaydi.
hisoblagich qiymati ( IDENTITY ) dastlabki qiymatga qaytariladi.
6.3.1-misol
Noutbuk stolidan ekrani 12 dyuymdan kam bo'lgan barcha noutbuklarni olib tashlamoqchisiz.
Noutbukdan oʻchirish _
QAYER ekrani < 12 ;
Barcha noutbuklar operator yordamida o'chirilishi mumkin
Noutbukdan o'chirish ;
yoki
TRUNCATE TABLE Noutbuk;
Transact-SQL qo'shimcha FROM bandini kiritish orqali DELETE iborasining sintaksisini kengaytiradi :
FROM Jadval tipidagi manbadan foydalanib, siz birinchi FROM bandida jadvaldan o'chiriladigan ma'lumotlarni belgilashingiz mumkin .
Ushbu band yordamida siz o'chiriladigan qatorlarni aniqlash uchun WHERE bandidagi pastki so'rovlardan foydalanishni mantiqiy ravishda almashtiradigan jadvallarni birlashtirishni amalga oshirishingiz mumkin. Keling, aytilganlarni misol bilan tushuntirib beraylik.
6.3.2-misol
Kompyuter jadvalida tegishli qatorlar mavjud bo'lmagan shaxsiy kompyuter modellarini Mahsulot jadvalidan olib tashlash talab qilinsin.
Standart sintaksisdan foydalanib, ushbu vazifani quyidagi so'rov bilan hal qilish mumkin:
Mahsulotdan Oʻchirish _
WHERE turi = 'kompyuter' VA
model YO'Q ( Modelni tanlang _
KOMPYUTERDAN _
) ;
E'tibor bering, printer va noutbuk modellari ham o'chirilmasligi uchun bu erda turi = "kompyuter" predikati kerak.
Xuddi shu muammoni qo'shimcha FROM bandi bilan quyidagi tarzda hal qilish mumkin:
Mahsulotdan Oʻchirish _
FROM Mahsulot pr CHAPGA QO'SHILING
PC ON pr.model = PC.model
WHERE turi = 'kompyuter' VA
PC.model IS NULL ;
Bu erda tashqi birlashma qo'llaniladi, buning natijasida kompyuter jadvalida bo'lmagan shaxsiy kompyuter modellari uchun PC.model ustunida NULL qiymati bo'ladi , bu o'chiriladigan qatorlarni aniqlash uchun ishlatiladi.