Truncate-Delete-Drop differences. (SQL Server)
Bu günlər də SQL sorğu dili üçün keçirilən müsahibələrdəki verilən suallar arasında yuxarıda qeyd olunmuş mövzu hər zaman aktual qalır.Oxşarları və fərqlərini bilmək iş müsahibələrində namizədi bir neçə addım irəli aparır.
Truncate-Delete-Drop fərqləri.
Öncəliklə ilk olaraq qeyd eləyək ki, Truncate və Delete əmrləri table-n daxilində index, column və row-ları silə bilər.Yəni Truncate və Delete əmrləri table fiziki bir təmas göstərməzlər.Onun sadəcə daxilindəki məlumatlara təsir eləyərlər.
Lakin DROP əmri isə Table birbaşa silə bilir və silinən Table geri qaytarıla bilmir.Yəni Table daxilindəki məlumatlar da DROP əmri ilə yazılarsa itə bilir.
Bu ilk fərq idi.
İkinci və əsas fərq Truncate və Delete əmrləri arasındadır.Hər iki əmr bir-birinə oxşamaqla bərabər həm də ciddi fərqləri vardır.Əslində ilk baxışdan bu fərqlər o qədər də əhəmiyyətli görsənməsədə “bir gün SQL sorğu dilində işin Ustası olarkən” hər zaman bu əmrlər arasındakı fərqə diqqət edəcəksiz.
Üçüncü fərq isə fərqli əmrlərə aid olmasıdır.
Truncate və Drop — DDL
Delete — DML aiddir.
İlk öncə oxşar xüsusiyyətlərin qeyd eləyək.
Həm Truncate həm də Delete table daxilində (column,index, row) silmək üçün istifadə olunan əmrlərdir.Hər ikisində table daxilində məlumatları silərkən geri qaytarmaq mümkündür.
FƏRQLƏRİ
Truncate ilə table daxilindəki bütün məlumatları silər.
Delete isə where ilə birlikdə yazılarsa filtrlənmiş şəkildə sadəcə table daxilində seçdiyimiz məlumatları silir.Əgər where `dən istifadə etməzsək o zaman table bütünlüklə silinər.
Ancaq iki əmrdə table dakı məlumatları silməsinə baxmayaraq — kod yazılması, mənbə və performans kimi xüsusiyyətlərə görə fərqlənirlər.
Truncate
Truncate əmri, transaction log`da bir sıra silinmə qeydini saxlamadan cədvəldəki bütün məlumatları silir.
Yazılım kodu:
Truncate table [{ verilenler_bazası. [ schema_adı ].} ] table_adı
Delete
Delete əmri , transaction log` da table daxilindəki məlumatları silər və hər sildiyi məlumatı transaction log`a daxil edər.
Delete əmri ilə birlikdə Where ifadəsini istifadə edərək yalnız müəyyən meyarlara cavab verən sətirləri silə bilərsiniz.
Yazılım kodu:
DELETE FROM TABLE_ADI [Verilenler_bazası_adi.Schema_Adı].Tablo_Adı
Bəs hansı daha üstün əmr vasitəsidir?
Məhz əsas fərq olaraq yazının əvvəlində bildirdiyim kimi bu işin Ustası olanlar performansın nə qədər yaxşı işlədiyini nəzərə alırlar.Delete əmri ilə yazılan kodlar bir müddətdən sonra artıq yavaş işləməyə başlayacaq.Çünki hər dəfə table`dan məlumat silərkən transaction logda toplanmağa başlayır və bu sorğunun performansını azaltmasına gətirib çıxarır.
Ümid eləyirəm ki, məqalə sizə kömək oldu.
Əlavə sual və ya rəyiniz olduqda rəy bölməsində yaza bilərsiz.
Xoş mütailələr və sağlam qalın