Bəzən bütün sahələri əllə doldurmaq istəmirik — ya tənbəllikdən, ya da sadəcə lazım olan məlumat yoxdur. Belə hallarda əvvəlcədən default dəyərlər təyin edə bilərik ki, lazım olanda baza özü onları doldursun.
Cədvələ sətir əlavə etmək
Default dəyərlər cədvələ sətir əlavə etməklə sıx bağlıdır. Ona görə indi qısa danışacam, bir neçə dərs sonra bu mövzuya yenidən qayıdıb daha ətraflı baxacağıq.
Cədvələ sətir əlavə etmək çox asandır - bunun üçün xüsusi INSERT INTO komandası var. INSERT INTO — SQL operatorudur, cədvələ yeni sətirlər əlavə edir. Bu ən çox istifadə olunan əmrlərdəndir, xüsusilə web-formlar, loglar, istifadəçi qeydiyyatı və data yeniləmələrində.
Komandanın sintaksisi
INSERT INTO cedvel (kolonka1, kolonka2, ...)
VALUES (deyer1, deyer2, ...);
İzah:
cedvel— data əlavə olunan cədvəlin adı.kolonka1,kolonka2, ... — sütunların siyahısı (əgər bütün sütunlara uyğun dəyərlər düzgün ardıcıllıqla verilibsə, bu hissəni yazmaya da bilərsən).deyer1,deyer2, ... — göstərilən sütunlara uyğun dəyərlər.
Sadə nümunə
INSERT INTO users (name, email)
VALUES ('Alice', 'alice@example.com');
users cədvəlinə bir sətir əlavə edir: ad — "Alice", email — "alice@example.com".
Nəticə:
| id | name | |
|---|---|---|
| 1 | Alice | alice@example.com |
Bir neçə sətiri birdən əlavə etmək
Bir neçə qeyd bir sorğu ilə əlavə etmək də olar — həm sürətli, həm də resurslara qənaət edir.
INSERT INTO users (name, email)
VALUES
('Alice', 'alice@example.com'),
('Bob', 'bob@example.net'),
('Charlie', 'charlie@example.org'),
('Diana', 'diana@example.com'),
('Eve', 'eve@example.net');
Və nəticə belə olacaq:
| id | name | |
|---|---|---|
| 1 | Alice | alice@example.com |
| 2 | Bob | bob@example.net |
| 3 | Charlie | charlie@example.org |
| 4 | Diana | diana@example.com |
| 5 | Eve | eve@example.net |
Default dəyər
Sətir əlavə etmə sintaksisini yadındadır?
INSERT INTO cedvel (kolonka1, kolonka2, ...)
VALUES (deyer1, deyer2, ...);
Fikirləş, niyə orda kolonka siyahısı var: kolonka1, kolonka2 ? Axı, sadəcə dəyərləri cədvəldəki sütunların sırasına uyğun yaza bilərik də.
Məsələ ondadır ki, bir çox dəyərləri yazmaya bilərsən data əlavə edəndə. Məsələn, yeni sətirin ID-sini PostgreSQL özü hesablayacaq. Eləcə də, əlavə olunan sətirin cari tarix/vaxtını özü yazacaq. Əgər hansısa data ötürülməyibsə, PostgreSQL onu NULL ilə əvəzləyəcək.
PostgreSQL sənin əvəzinə bir çox faydalı işi görə bilər. Və sən bu prosesi idarə edə bilərsən — bunun üçün default dəyərlər var, DEFAULT açar sözü ilə təyin olunur.
Default dəyər o zaman işləyir ki, qeyd əlavə edəndə konkret sütun üçün heç bir dəyər göstərilməyib. Bu, həm vaxtına qənaət edir, həm də vacib dəyəri unutmaq kimi təsadüfi səhvlərin qarşısını alır.
DEFAULT necə işləyir?
Gəlin sintaksisə baxaq. Default dəyərlər cədvəl yaradanda təyin olunur. Ümumi istifadə forması belədir:
CREATE TABLE cedvel (
kolonka data_type DEFAULT default_deyer
);
Və ya, mövcud cədvələ default dəyər əlavə etmək istəsən:
ALTER TABLE cedvel
ALTER COLUMN kolonka
SET DEFAULT default_deyer;
Cədvəllərin dəyişdirilməsi barədə bir neçə dərs sonra daha ətraflı danışacam :P
Nümunə 1: DEFAULT sahəsi olan cədvəl
Gəlin students cədvəli yaradaq, burada hər tələbəyə qeydiyyat tarixi avtomatik veriləcək:
CREATE TABLE students (
id SERIAL PRIMARY KEY,
name VARCHAR(100) NOT NULL,
registration_date DATE DEFAULT CURRENT_DATE
);
İndi, yeni tələbə əlavə edəndə registration_date göstərməsən, PostgreSQL bu sahəni avtomatik cari tarixlə dolduracaq.
INSERT INTO students (name) VALUES ('Alex Lin');
Sorğu edəndə:
SELECT * FROM students;
Belə nəticə alacaqsan:
| id | name | registration_date |
|---|---|---|
| 1 | Alex Lin | 2023-10-15 |
Praktik nümunələr
Rəqəm sütunu üçün default dəyər
Tutaq ki, grades cədvəlimiz var, burada grade sütununda default dəyər 0 olmalıdır, əgər qiymət hələ qoyulmayıbsa.
CREATE TABLE grades (
id SERIAL PRIMARY KEY,
student_id INTEGER NOT NULL,
course_id INTEGER NOT NULL,
grade INTEGER DEFAULT 0
);
grade göstərmədən qeyd əlavə edirik:
INSERT INTO grades (student_id, course_id) VALUES (1, 101);
Cədvəl indi belə görünəcək:
| id | student_id | course_id | grade |
|---|---|---|---|
| 1 | 1 | 101 | 0 |
TEXT ilə default dəyərdən istifadə
Təsəvvür et teachers cədvəlin var, burada hər müəllim əlavə olunanda avtomatik statusu “təsdiqlənməyib” olur.
CREATE TABLE teachers (
id SERIAL PRIMARY KEY,
name VARCHAR(100) NOT NULL,
status TEXT DEFAULT 'unverified'
);
Status göstərmədən müəllim əlavə edirik:
INSERT INTO teachers (name) VALUES ('Peter Pall');
Nəticə belə olacaq:
| id | name | status |
|---|---|---|
| 1 | Peter Pall | unverified |
Zaman üçün default dəyərlər
meetings cədvəlində görüşlər saxlanılır, burada meeting_time sahəsi üçün default başlanğıc vaxtı: 10:00 səhər.
CREATE TABLE meetings (
id SERIAL PRIMARY KEY,
topic VARCHAR(100),
meeting_time TIME DEFAULT '10:00'
);
Qeyd əlavə edirik:
INSERT INTO meetings (topic) VALUES ('Layihənin müzakirəsi');
Nəticə:
| id | topic | meeting_time |
|---|---|---|
| 1 | Layihənin müzakirəsi | 10:00 |
DEFAULT istifadə edəndə tipik səhvlər
Data tipinə uyğun olmayan default dəyər. Əgər rəqəm sütunu üçün mətn dəyəri verməyə çalışsan, PostgreSQL error verəcək:
CREATE TABLE example (
number INTEGER DEFAULT 'text'
);
Səhv:
integer tipi üçün input sintaksisi səhvdir.
DEFAULT dəyişəndə mövcud qeydləri nəzərə almamaq. Default dəyəri dəyişəndə, bu artıq əlavə olunmuş qeydlərə təsir etmir — onlar köhnə kimi qalır. Mövcud sətirləri yeniləmək istəsən, UPDATE istifadə et.
UPDATE students SET registration_date = '2023-01-01' WHERE registration_date IS NULL;
DEFAULT və NOT NULL arasında qarışıqlıq. Default dəyər o demək deyil ki, sahə avtomatik məcburidir (NOT NULL). NOT NULL açıq yazılmasa, sütun NULL dəyər ala bilər.
GO TO FULL VERSION