Ma`lumotlar : 1091
Xabarlar soni: 197
Bugun: 3.3.2021
Soat: 0:32
Sql da jadvallar uchun cheklanishlar
Muallif: Mengliyev Sh.
Qo`shilgan sana: 2015-08-19
Sql da jadvallar uchun cheklanishlar
CHeklanishlarni kiritish.
Jadval yaratayotganingizda (yoki uni o‘zgartirayotganingizda), siz maydonlarga kiritilayotgan qiymatlarga cheklanishlar o‘rnatishingiz mumkin. Bu xolda SQL cheklanishlarga to‘g‘ri kelmaydigan xamma qiymatlarni rad etadi. CHeklanishlar ikki asosiy turi mavjud: - ustun va jadval cheklanishlari. Ularning farqi shundaki ustun cheklanishi stolbsa faqat ayrim ustunlarga qo‘llanadi, jadval cheklanishi bo‘lsa bir yoki bir necha ustunlar guruxiga qo‘llanadi. Ustun cheklanishi ustun nomi oxiriga ma’lumotlar tipidan so‘ng va vergulьdan oldin qo‘yiladi. Jadval cheklanishi jadval nomi oxiriga so‘nggi dumaloq vergulьdan oldin qo‘yiladi. CHeklanishlar xisobga olingan CREATE TABLE komandasi sintaksisi:
CREATE TABLE < table name >
( <column name> <data type> <column constraint>,
<column name> <data type> <column constraint> ...
<table constraint> ( <column name>
[, <column name> ])... );
Maydonga bo‘sh (NULL) qiymatlar kiritilishi oldini olish uchun CREATE TABLE komandasida NOT NULL cheklanishi ishlatiladi. Bu cheklanish faqat xar xil ustunlar uchun o‘rnatiladi.
Masalan, shu narsa aniqki, birlamchi kalitlar xech qachon bo‘sh bo‘lmasliklari kerak, shuning uchun Salepeople jadvalini quyidagicha yaratish mumkin:
CREATE TABLE Salepeople
( Snum integer NOT NULL,
Sname char (10),
city char (10),
comm decimal);
Ko‘p xollarda ustunga kiritilgan qiymatlar bir biridan farq qilishi kerak. Agar ustun uchun UNIQUE cheklanishi o‘rnatilsa, bu ustungsha mavjud qiymatni kiritishga urinish rad etilapdi. Bu cheklanish bo‘sh bo‘lmaydigan (NOT NULL) debe’lon qilingan maydonlarga qo‘llanishi mumkin.
Masalan:
CREATE TABLE Salepeople
( SNum integer NOT NULL UNIQUE,
SName char (10),
City char (10),
Comm decimal);
Unikalligi talab qilinadigan maydonlar(birlamchi kalitlardan tashqari) kandidat kalitlar yoki unikal kalitlar deyiladi.
Jadval cheklanishi UNIQUE maydonlar guruxiga o‘rnatilishi mumkin. Bu bir necha maydonlar qiymatlari kombinatsiyasi unikalligini ta’minlaydi. Bixning ma’lumotlart bazamizda xar bir buyurtmachi bita sotuvchiga biriktirilgan. YA’ni Buyurtmachilar jadvalida buyurtmachi nomeri (cnum) va sotuvchi nomeri (snum) kombinatsiyasi unikal bo‘lishi kerak. Bu cheklanishni UNIQUE (cnum, snum) yordamida, Customers jadvalini yaratishda kiritish mumkin. Bu ustunlar uchun NOT NULL cheklanishini kiritish zarurdir.
Birlamchi kalitlar cheklanishlari.
SQL birlamchi kalitlarni to‘g‘ridan to‘g‘ri birlamchi kalit (PRIMARY KEY) cheklanishi orqali ta’riflaydi. PRIMARY KEY jadvalni yoki ustunlarni cheklashi mumkin. Bu cheklanish UNIQUE cheklanishi kabi ishlaydi, faqat jadval uchun faqat bitta birlamchi kalit (ixtiyoriy sondagi ustunlar uchun ) aniqlanishi mumkin bo‘lgan xoldan tashqari. Birlamchi kalitlar NULL qiymatga ega bo‘lishi mumkin emas.
Misol:
CREATE TABLE Salepeople
( SNum integer NOT NULL PRIMARY KEY,
SName char (10),
City char (10),
Comm decimal);
PRIMARY KEY cheklanishi qiymatlar unikal kombinatsiyasini tashkil qiluvchi bir necha maydonlar uchun qo‘llanishi mumkin. Masalan PRIMARY KEY cheklanishini juftliklar uchun qo‘llash mumkin:
CREATE TABLE Namefield
( firstname char (10) NOT NULL,
lastname char (10) NOT NULL
city char (10),
PRIMARY KEY ( firstname, lastname ));
Maydon qiymatlarini tekshirish (CHECK cheklanishi).
CHECK cheklanishi jadvalga kiritilayotgan ma’lumot qabul qilinishidan oldin mos kelishi lozim bo‘lgan shart kiritishga imkon beradi. CHECK cheklanishi CHECK kalit so‘zi ko‘rsatilgan maydondan foydalanuvchi predikat ifodapdan iboratdir.
Misol: Salepeople jadvali Comm ustuniga kiritilayotgan qiymat 1 dan kichik bo‘lish sharti.
CREATE TABLE Salepeople
( SNum integer NOT NULL PRIMARY KEY,
SName char(10) NOT NULL UNIQUE,
City char(10),
Comm decimal CHECK ( Comm < 1 ));
CHECK cheklanishidan maydonga ma’lum qiymatlarini kiritishdan ximoya qilib, xatolar oldini olish uchun foydalanish mumkin. Masalan maxsulotni sotish shaxobchalariga ega bo‘lgan shaxarlar faqat London, Barselona, San Xose va Nьyu York bo‘lsin.
CREATE TABLE Salepeople
( SNum integer NOT NULL PRIMARY KEY,
SName char(10) NOT NULL UNIQUE,
City char(10) CHECK (City IN ('London', 'New York', 'San Jose', 'Barselona')),
Comm decimal CHECK ( Comm < 1 ));
CHECK jadval cheklanishi sifatida kelishi mumkin. Bu shartga bir necha maydon kiritishga imkon beradi.
Masalan:
CREATE TABLE Salepeople
( SNum integer NOT NULL PRIMARY KEY,
SName char(10) NOT NULL UNIQUE,
City char(10),
Comm decimal,
CHECK (Somm < .15 OR City = 'Barcelona'));
Ko‘zda tutilgan qiymatlarni o‘rnatish.
Biror bir maydon uchun qiymat ko‘rsatmagan xolda jadvalga satr qo‘shsangiz, SQL bunday maydonga kiritish uchun ko‘zda tutilgan qiymatga ega bo‘lishi kerak, aks xolda komanda rad etiladi. Eng umumiy ko‘zda tutilgan qiymat NULL qiymatdir. CREATE TABLE komandasida ko‘zda tutilgan qiymatDEFAULT operatori orqali, ustun cheklanishi sifatida ko‘rsatiladi. Masalan:
CREATE TABLE Salepeople
( SNum integer NOT NULL PRIMARY KEY,
SName char(10) NOT NULL UNIQUE,
City char(10) DEFAULT 'New York',
Comm decimal CHECK ( Comm < 1 ));
Ma’lumotlar yaxlitligini ta’minlash
Jadval bir maydonidagi xamma qiymatlar boshqa jadval maydonida aks etsa, birinchi maydon ikkinchisiga ilova qiladi deyiladi. Bu ikki maydon orasidagi bog‘liqlikni ko‘rsatadi. Masalan, buyurtmachilar jadvalida xar bir buyurtmachi, sotuvchilar jadvalida o‘ziga biriktirilgan sotuvchiga ilova qiluvchi SNum maydoniga ega. Bir maydon ikkinchisiga ilova qilsa tashqi kalit, u ilova qilayotgan maydon ajdod kalit deyiladi. Buyurtmachilar jadvalidagi SNum Maydoni tashqi kalit, sotuvchilar jadvalidagi SNum - ajdod kalitdir.
Tashqi kalit bita maydondan iborat bo‘lishi shart emas. Birlamchi kalit kabi, tashqi kalit bita modulь sifatida qayta ishlanuvchi bir necha maydonlarga ega bo‘lishi musmkin. Maydon tapshqi kalit bo‘lsa ilova qitlayotgan jadval Bilan ma’lumi usulda bog‘liqdir. Tashqi kalit xar bir qiymati (satri), ajdod kalitning bita va faqat bitta qiymatiga( satriga) ilova qilishi kerak. Bu xolda tizim ilovali yaxlit xolatda deyiladi
SHu bilan birga ajdod kalit qiymati tashqi kalit bir necha qiymatlariga ilova qilishi mumkin.
CHeklanish FOREIGN KEY.
SQL ilovali yaxlitlikni FOREIGN KEY yordamida ta’minlaydi. Tashыi kalit vazifasi ajdod kalitda ko‘rsatilmagan qiymatlarni tashqi kalitmaydonlariga kiritmaslikdir. FOREIGN KEY cheklanishi sintaksisi:
FOREIGN KEY <column list> REFERENCES
<pktable> [<column list>]
Birinchi ro‘yxat komanda tomonidan o‘zgartiriluvchi ustunlar ro‘yxatidir. Pktable - bu ajdod kalitli jadval. Ikkinchi ustunlar ro‘yxati bu ajdod kalitni tashkil qiluvchi ustunlardir.
Misol uchun Sotuvchilar jadvaliga ilova qiluvchi tashqi kalit sifatida e’lon qilingan SNum maydoniga ega bo‘lgan Buyurtmachilar jadvalini yaratamiz:
CREATE TABLE Customers
( CNum integer NOT NULL PRIMARY KEY,
CName char(10),
City char(10),
SNum integer,
FOREIGN KEY (SNum) REFERENCES Salepeople (SNum) ); *
Tashqi kalitni ustunlar cheklanishi sifatida berish mumkin. Buning uchun FOREIGN KEY - ko‘rinishi – ko‘rsatkichli cheklanish (REFERENCES) qo‘llanadi:
CREATE TABLE Customers
( CNum integer NOT NULL PRIMARY KEY,
CName char(10),
City char(10),
SNum integer REFERENCES Salepeople (snum) );
FOREIGN KEY cheklanishidan jadval o‘ki ustun cheklanishi sifatida foydalanganda ajdod kalit ustunlarini ko‘rsatmaslik musmkin, agar ular PRIMARY KEY cheklanishiga ega bo‘lsa.
Kalitlarga cheklanish.
Ilovali yaxlitlikni ta’minlash tashqi kalit yoki ajdod kalit maydonlari qiymatlariga cheklanishlar o‘rnatishni talab qiladi. Ajdod kalit tarkiblangan bo‘lib, tashqi kalit xar bir qiymati bita satrga mos kelishi ta’minlangan bo‘lishi kerak. Bu kalit unikal bo‘lib, bo‘sh (NULL) qiymatlarga ega bo‘lmasligi kerak. SHuning uchun ajdod kalit maydonlari PRIMARY KEY cheklanishiga ega bo‘lishi yoki NOT NULL cheklanishi bilan birga UNIQUE deb e’lon qilinishi kerak.
Tashqi kalit ajdod kalitda majud qiymatlarga yoki bo‘sh (NULL) qiymatga ega bo‘lishi mumkin. Boshqa qiymat kiritishga urinish rad etiladi. Tashqi kalitga NOT NULL deb e’lon qilish mumkin, lekin bu maqsadga muvofiq emas. Masalan, siz qaysi sotuvchi mos kelishini bilmasdan oldin buyurtmachini kiritmoqchisiz. Bu xolda NULL qiymatdan foydalanib, keyinchalik uni konkret qiymatga almashtirish mumkin.
CHeklanishlar ta’siri.
Tashqi kalit maydonlariga INSERT yoki UPDATE yordamida kiritilayotgan qiymatlar ajdod kalitlariga oldin kiritilgan bo‘lishi kerak. Tashqi kalit ixtyoriy satrini DELETE yordamida o‘chirish mumkin. ANSI ta’rifi bo‘yicha: tashqi kalit yordamida ilova qilinayotgan ajdod kalit qiymatini o‘chirib yoki o‘zgartirib bo‘lmaydi. Bush uni bildiradiki buyurtmalar jadvalida buyurtmalarga ega buyurtmachini buyurtmachilar jadvalidan o‘chirib bo‘lmaydi. ANSI tarkibiga kirmagan ajdod kalit maydonlarini o‘zgartirish yoki o‘chirish qoidalari mavjud:
1. CHeklangan (RESTRICT) o‘zgartishlar. Siz (ANSI usulida) ajdod kalitlarda cheklangan deb ko‘rsatishingiz yoki man qilishingiz mumkin.
2. Kaskadlanuvchi (CASCADE) o‘zgartishlar. Agarda ajdodkalitda o‘gartish kiritsangiz, tashqi kalitda xudi shunday o‘zgartishlar avtomatik yuz beradi.
3. Bo‘sh (NULL) o‘zgartishlar. Siz ajdod kalitda uzgartirish kiritganingizda tashqi kalit maydonlari avtomatik NULL qiymat oladi (tashqi kalitda NULL qiymat ruxsat etilgan bo‘lsa).
Yuqorida ko‘rsatilgan effektlar UPDATE va DELETE komandalari bajarilganda ajdod kalit o‘zgarishini ko‘rsatadi va quyidagicha aniqlanadi:
CREATE TABLE <table-name >
( <column name> <data type>[(<size>)],
<column name> <data type>[(<size>)],
...
FOREGIGN KEY (<column name>,..) REFERENCES <table name>[(<column name>, ...)]
ON UPDATE [CASCADE|RESTRICT|SET NULL]
ON DELETE [CASCADE|RESTRICT|SET NULL],
... );
Misol. Siz sotuvchi nomerini o‘zgartirmoqchisiz, lekin uning xamma buyurtmachilarini saqlab qolmoqchisiz. Lekin bu sotuvchi firmadan bo‘shab ketsa siz uning buyurtmachilarini boshqa sotuvchiga maxkamlashingiz kerak. Buni bajarish uchun kaskad effektli UPDATE va cheklanishli DELETE berishingiz kerak.
CREATE TABLE Customers
(CNum integer NOT NULL PRIMARY KEY,
CName char(10) NOT NULL,
City char(10),
Rating integer,
SNum integer REFERENCES Salepeople
ON UPDATE CASCADE
ON DELETE RESTRICT);
Agar endi sotuvchilar jadvalidan Peel ni o‘chirmoqchi bo‘lsangiz, to buyurtmachilar jadvalida Hoffman va Clemens ning SNum maydonini boshqa tayinlangan sotuvchiga o‘zgartirishingiz kerak. Boshqa tomondan Peel SNum maydonini 1009 ga o‘zgartirsangiz Hoffman va Clemens xam avtomatik o‘zgaradi.
Tranzaksiyalar (qachon qilingan o‘zgarishlar doimiy bo‘ladi?).
Komanda yoki komandalar guruxi bajarilgandan so‘ng o‘zgartishlar ma’lumotlar bazasida saqlanib qolishi yoki rad etilishini xal qilishingiz lozim. Bu maqsadda komandalar tranzaksiya deb ataluvchi guruxlarga biriktiriladi.
xar doim SQL seans boshlaganingizda Tranzaksiya xam boshlanadi. Xamma komandalar tranzaksiya qismi xisoblanadi, toki ularni COMMIT yoki ROLLBACK komandasi kiritib tugatmaguningizcha. COMMIT o‘zgarishlarni doimiy qiladi ROLLBACK bo‘lsa rad qiladi. YAngi tranzaksiya COMMIT yoki ROLLBACK komandasidan so‘ng boshlanadi.
Ko‘pgina realizatsiyalarda siz AUTOCOMMIT parmetrini o‘rnatishingiz mumkin. Bu xamma qadamlarni avtomatik eslabqoladi. Xatoga olib keluvchi qadamlar teskarisiga bajariladi. Buni quyidagicha bajarish mumkin: SET AUTOCOMMIT ON; Oldingi xolatga quyidagicha qaytish mumkin SET AUTOCOMMIT OFF;
Ba’zi komandalar ya’ni ALTER, CREATE, DROP, GRANT, REVOKE, kabi COMMIT ni avtomatik bajaradi.
3227 marta o`qildi.
![]() |
![]() |