Manipulating Data
Salam, Bloguma xoş gəlmisiniz.
Bu yazımda sizlərə ORACLE SQL-də verilənlərin idarə olunması haqqında danışacağam. Ümid edirəm faydalı ola biləcəyəm.
Bütün ORACLE SQL ifadələr 6 müxtəlif tipdən ibarətdir.
- DDL(Data Definiton Language)
- DML(Data Manupulating Language)
- TCL(Transaction Control Language)
- Session Control Statements
- System Control Statements
- Embedded SQL Statements
Data Definition Lanuage(DDL)
DDL ifadələr baza obyektlərinin yaradılması üçün istifadə olunan obyektlərdir. Əsasən bu məqsədlər üçün istifadə olunur:
- Cədəllərin yaradılması, strukturlarının dəyişdirilməsi, silinməsi üçün
- Baza obyektləri haqqında şərhlərin(comment) yaradılması üçün
- İstifadəçilərə bazada işləmələri üçün imtiyazların verilməsi və alınması üçün
Aşağıda bəhs edəcəyim DDL ifadələr əsasən ORACLE SQL-də ən çox istifadə olunanlardandır.
- CREATE – Bazada cədvəllərin, view-ların, index-lərin, synonym-lərin yaradılması üçündür.
- ALTER – Bazada olan obyektlərin strukturlarını, adlarını və ya digər attributlarını dəyişmək üçün istifadə olunur.
- DROP – CREATE ilə yaradılmış baza obyektlərini bazadan xaric edir.
- RENAME – Bazada olan obyektin adını dəyişir.
- TRUNCATE – Bazada olan cədvəlin daxilindəki bütün sətirləri silmək üçün istifadə olunur.
- GRANT – İstifadəçilərə bazada yeni imtiyazlar vermək üçündür.
- REVOKE – İstifadəçilərə GRANT ilə verilmiş imtiyazları qaldırır.
- FLASHBACK – Bazanın və ya cədvəlin əvvəlki versiyasını bərpa edir.
- PURGE – Recycle Bin –də saxlanılan baza obyektlərinin xaric edir.
- COMMENT – DATA DİCTİONARY-lərə baza obyektləri haqqında şərhlər əlavə edir.
Yuxarıda qeyd olunmuş bütün DDL ifadələr haqqında zamanla ətraflı məlumat verəcəyəm.
DML(DATA MANİPULATİN LANGUAGE)
DML ifadələr baza obyektlərindəki məlumatlarla işləmək üçündür. Əsasən məlumatın əlavə olunmasını, məlumat üzərində dəyişiklik olunmasını və silinməsini təmin edir.
DML ifadələr bunlardır:
- SELECT – Cədvəldə və ya view-larda olan məlumatları bizə qaytarır.
- İNSERT – Cədvələ yeni sətir əlavə edir.
- UPDATE – Cədvəldə olan mövcud məlumatı yeniləyir.
- DELETE – Cədvəldə olan məlumatı silir.
- MERGE – Bir blok daxilində İNSERT, UPDATE, DELETE kimi DML ifadələrini bir kombinasiya şəklində istifadə etməyimizə imkan yaradır (Bu haqda geniş yazım olacaq).
TCL(TRANSACTİON CONTROL LANGUAGE)
DDL və DML ifadələrdən danışdıqda TCL ifadələrdən danışmamaq olmaz 🙂
TCL ifadələr DDL ifadələrlə yaranmış obyektlər üzərində DML ifadələrlə edilmiş dəyişikləri yadda saxlamaq(save) və ya qeydə almamaq(cancel) kimi qərarları qəbul edir.
3 tip TCL ifadə mövcuddur ORACLE SQL-də:
- COMMIT – Daxil edilmiş məlumatı bazada yadda saxlayır(save).
- ROLLBACK – Bazanı bir əvvəli vəziyətinə bərpa edir.
- SAVEPOİNT – Yaradılmış sesiya daxilində istifadə olunduğu zaman həmin istifadə olunduğu yeri işarələyir və gələcəkdə siz məlumatınızı bu işarələnmiş yerlərə kimi geri bərpa etmə imkanı yaradır.
Bu şəkil vasitəsilə daha aydın qruplaşdırmalar apara bilərsiniz.
CƏDVƏLƏ YENI SƏTIR ƏLAVƏ ETMƏK:
CREATE TABLE – ilə yaratmış olduğumuz cədvəlimizə yeni sətirlər əlavə etmək üçün İNSERT ifadəsini istifadə edirik. Sintaksisi bu şəkildədir:
INSERT INTO cədvəl_adı(sütun1, sütun2 ,sütun3) VALUES(sütun1_info, sütun2_info, sütun3_info);
2 cür istifadə qaydası vardır.
- Cədvəlin sütunlarının qeyd edərək
- Cədvəlin sütunlarını qeyd etmədən
Gəlin əvvəlcə bir cədvəl yaradaq və ona yeni sətirlər əlavə edərək bu üsulları yoxlayaq.
CREATE TABLE PERSON(
ID NUMBER PRIMARY KEY,
NAME VARCHAR2(20) NOT NULL,
SURNAME VARCHAR2(20) NOT NULL);
1ci üsul:
INSERT INTO PERSON(ID, NAME, SURNAME) VALUES(1, ‘ABDUL’, ‘ALI’);
2ci üsul:
INSERT INTO PERSON VALUES(1, ‘ABDUL’, ‘ALI’);
Bu üsullar arasındakı 2 fərq var.
- 1ci üsul zamanı cədvəlin strukturundan(daha dogrusu constraint-lərdən) asılı olaraq bəzən bəzi sütunları boş buraxa bilirik yəni cədvəlin sütun adını yazmadığınız zaman VALUES hissəsində də həmin sütunun dəyəri girilməyəcək ancaq 2ci üsulda siz cədvəlinizdə olan hər sütuna VALUES hissəsində uyğun məlumat daxil etməyə məcbursunuz, əks halda xəta ilə qarşılaşacaqsınız.
- 1ci üsul zamanı siz sütunların yerini istəyinizə uyğun dəyişə bilərsiniz o halda ki VALUES hissəsində də müvafiq sırlama ilə dəyərlər girilsin. Ancaq 2ci üsul zamanı siz bele bir dəyişiklik edə bilməssiniz cədvəliniz strukturundə sıralama necədirsə VALUES hissəsində də girilə dəyərlər eyni sıralama ilə olmalıdır.
CƏDVƏLDƏKİ MƏLUMATLARI YENİLƏMƏK:
Cədvəlimizi CREATE TABLE ilə yaratdıq və İNSERT ilə məlumatları daxil etdik ancaq bir müddət sonra bəzi məlumatları dəyişdirmək ehtiyacımız doğdu bu zaman UPDATE köməyimizə çatacaq.
Sintaksisi bu şəkildədir:
UPDATE cədvə_adı SET sütun1 = ‘yeni_məlumat1’, sütun2=’yeni_m’lumat2’ WHERE şərtimiz;
Məsələn: UPDATE PERSON SET NAME=’ABDULALI’ WHERE ID = 1;
WHERE – ORACLE SQL-in ən çox istifadə olunan ifadələrindəndir. Bizə hansı məlumatlarla işləyəcəyimizi seçməyə imkan verir.
WHERE – UPDATE-in əsas sintaksisə əlavədir əgər yazmasaq cədvəldəki müvafiq sütundakı bütün məlumatları yeniləyib verdiyimiz yeni dəyəri yazacaq.
CƏDVƏLDƏN MƏLUMATLARI SİLMƏK:
Cədvəlimizi CREATE TABLE ilə yaratdıq və İNSERT ilə məlumatları daxil etdik ancaq bir müddət sonra bəzi məlumatları silmək ehtiyacımız yarandı. Bu zaman ORACLE SQL in bir digər neməti olan DELETE ifadəsini işlədəcəyik.
Sintaksisi bu şəkildədir:
DELETE FROM cədvəl_adı WHERE şərtimiz;
Məsələn: DELETE FROM PERSON WHERE ID = 1;
Sintaksisdə gördüyümüz FROM və WHERE əlavədir. Yəni DELETE PERSON WHERE ID = 1; yaza bilərik bu zaman İD –si 1 olan məlumat cədvəldən silinəcək eyni zamanda DELETE PERSON; da yaza bilərik bu zaman heç bir şərt qoymadığımız üçün cədvəldəki bütün məlumatlar silinəcək eyni TRUNCATE əmrinin icrası kimi davranacaq DELETE;
CƏDVƏLDƏKİ DƏYİŞİKLİKLƏRİ YADDA SAXLAMAQ
ORACLE SQL-sə DML ifadələrlə işlədiyimiz zaman etdiyimiz dəyişikliklər ancaq bizim sesiya daxilində bizə dəyişiklik olunmuş kimi görünür ancaq başqa istifadəçi bizim dəyişikləri görməsi üçün bizim etdiyimiz dəyişiklikləri TCL ifadələrdən olan COMMİT ilə yadda saxlamalıyıq.
2 üsulla etdiyiniz dəyişiklikləri COMMİT edə bilərsiniz. Bu yolları ORACLE explicit COMMİT və implicit COMMİT adlandırır.
Explicit COMMİT: DML ifadələrinizi bitiridikdən sonra sadəcə COMMİT; yazıb enter etməniz yetərlidirki etdiyiniz dəyişikliklər cədvələ yazılsın.
İmplicit COMMİT: DML ifadələriniz bitdikdən sonra hər hansı DDL(create, alter …) ifadə istifadə edərsəniz bu zaman yuxarıda etdiyiniz bütün dəyişikliklər cədvələ yazılacaq. Həmçinin sesiyanı bağladığınız zamanda implicit commit baş verir.
Yalnız COMMİT baş verdikdən sonra digər istifadəçilər sizin etdiyiniz dəyişiklikləri görə biləcək.
ETDİYİMİZ DƏYİŞİKLƏRİ GERİ QAYTARMAQ
Əgər etdiyimiz dəyişikləri COMMİT etməmişiksə ROLLBACK ifadəsi ilə bu dəyişiklikləri geri qaytara bilərik.
Məsələn: Bir çox dəyisiklik edib COMMİT etdik sonra bir neçə dəyişiklik etdik ancaq bunların yadda qalmasını istəmirik o zaman:
COMMIT;
INSERT INTO PERSON(ID, NAME, SURNAME) VALUES(2, ‘ALI’, ‘ALI’);
ROLLBACK;
Bu zaman yeni əlavə etdiyimiz “ALİ” artıq PERSON cədvəlində mövcud olmayacaq.
ETDİYİMİZ DƏYİŞİKLƏR ARASINDA BƏRPA NÖQTƏLƏRİ QOYMAQ
TCL ifadələrin bir digər sevimli neməti isə SAVEPOİNT-lərdir. SAVEPOİNT-lər biz onların təyin olunduğu yerə kimi ROLLBACK etməyə imkan verir. Çox uzatmadan kod üzərində başa salmağa çalışım çünki saat 4:24 görünür mənim pc-də 😀
COMMIT;
INSERT INTO PERSON(ID, NAME, SURNAME) VALUES(2, “ALİ”, “ALI”);
SAVEPOINT SP_1;
UPDATE PERSON SET NAME=”NEHREMLI” WHERE ID=2; (:D)
SAVEPOINT SP_2;
ROLLACK TO SP_1;
COMMIT;
Bu kod icra olunduqdan sonra UPDATE ifadəmiz ROLLBACK olacaq İNSERT ifadəmiz isə cədvələ yazılacaq. COMMİT icra olunduğu zaman bütün SAVEPOİNT-lər ram-dan silinir.
Bu yazımda bu qədər, feedback yazmağı unutmayın 🙂