Təsəvvür elə, universitet üçün database dizayn edirsən. Əvvəlcə tələbələrin cədvəlində cəmi iki sahə var: ID və ad. Hər şey sadədir, tələbələr sistemi istifadə etməyə başlayır. Amma bir ay sonra müəllimlər gəlir və deyir: "Yaş əlavə edə bilərsən?", bir az sonra isə: "Email də lazımdır". Sonra isə: "Gəlin, nəhayət, middle_name sahəsini silək, onsuz da heç kim doldurmur!". Bax, məhz burada sənə ALTER TABLE ilə sütun əlavə etmək və silmək bacarığı lazım olacaq.
Sütun əlavə etməyin sintaksisi
Deməli, mövcud PostgreSQL cədvəlinə yeni sütun əlavə etmək üçün ALTER TABLE komandası istifadə olunur. Sintaksisə bax:
ALTER TABLE table_name
ADD COLUMN column_name data_type [constraints];
table_name— yeni sütun əlavə etmək istədiyin cədvəlin adı.column_name— əlavə etmək istədiyin sütunun adı.data_type— data tipi, məsələn,VARCHAR,INTEGERvə yaDATE.constraints(istəyə bağlı parametr) — bu sütuna qoymaq istədiyin məhdudiyyətlər, məsələn,NOT NULL,DEFAULTvə s.
Nümunə: yeni sütun əlavə edirik
Tutaq ki, bizdə əvvəldən yaradılmış students cədvəli var:
CREATE TABLE students (
id SERIAL PRIMARY KEY,
name VARCHAR(100) NOT NULL
);
Birdən tapşırıq gəlir ki, tələbələrin yaşını saxlamaq üçün age sütunu əlavə etmək lazımdır. Bunu belə edirik:
ALTER TABLE students
ADD COLUMN age INTEGER;
İndi students cədvəlinin strukturu belə olacaq:
| id | name | age |
|---|---|---|
| 1 | Eva | NULL |
| 2 | Alex | NULL |
Əgər yeni yazılar əlavə edəndə yaş göstərilməsə, PostgreSQL avtomatik olaraq NULL dəyəri verəcək, çünki heç bir məhdudiyyət (məsələn, NOT NULL) və ya default dəyər (DEFAULT) göstərməmişik.
Sütun silməyin sintaksisi
Cədvəldən sütun silmək də ALTER TABLE komandası ilə olur. Sintaksis belədir:
ALTER TABLE table_name
DROP COLUMN column_name [RESTRICT | CASCADE];
table_name— sütunu silmək istədiyin cədvəlin adı.column_name— silmək istədiyin sütunun adı.RESTRICT— sütuna istinad varsa, silməyə icazə vermir (default olaraq).CASCADE— sütunu və ona bağlı bütün obyektləri silir.
Cascade ilə bağlı detalları növbəti səviyyədə danışacam :P
Nümunə: lazımsız sütunu silirik
Yenidən students cədvəlinə qayıdaq. Qərara gəldik ki, age sahəsi artıq lazım deyil. Onu silirik:
ALTER TABLE students
DROP COLUMN age;
İndi cədvəlin strukturu yenə sadələşir:
| id | name |
|---|---|
| 1 | Eva |
| 2 | Alex |
Faydalı nümunələr
Constraint-lə sütun əlavə etmək
Əgər age sütununu əlavə etmək istəsəydin, amma NOT NULL constraint-i və default dəyər ilə? Onda belə yazardın:
ALTER TABLE students
ADD COLUMN age INTEGER NOT NULL DEFAULT 18;
İndi mövcud bütün sətirlərdə age üçün dəyər 18 olacaq, yeni yazılar isə bu sahə üçün dəyər göstərməsə, default dəyər istifadə olunacaq, əks halda isə mütləq dəyər göstərmək lazımdır.
Asılılıqları olan sütunu silmək
Əgər hansısa sütunun asılılığı varsa (məsələn, view və ya trigger-lərdə istifadə olunursa), CASCADE modifier-i istifadə etməlisən. Amma diqqətli ol: bu, database-də başqa obyektlərə də təsir edə bilər. Məsələn:
ALTER TABLE students
DROP COLUMN email CASCADE;
Tipik səhvlər və xüsusiyyətlər
Səhv: səhv data tipi ilə sütun əlavə etmək.
Təsəvvür elə, INTEGER tipli sütun əlavə edirsən, amma ora mətn yazmaq istəyirsən. PostgreSQL səni başa düşməyəcək və yazı əlavə edəndə səhv verəcək. Data tipi həmişə saxlanacaq dəyərlə uyğun olmalıdır.
Səhv: asılılıqları nəzərə almadan sütun silmək.
Məsələn, əgər silmək istədiyin sütuna index və ya foreign key-lər istinad edirsə, CASCADE modifier-i göstərməsən, PostgreSQL səhv verəcək.
Səhv: asılılıqları olan sütunu silmək. Məsələn, əgər silmək istədiyin sütuna index və ya foreign key-lər istinad edirsə, CASCADE modifier-i göstərməsən, PostgreSQL səhv verəcək. Modifier əlavə etdin və minlərlə sətiri sildin, hansılar ki, silinmiş sütuna istinad edirdi. Onları silmək lazım deyildi : (
Xüsusiyyət: dəyişikliklərin icra ardıcıllığı.
Bəzən constraint-lə sütun əlavə etmək əməliyyatların icra ardıcıllığını bilməyi tələb edir. Məsələn, NOT NULL ilə sütun əlavə edirsənsə, əvvəlcə default dəyərlərlə doldurmalısan, yoxsa PostgreSQL səhv verəcək.
GO TO FULL VERSION