ER diagrammasidan jadvalli modelga o'tish

Ma'lumotlar bazalari bilan ishlash jadvallarni va ulardagi ma'lumotlarni o'zgartirish bilan bevosita bog'liq. Lekin boshlashdan oldin jadvallar yaratilishi kerak. Ushbu jarayonni avtomatlashtirish uchun maxsus dastur mavjud - "JADVAL TUZISH".

Birinchi narsa!

MS SQL "CREATE TABLE" buyrug'i yordamida jadvallarni yaratish jarayonini tushunishdan oldin, funktsiyadan foydalanishdan oldin bilishingiz kerak bo'lgan narsalarga to'xtalib o'tish kerak.

Avvalo, siz jadval nomini o'ylab topishingiz kerak - u ma'lumotlar bazasidagi boshqalar bilan solishtirganda noyob bo'lishi va bir nechta qoidalarga amal qilishi kerak. Ism (a-z) harfi bilan boshlanishi kerak, undan keyin har qanday harflar, raqamlar yoki pastki chiziq qo'yilishi kerak va natijada olingan ibora ajratilgan so'z bo'lmasligi kerak. Jadval nomining uzunligi 18 belgidan oshmasligi kerak.

Nom haqida qaror qabul qilib, siz tuzilmani ishlab chiqishingiz kerak: ustunlar uchun nomlarni o'ylab ko'ring, ularda ishlatiladigan ma'lumotlar turi va qaysi maydonlarni to'ldirish kerakligi haqida o'ylang. Bu erda darhol xorijiy va asosiy kalitlarning maydonlarini, shuningdek ma'lumotlar qiymatlari bo'yicha mumkin bo'lgan cheklovlarni aniqlashga arziydi.

Jadvalning qolgan nuanslari juda oson tuzatilishi mumkin, shuning uchun jadvalni yaratish bosqichida ular to'liq o'ylab topilmasligi mumkin.

Sintaksis

Jadvalning tuzilishini ishlab chiqqandan so'ng, uni yaratishga o'tishingiz mumkin. Buni SQL-ning "CREATE TABLE" funksiyasi yordamida juda oddiy bajarish mumkin. Unda foydalanuvchi oldindan ixtiro qilingan jadval nomini va ustunlar ro'yxatini, ularning har biri uchun turi va nomini ko'rsatishi kerak. Funktsiya sintaksisi quyidagicha:

JADVAL YARASH jadval_nomi
((ustun_nomi ma'lumotlar turi …| jadval_cheklovi)
[,(ustun_nomi ma'lumotlar turi …| jadval_cheklovi)]…)

Funktsiyani qurishda ishlatiladigan argumentlar quyidagilarni anglatadi:

  • jadval_nomi - jadval nomi
  • ustun_nomi - ustun nomi
  • ma'lumotlar turi - bu sohada ishlatiladigan ma'lumotlar turi
  • DEFAULT ustunda ishlatiladigan standart ifodadir.

Yana ikkita funktsiya argumentidan foydalanish ham mumkin:

  • column_constraint - ustun parametrlari
  • table_constraint - jadval parametrlari

Ularda foydalanuvchi ish uchun zarur bo'lgan cheklovlarni yoki jadvalni to'ldirish shartlarini belgilashi mumkin.

Jadvallarni yaratish xususiyatlari

Funktsiya bilan so'rov yozishda ba'zan maydonlarni to'ldirish qoidalarini o'rnatish kerak bo'ladi. Buning uchun muayyan shartlar to'plamini belgilaydigan maxsus funksiya atributlarini qo'shishingiz kerak.

Yacheykada bo'sh qiymat bo'lishi mumkinligini aniqlash uchun ustun nomi va turini ko'rsatgandan so'ng, kalit so'zlardan birini kiritishingiz kerak: NULL (bo'sh qiymatlar bo'lishi mumkin) yoki NO NULL (maydon to'ldirilishi kerak).

Jadvalni yaratishda ko'p hollarda ikkita bir xil bo'lmasligi uchun har bir yozuvni birlashtirish kerak. Buning uchun ko'pincha qatorlarni raqamlash qo'llaniladi. Va foydalanuvchi bilishini talab qilmaslik uchun oxirgi masala jadvalda mavjud bo'lsa, "JADVAL TUZISH" funksiyasida asosiy kalit ustunini yozish orqali belgilash kifoya. kalit so'z Tegishli maydondan keyin "Birlamchi kalit". Ko'pincha, jadvallar bir-biri bilan birlashtirilgan asosiy kalit orqali amalga oshiriladi.

Birlamchi kalit bilan birlashtirishni ta'minlash uchun "FOREIGN KEY" tashqi kalit xususiyatidan foydalaniladi. Ustun uchun ushbu xususiyatni belgilash orqali siz ushbu maydon bir xil yoki boshqa jadvalning asosiy kalit ustunidagi qiymatlardan biriga mos keladigan qiymatni o'z ichiga olishiga ishonch hosil qilishingiz mumkin. Shunday qilib, ma'lumotlarning izchilligini ta'minlash mumkin.

Belgilangan to'plam yoki ta'rifga qarshi tekshirishni ta'minlash uchun CHECK atributidan foydalaning. U funktsiya argumentlari ro'yxatida oxirgi yoziladi va ba'zi shaxsiy parametrlarga ega mantiqiy ifoda. Uning yordami bilan siz mumkin bo'lgan qiymatlar ro'yxatini cheklashingiz mumkin, masalan, "Gender" jadvali maydonida faqat "M" va "F" harflari yordamida.

Taqdim etilganlarga qo'shimcha ravishda, funktsiya ko'proq o'ziga xos xususiyatlarga ega, ammo ular amalda kamroq qo'llaniladi.

Misollar

Funktsiyaning ishlash tamoyilini to'liq tushunish uchun CREATE TABLE (SQL) qanday ishlashini amalda ko'rib chiqishga arziydi. Quyidagi misol rasmda ko'rsatilgan jadvalni yaratadi:

JADVAL YARATISH Maxsus
(ID CHAR(10) NO NULL Asosiy kalit,
Maxsus_nom CHAR(20),
Maxsus_manzil CHAR(30),
Maxsus_shahar CHAR(20),
Maxsus_mamlakat CHAR(20),
ArcDate CHAR(20))

Ko'rib turganingizdek, parametr mumkin bo'lgan yo'qligi yacheykadagi qiymatlar (NULL) o'tkazib yuborilishi mumkin, chunki u sukut bo'yicha.

Bo'sh jadvallarni yaratgandan so'ng, keyingi mantiqiy qadam ularni ma'lumotlar bilan to'ldirish va bu ma'lumotlarni yangilashdir. Buning uchun Transact-SQL-da bir nechta bayonotlar mavjud: INSERT - YANGILANISH.

Biroq, ko'pincha dizaynning kech bosqichida jadval sxemasining o'zini o'zgartirish kerak bo'ladi. Misol uchun, agar ustunning asosiy kaliti yoki ma'lumotlar turi o'zgargan bo'lsa. To'g'ri parametrlarga ega CREATE TABLE yordamida eski jadvallarni o'chirmaslik va ularni qayta yaratmaslik uchun ALTER TABLE operatoridan foydalaniladi. Ushbu uchta konstruktsiyani qo'llash quyida muhokama qilinadi.

Jadvallarni to'ldirish

Jadvalni CREATE TABLE iborasi yordamida ma'lumotlar bilan to'ldirishingiz mumkin, ammo yanada samaraliroq yondashuv jadval yaratish va uni to'ldirishni ajratishdir, ayniqsa SQL-ni yangi boshlanuvchilar uchun, chunki:

  • vizual ravishda aniqroq;
  • Jadvallar bosqichma-bosqich to'ldirilgan bo'lsa, qulayroqdir.

Quyidagi jadval ko'rinishini olish uchun:

ID. Ijarachi

Tug'ilgan kun

Kvartira raqami

E-pochta manzili

Aleksin. V.V.

Gorbunov D.D.

[elektron pochta himoyalangan]

Simonova K.R.

Dormitotova K.S.

[elektron pochta himoyalangan]

Siz uni yordamida yaratishingiz kerak bo'ladi JADVAL YARATISH va INSERT iborasi yordamida uni to'ldiring. Keyingi ko'rsatmalar Biz allaqachon yaratgan uydoshlar jadvaliga bitta qator qo'shadi:

Oʻchirish oldingi versiya jadvallar DROP TABLE housemates; -- Jadval yarating. CREATE TABLE housemates(housemeateID int NOT NULL CONSTRAINT primary_id PRIMARY KEY, housemateName nvarchar(30) NO NULL, BithDate date NO NULL, apartment number int NOT NULL, Email nvarchar(30)); -- Jadvalga ma'lumotlarni kiriting USE GO INSERT INTO ( , , , ,) VALUES (100,"Aleksin V.V.","19721122",11," [elektron pochta himoyalangan]"), (101,"Gorbunov D.D.","19220525",25," [elektron pochta himoyalangan]"), (102," Simonova K.R. "," 19560211 ", 13," [elektron pochta himoyalangan]"), (103,"Dormitotova K.S.","19770815",9," [elektron pochta himoyalangan]")

Yuqoridagi misolda biz INSERT konstruktsiyasining ikkita blokini farqlashimiz kerak:

ICHIGA- ma'lumotlar qo'shiladigan jadvalga ishora

QIYMATLAR- chiziqli kiritishni ishga tushirish.

Blokning parametrlarida (qavslar ichida). ICHIGA Ustunlar paydo bo'ladigan tartibda ro'yxatga olinadi. Parametrsiz yozuv, agar jadvalni yaratishda va uni to'ldirishda ustunlar tartibi bir xil bo'lsa, qabul qilinadi. Quyidagi kod avvalgisiga o'xshaydi:

INSERT INTO VALUES (100,"Aleksin. V.V.","19721122",11," [elektron pochta himoyalangan]"), (101,"Gorbunov D.D.","19220525",25," [elektron pochta himoyalangan]"), (102," Simonova K.R. "," 19560211 ", 13," [elektron pochta himoyalangan]"), (103,"Dormitotova K.S.","19770815",9," [elektron pochta himoyalangan]")

Agar siz to'ldirish tartibini o'zgartirishingiz kerak bo'lsa, bu aniq ko'rsatilishi kerak:

(,,, ,) QIMMATLARGA QO‘SHISH ("Aleksin. V.V.",101,"19721122"," [elektron pochta himoyalangan]",11), ("Gorbunov D.D.",102,"19220525"," [elektron pochta himoyalangan]",25), ("Simonova K.R",103,"19560211"," [elektron pochta himoyalangan]",13) ("Dormitotova K.S.",104,"19770815"," [elektron pochta himoyalangan]",9)

VALUES blokida INTO blokining ustunlari tartibida satr-qatorni ishga tushirish amalga oshiriladi. Qator to'ldirish - bu qavs ichidagi hujayra qiymatlari ro'yxati. Qiymatlar vergul bilan ajratilgan va qatorlar bir-biridan ajratilgan.

Siz INSERT konstruktsiyasini faqat hali ma'lumotlarga ega bo'lmagan ustunlarga qo'llashingiz mumkin. Aks holda, so'rovni bajarishda xatolik yuzaga keladi.

Jadvalni yangilash

Jadvalga kiritilgan ma'lumotlarni o'zgartirish zarur bo'lsa, jadvallarni yangilash zarurati paydo bo'ladi. Ko'rsatmalar yordamida amalga oshiriladi YANGILANISH. Agar INSERT faqat bo'sh jadvallar bilan ishlasa, UPDATE faqat to'ldirilgan jadvallar bilan ishlaydi. Agar so'rov bo'sh kataklarga yuborilsa, xatolik yuz beradi.

Quyidagi kod yangisini tayinlaydi pochta qutisi 103-raqamli uyda yashovchi fuqaroga.

YANGILANISh uydoshlar SET Email = " [elektron pochta himoyalangan]" WHERE housemeateID = 103

Bloklash SET- bu o'zgarishlar blokidir. Agar siz bir nechta katakchalarning qiymatini yangilashingiz kerak bo'lsa, ular vergul bilan ajratilgan ro'yxatga olinadi.

YANGILANISh uydoshlar SET Email = " [elektron pochta himoyalangan]", housemateName = "Rurik S.S." WHERE housemeateID = 103

Jadvalni o'zgartirish

Dizaynning keyingi bosqichlarida yoki bazani ishlab chiqishdan keyin ko'pincha ehtiyoj paydo bo'ladi:

  • ustun qo'shish yoki olib tashlash;
  • ustun turini o'zgartirish;
  • ustun yoki ustunlar guruhini asosiy yoki tashqi kalit sifatida belgilang yoki bu cheklovlarni olib tashlang.

Bu barcha operatsiyalar uchun bekor qilish ko'rsatmasi mavjud. SADOLdan keyin.

Ustun qo'shish uchun ALTER TABLE iborasi ADD bandi bilan birga ishlatiladi. Oldingi bo'limdagi uydoshlar jadvaliga yangi ustun qo'shamiz:

ALTER TABLE housemates ADD PhoneNumber nvarchar(12) NULL;

Unga jumlani qo'llash kerak ALTER USTUN ALTER TABLE ichida:

ALTER TABLE housemates ALTER COLUMN PhoneNumber char(25) NO NULL;

yordamida ustunni olib tashlaydi USTUNNI TOSHLASH ALTER TABLE ichida:

ALTER TABLE housemates DOP COLUMN PhoneNumber;

Birlamchi yoki tashqi kalit o'chiriladi va mos ravishda ALTER TABLE ADD CONSTRAINT/DROP CONSTRAINT konstruksiyalari yordamida qo'shiladi:

housemeateID ustunidan asosiy kalit cheklovini olib tashlang ALTER TABLE housemates DROP CONSTRAINT primary_id; --HousemeateID ustunini asosiy kalit sifatida belgilang ALTER TABLE housemates ADD CONSTRAINT PK_ID PRIMARY KEY (housemeateID);

Agar siz allaqachon mavjud bo'lgan jadvalga asosiy kalitni belgilashga harakat qilsangiz, so'rovlar tarjimoni xatoni qaytaradi. Shuning uchun, agar jadvalda allaqachon asosiy kalit bo'lsa, uni olib tashlashingiz va asosiy kalit sifatida ustunlar guruhini belgilashingiz kerak. Masalan, bu kabi:

ALTER TABLE housemates DROP CONSTRAINT PK_ID; ALTER TABLE housemates ADD CONSTRAINT PK_ID, PK_AN PRIMARY KEY (uy meateID, kvartira raqami);

SQL - 3-dars. Jadvallar yaratish va ularni ma'lumotlar bilan to'ldirish

Shunday qilib, biz ma'lumotlar turlari bilan tanishdik, endi biz forumimiz uchun jadvallarni yaxshilaymiz. Keling, avval ularni ko'rib chiqaylik. Va foydalanuvchilar jadvalidan boshlaylik. Bizda 4 ta ustun mavjud:

Id_user - bu butun son qiymatlari, ya'ni tur int bo'ladi, keling, uni 10 belgi bilan cheklaylik - int (10).
name - bu varchar satr qiymati, keling, uni 20 ta belgi bilan cheklaymiz - varchar(20).
email - bu varchar string qiymati, keling, uni 50 ta belgi bilan cheklaylik - varchar(50).
parol - bu varchar string qiymati, biz uni 15 belgi bilan cheklaymiz - varchar(15).

Barcha maydon qiymatlari talab qilinadi, ya'ni siz NOT NULL turini qo'shishingiz kerak.

Id_user int (10) NULL EMAS
varchar(20) nomi NULL EMAS
email varchar(50) NULL EMAS

Ma'lumotlar bazasining kontseptual modelidan eslaganingizdek, birinchi ustun asosiy kalitdir (ya'ni uning qiymatlari noyobdir va ular rekordni noyob tarzda aniqlaydi). O'z-o'zidan noyoblikni kuzatish mumkin, ammo bu oqilona emas. Buning uchun SQLda maxsus atribut mavjud - AUTO_INCREMENT, bu ma'lumotlarni qo'shish uchun jadvalga kirishda ushbu ustunning maksimal qiymatini hisoblab chiqadi, natijada olingan qiymatni 1 ga oshiradi va uni ustunga kiritadi. Shunday qilib, ushbu ustunda avtomatik ravishda noyob raqam hosil bo'ladi va shuning uchun NOT NULL turi ortiqcha. Shunday qilib, asosiy kalit bilan ustunga atribut tayinlaymiz:


varchar(20) nomi NULL EMAS
email varchar(50) NULL EMAS
parol varchar(15) NULL EMAS

Endi biz id_user maydoni asosiy kalit ekanligini belgilashimiz kerak. Buning uchun SQL kalit so'zdan foydalanadi ASOSIY KALT(), kalit maydonining nomi qavs ichida ko'rsatilgan. Keling, o'zgartirishlar kiritaylik:

Id_user int (10) AUTO_INCREMENT
varchar(20) nomi NULL EMAS
email varchar(50) NULL EMAS
parol varchar(15) NULL EMAS
ASOSIY KALT (ID_user)

Shunday qilib, jadval tayyor va uning yakuniy versiyasi quyidagicha ko'rinadi:

Jadval foydalanuvchilarini yaratish (
id_user int (10) AUTO_INCREMENT,
varchar nomi (20) NULL EMAS,
email varchar(50) NULL EMAS,
parol varchar(15) NULL EMAS,
ASOSIY KALT (ID_user)
);

Endi ikkinchi jadval - mavzularni ko'rib chiqamiz. Xuddi shunday bahslashsak, bizda quyidagi maydonlar mavjud:



id_author int (10) NULL EMAS
ASOSIY KALT (id_mavzu)

Lekin bizning ma'lumotlar bazasi modelimizda id_author maydoni chet el kalitidir, ya'ni. u faqat foydalanuvchilar jadvalining id_user maydonidagi qiymatlarga ega bo'lishi mumkin. Buni SQLda ko'rsatish uchun kalit so'z mavjud EXT KALİT(), quyidagi sintaksisga ega:

FOREIGN KEY (ustun_nomi_qaysi_xorijiy_kalit) MA'LUMOTLAR ota_jadval_nomi (ota_ustun_nomi);

Keling, id_author xorijiy kalit ekanligini ko'rsatamiz:

Id_topic int (10) AUTO_INCREMENT
mavzu_nomi varchar(100) NULL EMAS
id_author int (10) NULL EMAS
ASOSIY KALT (id_mavzu)
FOREIGN KEY (id_author) MA'LUMOTLAR foydalanuvchilar (id_user)

Jadval tayyor va uning yakuniy versiyasi quyidagicha ko'rinadi:

Jadval mavzularini yaratish (
id_topic int (10) AUTO_INCREMENT,
mavzu_nomi varchar(100) NULL EMAS,

ASOSIY KALT (id_mavzu),
FOREIGN KEY (id_author) MA'LUMOTLAR foydalanuvchilar (id_user)
);

Qolgan oxirgi jadval postlardir. Bu erda hamma narsa o'xshash, faqat ikkita xorijiy kalit:

Jadval postlarini yaratish (
id_post int (10) AUTO_INCREMENT,
xabar matni NULL EMAS,
id_author int (10) NULL EMAS,
id_topic int (10) NULL EMAS,
ASOSIY KALT (id_post),
FOREIGN KEY (id_author) MA'LUMOTLAR foydalanuvchilar (id_user),
FOREIGN KEY (id_mavzu) ADABIYOTLAR mavzulari (id_mavzu)
);

E'tibor bering, jadvalda bir nechta xorijiy kalitlar bo'lishi mumkin, ammo MySQLda faqat bitta asosiy kalit bo'lishi mumkin. Birinchi darsda biz forum ma'lumotlar bazasini o'chirib tashladik, uni yana yaratish vaqti keldi.

Keling, ishga tushiramiz MySQL serveri(Boshlash - Dasturlar - MySQL - MySQL Server 5.1 - MySQL Command Line Client), parolni kiriting, ma'lumotlar bazasi forumini yarating (ma'lumotlar bazasi forumini yaratish;), foydalanish uchun uni tanlang (forumdan foydalaning;) va uchta jadvalimizni yarating:

E'tibor bering, bitta buyruq bir nechta satrlarda Enter tugmasi yordamida yozilishi mumkin (MySQL avtomatik ravishda belgini almashtiradi yangi qator->) va ajratuvchi (nuqtali vergul)dan keyingina Enter tugmasini bosgandan keyingina so'rov bajariladi.

Esingizda bo'lsin, agar siz noto'g'ri ish qilgan bo'lsangiz, DROP iborasi yordamida har doim jadvalni yoki butun ma'lumotlar bazasini tashlab qo'yishingiz mumkin. Biror narsani tuzating buyruq qatori juda noqulay, shuning uchun ba'zida (ayniqsa, dastlabki bosqichda) ba'zi muharrirlarda, masalan, Notepadda so'rovlarni yozish va keyin ularni qora oynaga nusxalash va joylashtirish osonroq.

Shunday qilib, jadvallar yaratilgan, bunga ishonch hosil qilish uchun jamoani eslaylik jadvallarni ko'rsatish:

Va nihoyat, so'nggi xabarlar jadvalimizning tuzilishini ko'rib chiqaylik:

Endi DEFAULT maydonidan tashqari strukturaning barcha sohalarining ma'nolari aniq bo'ladi. Bu standart qiymat maydoni. Ba'zi ustunlar (yoki barchasi) uchun standart qiymatni belgilashimiz mumkin. Misol uchun, agar bizda "Uylangan" deb nomlangan maydon bo'lsa va ENUM ("ha", "yo'q") yozilsa, qiymatlardan birini standart qiymat qilish mantiqiy bo'lar edi. Sintaksis quyidagicha bo'ladi:

Uylangan raqam ("ha", "yo'q") NO NULL standart ("ha")

Bular. bu kalit so'z ma'lumotlar turidan keyin bo'sh joy bilan ajratilgan holda yoziladi va standart qiymat qavs ichida ko'rsatiladi.

Ammo keling, stolimizga qaytaylik. Endi biz jadvallarimizga ma'lumotlarni kiritishimiz kerak. Veb-saytlarda siz odatda ma'lumotni ba'zi html shakllariga kiritasiz, keyin qaysidir tildagi skript (php, java...) bu ma'lumotlarni formadan ajratib oladi va ma'lumotlar bazasiga kiritadi. U buni ma'lumotlar bazasiga ma'lumotlarni kiritish uchun SQL so'rovi orqali amalga oshiradi. Biz hali PHP-da skriptlarni qanday yozishni bilmaymiz, ammo endi biz ma'lumotlarni kiritish uchun SQL so'rovlarini yuborishni o'rganamiz.

Buning uchun operator ishlatiladi KIRITMOQ. Ikki xil sintaksisdan foydalanishingiz mumkin. Birinchi variant jadvalning barcha maydonlariga ma'lumotlarni kiritish uchun ishlatiladi:

INSERT INTO jadval_nomi VALUES ("birinchi_ustun_qiymati","ikkinchi_ustun_qiymati", ..., "oxirgi_ustun_qiymati");


Keling, foydalanuvchilar jadvaliga quyidagi qiymatlarni qo'shishga harakat qilaylik:

INSERT INTO FOYDALANUVCHILAR QIYMATLAR ("1","sergey", " [elektron pochta himoyalangan]", "1111");

Ikkinchi variant jadvalning ba'zi maydonlariga ma'lumotlarni kiritish uchun ishlatiladi:

INSERT INTO jadval_nomi ("ustun_nomi", "ustun_nomi") VALUES ("birinchi_ustun_qiymati", "ikkinchi_ustun_qiymati");


Bizning foydalanuvchilar jadvalida barcha maydonlar talab qilinadi, lekin bizning birinchi maydonimizda AUTO_INCREMENT kalit so'zi mavjud (ya'ni, u avtomatik ravishda to'ldiriladi), shuning uchun biz ushbu ustunni o'tkazib yuborishimiz mumkin:

INSERT INTO foydalanuvchilar (ism, email, parol) VALUES ("valera", " [elektron pochta himoyalangan]", "2222");

Agar bizda NULL tipidagi maydonlar bo'lsa, ya'ni. ixtiyoriy, biz ham ularni e'tiborsiz qoldirishimiz mumkin. Ammo agar siz NOT NULL qiymati bo'lgan maydonni bo'sh qoldirishga harakat qilsangiz, server xato xabarini ko'rsatadi va so'rovni bajarmaydi. Bundan tashqari, ma'lumotlarni kiritishda server jadvallar orasidagi munosabatlarni tekshiradi. Shuning uchun, tegishli jadvalda mavjud bo'lmagan xorijiy kalit bo'lgan maydonga qiymat qo'sha olmaysiz. Qolgan ikkita jadvalga ma'lumotlarni kiritish orqali buni tasdiqlaysiz.

Lekin birinchi navbatda, yana bir nechta foydalanuvchilar haqida ma'lumot qo'shamiz. Bir vaqtning o'zida bir nechta satrlarni qo'shish uchun siz shunchaki qavslarni vergul bilan ajratilgan qiymatlar bilan ro'yxatlashingiz kerak:

Endi ma'lumotlarni ikkinchi jadvalga - mavzularga kiritamiz. Hammasi bir xil, lekin id_author maydonidagi qiymatlar foydalanuvchilar jadvalida bo'lishi kerakligini yodda tutishimiz kerak:

Endi foydalanuvchilar jadvalida yo'q id_author bilan boshqa mavzu qo'shishga harakat qilaylik (chunki biz foydalanuvchilar jadvaliga atigi 5 ta foydalanuvchi qo'shdik, u holda id=6 mavjud emas):

Server xato qiladi va bunday qatorga kira olmasligini aytadi, chunki xorijiy kalit bo'lgan maydon tegishli foydalanuvchilar jadvalida bo'lmagan qiymatni o'z ichiga oladi.

Keling, xabarlar jadvaliga bir nechta qatorlarni qo'shamiz, unda bizda 2 ta xorijiy kalit borligini eslaymiz, ya'ni. Biz kiritadigan id_author va id_topic ular bilan bog'langan jadvallarda bo'lishi kerak:

Shunday qilib, bizda ma'lumotlar mavjud 3 ta jadval mavjud. Savol tug'iladi - jadvallarda qanday ma'lumotlar saqlanganligini qanday ko'rish mumkin. Buni keyingi darsda qilamiz.

Agar siz SQL so'rovi orqali qaytarilgan ma'lumotlar to'plamini saqlashingiz kerak bo'lsa, unda ushbu maqola siz uchun qiziqarli bo'ladi, chunki biz uni ko'rib chiqamiz. SELECT bayonoti ICHIGA, qaysi yordamida Microsoft SQL Server, siz yangi jadval yaratishingiz va uni natija bilan to'ldirishingiz mumkin SQL so'rovi.

Biz, albatta, SELECT INTO bayonotining tavsifidan boshlaymiz va keyin misollarga o'tamiz.

Transact-SQL-da SELECT INTO bayonoti

TANLASH– yangi jadval yaratuvchi va unga SQL so‘rovidan olingan qatorlarni kirituvchi T-SQL tilidagi ko‘rsatma. Jadval tuzilishi, ya'ni. ustunlar soni va nomlari, shuningdek, ma'lumotlar turlari va nomaqbullik xususiyatlari ustunlarga asoslanadi ( ifodalar) SELECT bayonotidagi manba tanlash ro'yxatida ko'rsatilgan. Odatda, SELECT INTO bayonoti bir nechta jadvallar va ko'rinishlardagi ma'lumotlarni, jumladan, ba'zi hisoblash ma'lumotlarini bitta jadvalga birlashtirish uchun ishlatiladi.

SELECT INTO iborasidan foydalanish uchun siz yangi jadval yaratiladigan maʼlumotlar bazasida CREATE TABLE ruxsatiga ega boʻlishingiz kerak.

SELECT INTO bayonotida ikkita argument mavjud:

  • new_table - ism yangi stol;
  • fayllar guruhi - fayllar guruhi. Agar argument ko'rsatilmagan bo'lsa, standart fayl guruhi ishlatiladi. Bu imkoniyat Microsoft SQL Server 2017 dan boshlab mavjud.

SELECT INTO bayonoti haqida muhim fikrlar

  • Ko'rsatma joriy serverda jadval yaratish uchun ishlatilishi mumkin, masofaviy serverda jadval yaratish qo'llab-quvvatlanmaydi;
  • Siz yangi jadvalni joriy ma'lumotlar bazasi va joriy serverdan yoki boshqa ma'lumotlar bazasidan yoki uzoq serverdan ma'lumotlar bilan to'ldirishingiz mumkin. Masalan, ko'rsating to'liq ism shaklida ma'lumotlar bazasi database_schema.jadval_nomi yoki uzoq server bo'lsa, bog'langan_server.database.schema.jadval_nomi;
  • Yangi jadvaldagi identifikatsiya ustuni IDENTITY xususiyatini meros qilib olmaydi, agar: bayonotda birlashma (JOIN, UNION), GROUP BY bandi bo‘lsa, agregat funktsiyasi, shuningdek, agar identifikatsiya ustuni ifodaning bir qismi bo'lsa, masofaviy ma'lumot manbasidan olingan bo'lsa yoki tanlangan ro'yxatda bir necha marta paydo bo'lsa. Umuman shunga o'xshash holatlar identifikatsiya ustuni IDENTITY xususiyatini meros qilib olmaydi va NOT NULL sifatida yaratilgan;
  • SELECT INTO iborasidan, hatto manba jadvali boʻlingan boʻlsa ham, boʻlingan jadval yaratish uchun foydalana olmaysiz;
  • Siz oddiy jadvalni, shuningdek, vaqtinchalik jadvalni yangi jadval sifatida belgilashingiz mumkin, lekin jadval o'zgaruvchisi yoki jadval qiymati parametrini ko'rsata olmaysiz;
  • Hisoblangan ustun, agar SELECT INTO bayonotining tanlov ro'yxatida mavjud bo'lsa, yangi jadvalda u odatiy holga keladi, ya'ni. hisoblanmaydi;
  • SELECT INTO dan COMPUTE bandi bilan foydalanish mumkin emas;
  • SELECT INTO-dan foydalanib, indekslar, cheklovlar va triggerlar yangi jadvalga o'tkazilmaydi, agar kerak bo'lsa, bayonot bajarilgandan keyin qo'shimcha ravishda yaratilishi kerak;
  • ORDER BY bandi yangi jadvaldagi qatorlar belgilangan tartibda kiritilishiga kafolat bermaydi.
  • FILESTREAM atributi yangi jadvalga o'tkazilmaydi. Yangi jadvaldagi BLOB FILESTREAM obyektlari varbinary(max) tipidagi BLOB obyektlari bo‘ladi va 2 GB chegarasiga ega bo‘ladi;
  • SELECT INTO operatsiyalari paytida tranzaktsiyalar jurnaliga yozilgan ma'lumotlar miqdori tiklash modeliga bog'liq. Ommaviy qayd qilingan tiklash modelidan foydalanadigan ma'lumotlar bazalarida va oddiy model, SELECT INTO ni o'z ichiga olgan ommaviy operatsiyalar minimal tarzda qayd etiladi. Shu sababli, SELECT INTO bayonoti jadval yaratish uchun alohida bayonotlarga va uni ma'lumotlar bilan to'ldirish uchun INSERT operatorlariga qaraganda samaraliroq bo'lishi mumkin.

SELECT INTO dan foydalanishga misollar

Men barcha misollarni Microsoft SQL Server 2016 Express DBMS da ishga tushiraman.

Dastlabki ma'lumotlar

Birinchidan, ikkita jadval tuzamiz va ularni ma'lumotlar bilan to'ldiramiz, biz ushbu jadvallarni misollarda birlashtiramiz.

JADVAL YARATING TestJadval(IDENTITY(1,1) NO NULL, NO NULL, (100) NO NULL, NULL) ON GO JADVAL YARATISH TestTable2( IDENTITY(1,1) NO NULL, (100) NO NULL) BOShQA Test jadvaliga qo'shing QIYMATLAR (1,"Klaviatura", 100), (1, "Sichqoncha", 50), (2, "Telefon", 300) Test Jadvaliga 2 QIYMATLARGA KIRISH (" Kompyuter komponentlari"), ("Mobil qurilmalar") Test jadvalidan * TANLASH * Test jadvalidan 2-TANLASHGA o'ting

1-misol - Ma'lumotlarni birlashtirish bilan SELECT INTO yordamida jadval yaratish

Tasavvur qilaylik, ikkita jadvalni birlashtirib, olingan natijani yangi jadvalda saqlashimiz kerak ( masalan, ular tegishli bo'lgan toifa nomi bilan mahsulotlarni olishimiz kerak).

Amaliyot SELECT INTO SELECT T1.ProductId, T2.CategoryName, T1.MahsulotName, T1.Price INTO TestTable3 INTO TestJadval T1 FROM CHP BIRIN TestTable T2 T2 ON T1.CategoryId = T2.CategoryId --ROMT SELECT ma'lumotlarini tanlash * yangi jadvaldan Test3


Natijada TestTable3 deb nomlangan jadval yaratdik va uni birlashtirilgan ma'lumotlar bilan to'ldirdik.

2-misol - Ma'lumotlarni guruhlash bilan SELECT INTO yordamida vaqtinchalik jadval yaratish

Keling, aytaylik, bizga guruhlangan ma'lumotlar kerak, masalan, ma'lum bir toifadagi mahsulotlar soni haqida ma'lumot va biz bu ma'lumotlarni vaqtinchalik jadvalda saqlashimiz kerak, masalan, biz bu ma'lumotlardan faqat SQL operatorlarida foydalanamiz, shuning uchun biz to'liq huquqli jadval yaratish shart emas.

SELECT INTO SELECT T2.CategoryName, COUNT(T1.ProductId) AS CntProduct INTO INTO #TestTable INTO INTO TestTable T1 FROM TestTable 2 T2 ON T1.CategoryId = T2.Category. - Vaqtinchalik jadvaldan ma'lumotlarni olish #TESTTable


Ko'rib turganingizdek, biz #TestTable vaqtinchalik jadvalini yaratishga va uni guruhlangan ma'lumotlar bilan to'ldirishga muvaffaq bo'ldik.

Shunday qilib, biz T-SQL tilidagi SELECT INTO iborasini ko'rib chiqdik; "T-SQL dasturchining yo'li" kitobimda men barcha konstruktsiyalar haqida batafsil gapiraman. T-SQL tili (Men uni o'qishni tavsiya qilaman), va bu hozircha!

SQL jadvalini yaratishdan oldin siz ma'lumotlar bazasi modelini aniqlashingiz kerak. Ob'ektlar, atributlar va munosabatlarni aniqlash uchun ER diagrammasini loyihalash.

Asosiy tushunchalar

Ob'ektlar - bu ma'lumotlar saqlanishi kerak bo'lgan ob'ektlar yoki faktlar. Masalan, kompaniyaning xodimi yoki kompaniya tomonidan amalga oshirilgan loyihalar. Atributlar - ob'ektni tavsiflovchi yoki sifatlovchi komponentlar. Masalan, "xodim" sub'ektining atributi ish haqi, va "loyiha" sub'ektining atributi taxminiy xarajat hisoblanadi. Bog'lanishlar ikki element o'rtasidagi bog'lanishdir. Ikki tomonlama bo'lishi mumkin. Rekursiv bog‘lanish, ya’ni borliqning o‘zi bilan bog‘lanishi ham mavjud.

Shuningdek, ma'lumotlar bazasining yaxlitligi ta'minlanadigan kalitlar va shartlarni aniqlash kerak. Bu nima degani? Boshqacha qilib aytganda, ma'lumotlar bazalarini to'g'ri va izchil shaklda saqlashga yordam beradigan cheklovlar.

ER diagrammasidan jadvalli modelga o'tish

O'tish qoidalari jadvalli model:

  1. Barcha ob'ektlarni jadvallarga aylantiring.
  2. Barcha atributlarni ustunlarga aylantiring, ya'ni har bir ob'ekt atributi jadval ustuni nomida paydo bo'lishi kerak.
  3. Noyob identifikatorlarni asosiy kalitlarga aylantiring.
  4. Barcha munosabatlarni xorijiy kalitlarga aylantiring.
  5. SQL jadvalini yarating.

Ma'lumotlar bazasini yaratish

Avval MySQL serverini ishga tushirishingiz kerak. Uni ishga tushirish uchun Boshlash menyusiga o'ting, keyin Dasturlar, keyin MySQL va MySQL Server, MySQL-Buyruqlar qatori-Client-ni tanlang.

Ma'lumotlar bazasini yaratish uchun "Ma'lumotlar bazasini yaratish" buyrug'idan foydalaning. Bu funksiya quyidagi formatga ega:

MA'LUMOTLAR BAZASI YARATING ma'lumotlar bazasi_nomi.

Ma'lumotlar bazasi nomidagi cheklovlar quyidagilardan iborat:

  • uzunligi 64 ta belgigacha bo'lgan va harflar, raqamlar, "" va "" belgilarini o'z ichiga olishi mumkin;
  • ism raqam bilan boshlanishi mumkin, lekin unda harflar bo'lishi kerak.

Umumiy qoidani eslab qolishingiz kerak: har qanday so'rov yoki buyruq chegaralovchi bilan tugaydi. SQL-da chegaralovchi sifatida nuqta-verguldan foydalanish odatiy holdir.

Server qaysi ma'lumotlar bazasi bilan ishlashi kerakligini ko'rsatishi kerak. Buning uchun USE bayonoti mavjud. Bu operator oddiy sintaksisga ega: USE n ma'lumotlar bazasi_nomi.

SQL jadvalini yaratish

Shunday qilib, model ishlab chiqilgan, ma'lumotlar bazasi yaratilgan va serverga u bilan qanday ishlash kerakligi aytilgan. Endi siz SQL jadvallarini yaratishni boshlashingiz mumkin. Ma'lumotlarni aniqlash tili (DDL) mavjud. U MS SQL jadvalini yaratish, shuningdek, ob'ektlarni aniqlash va ularning tuzilishi bilan ishlash uchun ishlatiladi. DDL buyruqlar to'plamini o'z ichiga oladi.

SQL Server jadvalini yaratish

Bitta DDL buyrug'idan foydalanib, uning parametrlarini o'zgartirish orqali turli xil ma'lumotlar bazasi ob'ektlarini yaratishingiz mumkin. Jadval yaratish buyrug'i ishlatiladi. tt formati quyidagicha ko'rinadi:

TADLE YARATING jadval_nomi,(ustun_nomi1 Ism _ustun2 ma'lumotlar turi [ustun_cheklovi], [jadval_cheklovlari]).

Ushbu buyruqning sintaksisi batafsilroq tavsiflanishi kerak:

  • Jadval nomi 30 belgigacha bo'lishi va harf bilan boshlanishi kerak. Faqat alifbo belgilar, harflar va "_", "$" va "#" belgilariga ruxsat beriladi. Kirill alifbosidan foydalanishga ruxsat berilgan. Shuni ta'kidlash kerakki, jadval nomlari boshqa ob'ektlar nomlari yoki ma'lumotlar bazasi serverida saqlangan Ustun, Jadval, Indeks va boshqalar kabi so'zlar bilan bir xil bo'lmasligi kerak.
  • Har bir ustun uchun ma'lumotlar turini belgilashingiz kerak. Ko'pchilik tomonidan ishlatiladigan standart to'plam mavjud. Masalan, Char, Varchar, Raqam, Sana, Null turi va boshqalar.

  • Standart parametr standart qiymatni o'rnatishga imkon beradi. Bu jadvalda null qiymatlar yo'qligini ta'minlaydi. Bu nima degani? Standart qiymat belgi, ifoda, funktsiya bo'lishi mumkin. Shuni yodda tutish kerakki, ushbu standart ma'lumotlar turi ustunning kirish ma'lumotlari turiga mos kelishi kerak.
  • Har bir ustundagi cheklovlar jadval darajasida ma'lumotlarning yaxlitlik shartlarini ta'minlash uchun ishlatiladi. Boshqa nuanslar ham bor. Jadvalga bog'liq bo'lgan boshqa jadvallar mavjud bo'lsa, uni o'chirish taqiqlanadi.

Ma'lumotlar bazasi bilan qanday ishlash kerak

Katta loyihalar ko'pincha bir nechta ma'lumotlar bazalarini yaratishni talab qiladi, ularning har biri ko'plab jadvallarni talab qiladi. Albatta, foydalanuvchilarning barcha ma'lumotlarni boshlarida saqlab qolishi mumkin emas. Buning uchun ma'lumotlar bazalari va ulardagi jadvallarning tuzilishini ko'rish mumkin. Bir nechta buyruqlar mavjud, xususan:

  • MA'LUMOTLAR BAZALARINI KO'RSATISH - ekranda barcha yaratilgan SQL ma'lumotlar bazalarini ko'rsatadi;
  • SHOW TABLES - joriy ma'lumotlar bazasi uchun USE buyrug'i bilan tanlangan barcha jadvallar ro'yxatini ko'rsatadi;
  • TA'SFRI BERING jadval_nomi- jadvalning barcha ustunlari tavsifini ko'rsatadi.
  • ALTER TABLE - jadval strukturasini o'zgartirish imkonini beradi.

Oxirgi buyruq quyidagilarga imkon beradi:

  • jadvalga ustun yoki cheklov qo'shish;
  • mavjud ustunni o'zgartirish;
  • ustun yoki ustunlarni o'chirish;
  • yaxlitlik cheklovlarini olib tashlang.

Bu buyruq sintaksisi: ALTER TABLE jadval_nomi( | | | | [(YOQISH | OʻCHIRISH) DOIMIY cheklash_nomi ] | }.

Boshqa buyruqlar mavjud:

  • RENAME - jadval nomini o'zgartirish.
  • TRUNCATE TABLE - jadvaldan barcha qatorlarni olib tashlaydi. Ushbu funktsiya jadvalni qayta to'ldirish zarur bo'lganda kerak bo'lishi mumkin, ammo oldingi ma'lumotlarni saqlashga hojat yo'q.

Ma'lumotlar bazasi tuzilishi o'zgargan va jadval o'chirilishi kerak bo'lgan holatlar ham mavjud. Buning uchun DROP buyrug'i mavjud. Albatta, siz avval jadvalni o'chirmoqchi bo'lgan ma'lumotlar bazasini tanlashingiz kerak, agar u hozirgisidan farq qilsa.

Buyruqning sintaksisi juda oddiy: DROP TABLE Ism_jadvallar.

IN SQL kirish jadvallarni yaratish va ularni o'zgartirish yuqorida sanab o'tilgan buyruqlar yordamida amalga oshiriladi.

CREATE TABLE-dan foydalanib, siz bo'sh jadval yaratishingiz va keyin uni ma'lumotlar bilan to'ldirishingiz mumkin. Lekin bu hammasi emas. Bundan tashqari, to'g'ridan-to'g'ri boshqa jadvaldan jadval yaratishingiz mumkin. Bu qanday? Ya'ni, jadvalni aniqlash va uni boshqa jadval ma'lumotlari bilan to'ldirish mumkin. Buning uchun maxsus AS kalit so'zi mavjud.

Sintaksis juda oddiy:

  • JADVAL YARATISH Ism_jadvallar[(ustun_ta'rifi)] AS quyi so‘rovi;
  • ustun_ta'rifi - ustun nomlari, yangi yaratilgan jadval ustunlari uchun yaxlitlik qoidalari va standart qiymatlar;
  • pastki so'rov - yangi jadvalga qo'shilishi kerak bo'lgan qatorlarni qaytaradi.

Shunday qilib, bunday buyruq ma'lum ustunlar bilan jadval yaratadi, unga so'rovda qaytariladigan qatorlarni kiritadi.

Vaqtinchalik jadvallar

Vaqtinchalik jadvallar - bu har bir sessiya oxirida yoki undan oldin ma'lumotlari o'chiriladigan jadvallar. Ular oraliq qiymatlarni yoki natijalarni yozish uchun ishlatiladi. Ulardan ish varaqlari sifatida foydalanish mumkin. Siz har qanday seansda vaqtinchaliklarni belgilashingiz mumkin, ammo ularning ma'lumotlaridan faqat joriy seansda foydalanishingiz mumkin. Vaqtinchalik SQL jadvallarini yaratish oddiy jadvallarga o'xshaydi, CREATE TABLE buyrug'i yordamida. Tizimga jadval vaqtinchalik ekanligini ko'rsatish uchun siz GLOBAL TEMPORARY parametridan foydalanishingiz kerak.

ON COMMIT bandi bunday jadvaldagi ma'lumotlarning ishlash muddatini belgilaydi va quyidagilarni amalga oshirishi mumkin:

  • QATLARNI O'CHIRISH - har bir tranzaksiya tugagandan so'ng vaqtinchalik jadvalni tozalash (barcha sessiya ma'lumotlarini o'chirish). Bu odatda standart qiymatdir.
  • QATLARNI SAQLASH - keyingi tranzaksiyada foydalanish uchun ma'lumotlarni qoldiring. Bundan tashqari, jadvalni faqat sessiya tugaganidan keyin tozalashingiz mumkin. Ammo ba'zi o'ziga xosliklar mavjud. Agar tranzaksiya orqaga qaytarilsa (ROLLBACK), oldingi tranzaksiya oxirida jadval o'z holatiga qaytariladi.

Vaqtinchalik jadval yaratish sintaksisi quyidagicha ifodalanishi mumkin: CREATE TABLE Ism_jadvallar,(Ismustun_1 ma'lumotlar turi [ustun_cheklovi], Ism _ustun2 ma'lumotlar turi [ustun_cheklovi], [jadval_cheklovlari]).