Bo'sh bo'lmagan qiymat cheklovi
Kirish: Ushbu darsda siz ma'lumotlar bazasida NULL tushunchasi nima ekanligini, uning uch qiymatli mantiqini (three-valued logic) hamda PostgreSQLda ustunga bo'sh qiymat kiritilishining oldini olish uchun NOT NULL cheklovidan foydalanishni o'rganasiz.
Ma'lumotlar bazasida NULL qiymatning mavjud emasligini, ya'ni ma'lumot noma'lum yoki kiritilmagan ekanligini bildiradi.
Masalan, siz ombor haqidagi ma'lumotlarni bazaga kiritayotganda uning aniq manzilini hali bilmasangiz, address ustuniga NULL yozib turishingiz mumkin. Keyinchalik manzil aniq bo'lganda, UPDATE orqali uni yangilash mumkin bo'ladi.
[!IMPORTANT]
NULL— bu bo'sh satr ('') yoki nol (0) emas!
''(bo'sh satr) — bu uzunligi 0 ga teng bo'lgan aniq matn qiymatidir.0(nol) — bu aniq sonli qiymatdir.NULL— esa qiymatning umuman yo'qligi (noma'lumligi) demakdir.
PostgreSQLda NULL bilan bog'liq solishtirishlar maxsus uch qiymatli mantiqqa asoslanadi: har qanday qiymatni NULL bilan taqqoslaganda natija yana NULL (noma'lum) bo'ladi.
Masalan, son bilan taqqoslash:
SELECT NULL = 1 AS result;
Natija:
result
--------
NULL
Hatto NULL ni boshqa NULL bilan taqqoslash ham NULL qaytaradi:
SELECT NULL = NULL AS result;
Bu mutlaqo mantiqiydir: noma'lum bir narsani boshqa noma'lum narsa bilan solishtirganda, ularning teng yoki teng emasligi ham noma'lum bo'lib qoladi.
Odatiy holatda, jadval ustunlari yaratilganda ularga NULL qiymatlarni kiritishga ruxsat beriladi.
Masalan, quyidagi warehouses jadvalini ko'raylik:
CREATE TABLE warehouses (
warehouse_id INT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
name VARCHAR(255),
address VARCHAR(255)
);
Bu yerda name va address ustunlari VARCHAR turida bo'lsa-da, ular bemalol NULL qabul qiladi:
INSERT INTO warehouses (name, address)
VALUES ('San Jose', NULL)
RETURNING name, address;
Agar INSERT buyrug'ida biror ustunni yozmasdan tashlab ketsangiz, PostgreSQL unga avtomatik ravishda NULL qiymatini o'rnatadi:
INSERT INTO warehouses (name)
VALUES ('San Francisco')
RETURNING name, address;
Natija:
| name | address |
|---|---|
| San Francisco | NULL |
Jadval ustunida har doim haqiqiy ma'lumot bo'lishini va hech qachon NULL kiritilmasligini talab qilish uchun NOT NULL cheklovi ishlatiladi:
ustun_nomi data_type NOT NULL
Agar ustunga NOT NULL qo'yilgan bo'lsa, unga NULL kiritishga urinish xatolik bilan rad etiladi.
[!NOTE] Barcha asosiy kalit (
PRIMARY KEY) ustunlari sukut bo'yicha o'z-o'zidanNOT NULLxususiyatiga ega bo'ladi.
NOT NULL juda muhim?NULL qiymatlar dasturlarda kutilmagan xatoliklarni (NullPointerException yoki nil dereference) keltirib chiqarishi mumkin.NULL ni tekshirish uchun ortiqcha kod yozishiga hojat qolmaydi.NOT NULL cheklovi bilan ishlashAvval eski jadvalni o'chiramiz va name hamda address ustunlariga NOT NULL cheklovini o'rnatamiz:
DROP TABLE IF EXISTS warehouses;
CREATE TABLE warehouses (
warehouse_id INT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
name VARCHAR(255) NOT NULL,
address VARCHAR(255) NOT NULL
);
Endi address ustuniga NULL kiritishga urinib ko'ramiz:
INSERT INTO warehouses (name, address)
VALUES ('San Mateo', NULL);
PostgreSQL qaytargan xatolik:
ERROR: null value in column "address" of relation "warehouses" violates not-null constraint
PostgreSQL qoidabuzarlikni aniqladi va ma'lumot qo'shilishini to'xtatdi!
Endi to'g'ri, to'liq manzil bilan qator kiritamiz:
INSERT INTO warehouses (name, address)
VALUES (
'San Mateo',
'1st Ave Suite K03, San Mateo, CA 94403'
)
RETURNING *;
Natija:
| warehouse_id | name | address |
|---|---|---|
| 1 | San Mateo | 1st Ave Suite K03, San Mateo, CA 94403 |
Ma'lumot muvaffaqiyatli saqlandi!
NULL ma'lumotning yo'qligini yoki noma'lumligini bildiradi (u 0 yoki '' ga teng emas).NULL bilan bog'liq har qanday taqqoslash yana NULL qaytaradi.NULL qiymatlarni qabul qiladi.NOT NULL cheklovi qo'llaniladi.