linkedin facebook linkedin facebook nod32

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.

791 marta o`qildi.

Parol:
Eslab qolish.


Ro`yhatdan o`tish

testing

+998915878681

Siz o`z maxsulotingizni 3D reklama ko`rinishda bo`lishini xohlaysizmi? Unda xamkorlik qilamiz.

3D Reklama


Рейтинг@Mail.ru
Рейтинг@Mail.ru

Besucherzahler
счетчик посещений