Bu gün biliklərimizə daha bir sehrli detal əlavə edirik: RETURNING komandası. Bu güclü alətdir, çünki insert, update və ya delete etdikdən sonra lazım olan məlumatları dərhal geri almağa imkan verir. Təsəvvür elə, cədvələ bir sətir əlavə edirsən və dərhal onun unikal identifikatorunu əldə edirsən. Rahatdır, düzdür? Əlbəttə! Gəlin öyrənək!
INSERT, UPDATE və ya DELETE əməliyyatlarını etdikdən sonra bəzən dəyişən məlumatları dərhal almağa ehtiyac olur. Məsələn, cədvələ yeni sətir əlavə etdikdən sonra onun avtomatik yaradılan primary key-i (unikal identifikatoru) bilmək istəyirik. Bu məlumatı almaq üçün ayrıca sorğu göndərmək əvəzinə, əməliyyatı icra edərkən RETURNING ilə birbaşa əldə edə bilərik.
Tutaq ki, students cədvəlinə yeni tələbə əlavə edirsən. Hər tələbənin avtomatik generasiya olunan unikal identifikatoru var (məsələn, student_id). Yeni qeyd əlavə etdikdən sonra bu identifikatoru dərhal kurs qeydiyyatı üçün istifadə etmək istəyirsən. RETURNING olmasa, əvvəlcə tələbəni əlavə etməli, sonra isə ayrıca SELECT sorğusu ilə identifikatorunu tapmalı olardın. RETURNING ilə isə hər şey bir sorğu ilə həll olunur!
RETURNING komandasının sintaksisi
RETURNING komandası INSERT, UPDATE və DELETE əməliyyatlarının sonuna əlavə olunur. Ümumi sintaksis belədir:
-- INSERT sintaksisi:
INSERT INTO cedvel (column1, column2, ...)
VALUES (value1, value2, ...)
RETURNING kolonka;
-- UPDATE sintaksisi:
UPDATE cedvel
SET column1 = value1
WHERE sert
RETURNING kolonka;
-- DELETE sintaksisi:
DELETE FROM cedvel
WHERE sert
RETURNING kolonka;
RETURNING dəyişən sətirlərdən hansı sütunları geri almaq istədiyini göstərməyə imkan verir. Bu, tək bir sütun (məsələn, primary key) və ya bir neçə sütun ola bilər.
INSERT ilə RETURNING istifadəsi
students cədvəli nümunəsinə baxaq:
CREATE TABLE students (
student_id SERIAL PRIMARY KEY,
first_name TEXT NOT NULL,
last_name TEXT NOT NULL,
email TEXT UNIQUE
);
Yeni tələbə əlavə edək və dərhal onun identifikatorunu alaq:
INSERT INTO students (first_name, last_name, email)
VALUES ('Otto', 'Lin', 'otto.lin@example.com')
RETURNING student_id;
Sorğu əlavə olunan tələbənin identifikatorunu qaytaracaq:
| student_id |
|---|
| 1 |
İndi Otto Lin adlı tələbəni əlavə etdin və PostgreSQL dərhal sənə onun student_id-sini göstərdi. Rahatdır, düzdür?
İndi isə bir neçə sütunu eyni anda necə əldə etmək olar, ona baxaq. Əgər təkcə student_id yox, həm də tələbənin adı və soyadı lazımdırsa, onları da RETURNING ilə soruşa bilərsən:
INSERT INTO students (first_name, last_name, email)
VALUES ('Alex', 'Ming', 'alex.ming@example.com')
RETURNING student_id, first_name, last_name;
Nəticə:
| student_id | first_name | last_name |
|---|---|---|
| 2 | Alex | Ming |
UPDATE ilə RETURNING istifadəsi
Bəzən məlumatları yenilədikdən sonra hansı sətirlərin dəyişdiyini bilmək istəyirik. RETURNING bu işin öhdəsindən əla gəlir.
Təsəvvür elə ki, Otto Lin email ünvanını dəyişmək qərarına gəlib. Onun məlumatlarını yeniləyək və dəyişən sətir barədə məlumatı dərhal alaq:
UPDATE students
SET email = 'lin.new@example.com'
WHERE student_id = 1
RETURNING student_id, email;
Nəticə:
| student_id | |
|---|---|
| 1 | lin.new@example.com |
İndi dəqiq bilirsən ki, student_id = 1 olan tələbənin email-i uğurla yeniləndi.
DELETE ilə RETURNING istifadəsi
Cədvəldən qeyd sildikdə, hansı sətirlərin silindiyini bilmək bəzən faydalı olur. RETURNING ilə silinən sətirlərin məlumatlarını əldə edə bilərsən.
Məsələn, tutaq ki, Peter Ming adlı tələbə universitetdən çıxarılıb. Onu cədvəldən silək və silinən tələbə barədə məlumatı alaq:
DELETE FROM students
WHERE student_id = 2
RETURNING student_id, first_name, last_name;
Nəticə:
| student_id | first_name | last_name |
|---|---|---|
| 2 | Peter | Ming |
İndi əminsən ki, məhz Peter Ming silindi.
Praktik məsləhətlər
RETURNING-dən istifadə et, əgər dəyişən sətirlərin məlumatı sənə lazımdırsa. Bu, database-ə əlavə sorğular göndərməyə ehtiyac qoymur.
Geri qaytarılan məlumatların miqdarını minimum saxla. Əgər yalnız primary key lazımdırsa, yalnız onu soruş.
Transaksiyalarla birlikdə RETURNING xüsusilə güclü olur. Məsələn, bir neçə əlaqəli cədvələ məlumat əlavə edəndə identifikatorları RETURNING ilə ötürə bilərsən.
RETURNING istifadə edərkən tipik səhvlər
Tez-tez yeni başlayanlar unudurlar ki, RETURNING yalnız dəyişən sətirlər üçün işləyir. Məsələn, əgər UPDATE və ya DELETE sorğusu heç bir sətir tapmasa, RETURNING boş nəticə qaytaracaq. Narahat olma, bu normaldır. Sadəcə sorğunun düzgün olduğuna əmin ol və ya bu halı tətbiqində düzgün emal et.
Bir də tez-tez rast gəlinən səhv: mövcud olmayan sütunlar üçün RETURNING istifadə etmək cəhdi. Mütləq yoxla ki, soruşduğun bütün sütunlar cədvəldə mövcuddur.
İndi artıq bilirsən ki, RETURNING ilə məlumatlarla işləmək xeyli asanlaşır. Bu, real tətbiqlər yazanda mütləq qiymətləndirəcəyin alətlərdən biridir. Uğurlar və yeni üfüqlərə doğru!
GO TO FULL VERSION