CodeGym /Kurslar /SQL SELF /Cədvəllərin silinməsi DROP TABLE istifadə e...

Cədvəllərin silinməsi DROP TABLE istifadə etməklə

SQL SELF
Səviyyə , Dərs
Mövcuddur

İndi gəlin danışaq ki, cədvəlləri bazadan necə düzgün silmək lazımdır və bunun üçün DROP TABLE komandasından necə istifadə olunur.

DROP TABLE — bu komanda cədvəli və onun bütün məlumatlarını və strukturunu bazadan silməyə imkan verir. Təsəvvür elə ki, diplom işini yazmısan, sonra təsadüfən onu notbukla birlikdə yandırmısan. Bax, bu DROP TABLE kimidir. Qorxulu səslənir? Narahat olma, əsas odur ki, necə işlədiyini başa düş və ehtiyatlı ol!

DROP TABLE xüsusiyyətləri:

  • Bütün cədvəli (və onun məlumatlarını) bərpa imkanı olmadan silir (əgər backup etməmisənsə).
  • Cədvəlin diskdə tutduğu yeri tamamilə təmizləyir.
  • Bütün əlaqəli index, constraint və trigger-ləri də silir.

DROP TABLE komandasının sintaksisi

DROP TABLE komandasının sintaksisi çox sadə və aydındır:

DROP TABLE cedvel;

Burada:

  • cedvel — silmək istədiyin cədvəlin adı.

Cədvəlin silinməsinin sadə nümunəsi

Gəlin bir nümunəyə baxaq. Tutaq ki, bizdə students adlı cədvəl var:

CREATE TABLE students (
    id SERIAL PRIMARY KEY,
    name VARCHAR(100) NOT NULL,
    age INTEGER CHECK (age > 0)
);

Əgər bu cədvələ artıq ehtiyac yoxdursa, onu belə silə bilərsən:

DROP TABLE students;

Bu komandanı işlətdikdən sonra students cədvəli bazadan tamamilə yox olacaq, içindəki bütün tələbə məlumatları ilə birlikdə (əgər orada nəsə var idisə).

Bir neçə cədvəlin silinməsi

Bir sorğu ilə bir neçə cədvəli də silə bilərsən. Bunun üçün adlarını vergüllə ayır:

DROP TABLE table1, table2, table3;

Nümunə:

DROP TABLE students, teachers, courses;

Bu komanda üç cədvəli birdən siləcək: students, teacherscourses.

IF EXISTS istifadə etmək

DROP TABLE komandası mövcud olmayan cədvəli silməyə çalışsan, error verəcək. Bu errorun qarşısını almaq üçün IF EXISTS opsiyasından istifadə edə bilərsən:

DROP TABLE IF EXISTS cedvel_adi;

Nümunə:

DROP TABLE IF EXISTS students;

Əgər students cədvəli varsa, silinəcək. Yoxdursa, komanda error verməyəcək, sadəcə xəbərdarlıq çıxacaq.

Asılılıqları nəzərə alaraq cədvəllərin silinməsi

Bəzən cədvəlləri silmək çətin ola bilər, çünki başqa cədvəllər və obyektlər ondan asılıdır. Məsələn, cədvəldə başqa cədvəllərlə əlaqəli foreign key-lər varsa. Foreign key-lər barədə növbəti səviyyədə danışacam :P

Tutaq ki, səndə iki cədvəl var: studentsenrollments. enrollments cədvəli students-dan asılıdır, çünki orada foreign key ilə ona istinad edir.

CREATE TABLE students (
    id SERIAL PRIMARY KEY,
    name VARCHAR(100) NOT NULL
);

CREATE TABLE enrollments (
    id SERIAL PRIMARY KEY,
    student_id INTEGER REFERENCES students(id), -- student_id sütunu students.id-ə istinad edir
    course_name VARCHAR(100)
);

Əgər sən students cədvəlini silməyə çalışsan, amma əvvəlcə enrollments cədvəlini silməsən, error alacaqsan:

DROP TABLE students;
-- ERROR:  "students" cədvəlini silmək mümkün deyil, çünki digər obyektlər ondan asılıdır
-- DETAIL:  enrollments_student_id_fkey constraint-i enrollments cədvəlində students cədvəlinə asılıdır

Cədvəli və bütün asılı obyektləri silmək üçün CASCADE opsiyasından istifadə et:

DROP TABLE students CASCADE;

Bu komanda students cədvəlini və ondan asılı olan bütün obyektləri (bu halda enrollments cədvəlini) avtomatik siləcək.

Ancaq CASCADE ilə ehtiyatlı ol, çünki bəzən gözlədiyindən daha çox obyekt silinə bilər. Hansı obyektlərin silinəcəyini bilmək üçün CASCADE istifadə et və sonra log-lara bax :)

Asılı obyektləri silmədən cədvəllərin silinməsi

Əgər təsadüfən əlaqəli obyektləri silmək istəmirsənsə, RESTRICT opsiyasından istifadə et. Bu opsiya cədvəldən asılı başqa obyektlər varsa, silməyə icazə vermir:

DROP TABLE students RESTRICT;

Əgər cədvəlin asılı obyektləri varsa, komanda error verəcək və silmə əməliyyatı baş tutmayacaq.

Müvəqqəti cədvəllər və onların silinməsi

Müvəqqəti cədvəllər (CREATE TEMP TABLE ilə yaradılanlar) database sessiyası bitəndə avtomatik silinir. Amma sessiya ərzində onları əl ilə də DROP TABLE ilə silə bilərsən.

Nümunə:

CREATE TEMP TABLE temp_data (
    id SERIAL PRIMARY KEY,
    value TEXT
);

DROP TABLE temp_data;

DROP TABLE istifadə edərkən tipik səhvlər

Mövcud olmayan cədvəli silməyə cəhd. Errorun qarşısını almaq üçün IF EXISTS istifadə et.

DROP TABLE IF EXISTS non_existing_table;

Asılılıqları olan cədvəli CASCADE olmadan silmək. Əgər başqa cədvəllər silmək istədiyin cədvələ bağlıdırsa, komanda error verəcək. Bütün asılılıqları silməkdə əminsənsə, CASCADE istifadə et.

DROP TABLE students CASCADE;

CASCADE həddindən artıq istifadə. Bu, kritik obyektlərin silinməsinə səbəb ola bilər. CASCADE istifadə etməzdən əvvəl, hansı obyektlərin silinəcəyini başa düşdüyünə əmin ol.

Təsadüfən cədvəli silmək. Xüsusilə production bazalarda nəyi sildiyini həmişə iki dəfə yoxla.

Faydalı məsləhətlər, bəzən ciddi

Faydalı məsləhət 1: hər şeyi inkar et

İzləri məlumatlardan tez sil.
Sonra tam əminliklə de: «Bu, loglarda anomaliya idi. Artıq düzəltdim».

Elə göstər ki, bu bir feature idi.
«Biz resiliency üçün stress-test etmək qərarına gəldik... Və bəli, sistem tab gətirmədi. Amma indi bilirik nəyi yaxşılaşdırmaq lazımdır!»

Evakuasiya elan et: «Bizdə production səviyyəli insident var».
Hamı qaçanda və panikada olanda — heç kim sual verməyə çatmır ki, kim DELETE FROM yazıb WHERE olmadan.

hh.ru-da CV-ni DBA adı ilə yenilə.
İndi sən həqiqətən database-lərə daha yaxınsan. Xüsusilə artıq mövcud olmayanlara.

Əvvəlcədən coffee-break planlaşdır.
Çünki bir neçə dəqiqəyə sənə «layihədən bir az dincəlmək» təklif oluna bilər... həmişəlik.

Elə göstər ki, bu staging idi.
«Siz əminsiniz ki, bu test mühiti deyildi? Axı nəsə test edirdik... yəqin ki...»

Open space-in tam ortasında otur.
Heç kim inanmaz ki, günahkar bu qədər açıq oturardı.

ChatGPT-ni günahlandır.
Bütün günah AI-dadır. Gördüyünüz kimi, hələ sizi əvəz etməyə hazır deyil. Xahiş edirəm, işdən çıxarmayın.

Faydalı məsləhət 2: ləkəli reputasiya ilə iş axtarmaq

  • Bütün cədvəlləri birdən sil. Onda rəhbərlik kimisə şəxsən işdən çıxarmağa vaxt tapmayacaq.

  • Heç kim tək cavabdeh deyil. Əgər rəhbəri də özünlə aparsan — pis referans olmayacaq.

  • Müştəri məlumatlarını da sildin? Təbriklər, şirkətin sənin işdən çıxarılmandan daha ciddi problemləri var.

Faydalı məsləhət 3: silməzdən əvvəl backup et

Və indi — zarafatsız.

Cədvəli silməzdən əvvəl (xüsusilə vacib məlumatlar varsa), pg_dump ilə backup et. Əgər nəyisə səhvən silsən, məlumatları bərpa edə biləcəksən.

Backup üçün komanda nümunəsi:

pg_dump -U username -d database_name -t table_name > table_backup.sql

Bu mərhələdə sən artıq DROP TABLE komandası ilə işləməyin bütün əsaslarını öyrəndin. Bu "nüvə düyməsini" yanında saxla və yalnız əmin olduğun halda istifadə et. Növbəti dərsdə cədvəl və digər database obyektlərinin strukturunun dəyişdirilməsini öyrənməyə davam edəcəyik.

Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION