18-ma’ruza. PHP dasturlash tilida ma`lumotlar bazasi bilan ishlash.
Reja: MySQL MBBT ning asosiy operatorlari
MySQL so’rovlari bilan ishlovchi PHP buyruqlari bilan tanishish. mysql_connect va mysql_db_select operatorlari bilan ishlash.
PHP sahifasi orqali ma’lumotlar bazasiga so’rovlarni tashkil etish. mysql_query operatori imkoniyatlari.
MySQL tizimida ishlash uchun ma'lumotlar bazasini tanlash.
O`quv modullari MySQL, MBBT, PHP da MBBT bilan ishlash,mysql_connect, mysql_query
MySQL MBBT ning asosiy operatorlari Ma'lumotlar bazasi bilan quyidagi amallarni bajarish mumkin:
Ma'lumotlar bazasini (MB) yaratish, o'chirish va o'zgartirish.
Foydalanuvchilarga vakolat berish, o'chirish, o'zgartirish, qo'shish.
Ma'lumotlar bazasi (jadval va yozuvlar)ga ma'lumotlarni kiritish, o'chirish va o'zgartirish;
MB ma'lumotlarini saralash.
Birinchi ikkita amalni bajarish huquqi faqatgina MBBT administratorlari va maxsus huquqi bor foydalanuvchilarga berilgan.
Ma'lumotlar bilan ishlashda ma'lumotlar bazasini yaratish, lozim bo'lganda bu ma'lumotlar saqlanadigan jadvallar strukturasini o'zgartirish va o'chirish kerak bo'ladi. Buning uchun SQL ning quyidagi operatorlari mavjud CREATE TABLE, ALTER TABLE va DROP TABLE.
Ma'lumotlar bazasini yaratish: CREATE TABLE operatori
CREATE TABLE operatori joriy ma'lumotlar bazasida berilgan nom bilan jadval yaratadi. Agar ma'lumotlar bazasi aktivlashmagan bo'lsa yoki berilgan jadval nomi mavjud bo'lsa, buyruqni bajarishda xatolik haqida ogohlantiradi.
Sintaksisi:
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] jadval_nomi [(ustunlarni_aniqlash,...)] |jadval_opsiyasi] [select_ifoda]
MySQL 3.22 va undan keyingi versiyalarida jadval nomini ma’lumotlar_bazasi_nomi.jadval_nomi kabi ko'rsatadi. Yozuvning bu ko'rinishi ko'rsatilgan ma'lumotlar bazasi joriy yoki joriymasligiga bog'liq emas.
MySQL 3.23-versiyasida vaqtinchalik jadval yaratish uchun TEMPORARY kalit so'zi ishlatiladi. Vaqtinchalik jadval bog'lanish yakunlanganda avtomatik tarzda o'chiriladi, uning nomi esa berilgan bog'lanish davomida haqiqiy hisoblanadi. Bu shuni anglatadiki, ikkita turli bog'lanishda mavjud jadval xuddi shunday nomli jadval bilan yoki bir xil nomli vaqtinchalik jadvallar bir-biri bilan konf-liktsiz ishlatilishi mumkin (yoki mavjud jadval vaqtinchalik jadval o'chirilguncha yashirin bo'lib turadi). MySQL 4.0.2-versiyasida vaqtinchalik jadvallarni yaratish uchun CREATE TEMPORARY TABLES vakolatiga ega bo'lish zarur.
MySQL 3.23 va undan keyingi versiyalarida ko'rsatilgan jadval mavjud bo'lsa, xato bermasligi uchun IF NOT EXISTS kalit so'zi ishlatiladi. Bu holda jadval strukturalarining bir xilligi tekshirilmay-di.
Har bir jadval ma'lumotlar bazasi katalogida aniqlangan fayllar to'plami singari tasvirlanadi.
ustunlarni_aniqlash parametri jadvalda qanday ustunlar bo'lishi kerakligini belgilaydi. Jadvalning har bir ustuni bo'sh bo'lishi (NULL), odatga ko'ra qiymatga ega bo'lishi, kalitli yoki avtoinkrement (AUTO_INCREMENT) bo'lishi mumkin. Bundan tashqari, har bir ustun uchun unda saqlanadigan ma'lumotlar tipini ko'rsatish kerak. Agar NULL ham, NOT NULL ham ko'rsatilmasa, u holda ustun NULL ko'rsatilgandek, interpretatsiya qilinadi. Agar maydon avtoinkrement sifatida belgilansa, u holda jadvalga ma'lumot kiritilganda va bu maydonga bo'sh qiymat (NULL, yoki hech narsa yozilmaganda) yoki 0 kiritilganda uning qiymati har gal 1 ta qiymatga oshiriladi. Jadvalda avtoinkrement maydon faqatgina bitta bo'lishi mumkin, shuning uchun uni indekslash shart emas. Avtoinkrement ketma-ketligi 1 dan boshlanadi.
Qoidaga ko'ra ustunlar quyidagicha beriladi (ustunlarni_aniqlash):
ustun__nomi tipi [NOT NULL | NULL] [DEFAULT odatga ko'ra qiymati] [AUTO_INCREMENT][PRIMARY KEY] [reference_definition]
Ustun tipi (ustunlarni_aniqlash parametrining ustunnomi tipi) quyidagilardan birortasini qabul qilishi mumkin:
• butun: INT[(length)] [UNSIGNED] [ZEROFILL]
belgili: CHAR(length) [BINARY] va VARCHAR(length) [BINARY]
katta obyektlar bilan ishlash uchun: BLOB
matnli: TEXT
sana va vaqt: DATE va TIME
Maydon (ustun) uzunligi kiritilayotgan qiymatda jami nechta raqam (belgi) qatnashishi kerakligini aniqlaydi. dec qatnashgan may-donlarda esa bu o'nlik kasrlarda nuqtadan so'ng, ya'ni kasr qismi nechta raqamdan iborat bo'lishi kerakligini bildiradi. Bu sonlar faqatgina ustunning maksimal uzunligini hisoblash uchun ishlatiladi.
ustunlarni_aniqlashda ustunlar soni va tipi bilan birga chegara-lash va tekshirish uchun kalitli va indeksli ustunlar ro'yxatini ham berish mumkin:
PRIMARY KEY (indekslangan_ustun_nomi, ...)
yoki
KEY [indeks_nomi] (indekslangan_ustun_nomi,...) yoki
INDEX [indeks_nomi] (indekslangan_ustun_nomi,...) yoki
U NIQUE [IN DEX] [indeks_nomi] (indekslangan_ustun_ nomi,...) yoki
FULLTEXT [INDEX] [indeks__nomi] (indekslangan_ustun_ nomi,...) yoki
[CONSTRAINT symbol]
FOREIGN KEY [indeks_nomi] (indekslangan_ustun_nomi,...)
[reference_definition]
yoki
CHECK (expr)
FOREIGN KEY, CHECK va REFERENCES lar ayni vaqtda MySQLda hech qanday vazifani bajarmaydi. Ular boshqa SQL
serverlar bilan hamkorlik qilish uchun qo'shilgan. Shuning uchun ularga to'xtalmaymiz.
Ko'p hollarda ustunga kiritilgan qiymatlar bir-biridan farq qilishi mumkin. Agar ustun uchun UNIQUE cheklanish o'rnatilsa, bu ustunga mavjud qiymatni kiritishga urinish rad etiladi. Bu cheklanish bo'sh emas (NOT NULL) deb e'lon qilingan ustunlarga qo'llanishi mumkin.
Masalan,
CREATE TABLE Student (id INT NOT NULL UNIQUE, surname VARCHAR(100), name VARCHAR(50), stipend INT, kurs INT, city VARCHAR(100), birthday DATA, univer INT );
Unikalligi talab qilinadigan ustunlardagi kalitlar (birlamchi ka-litlardan tashqari) kandidat kalitlar yoki kalitlar deyiladi.
Jadval cheklanishi UNIQUE ustunlar guruhiga o'rnatilishi mumkin. Bu bir necha ustunlar qiymatiari kombinatsiyasi unikalligini ta'minlaydi.
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, jadval uchun faqat bitta birlamchi kalit (ixtiyoriy sondagi ustunlar uchun) aniqlanishi mumkin. Birlamchi kalitlar NULL qiymatiga ega bo'lishi mumkin emas.
Masalan:
CREATE TABLE Student
(id INT NOT NULL PRIMARY KEY, surname VARCHAR(100), name VARCHAR(50), stipend INT, kurs INT, city VARCHAR(100), birthday DATA, univjd INT);
Jadval yaratishda, uni ba'zi xususiyatlari (jadval_opsiyasi)ni ham ko'rsatish kerak, masalan:
jadval tipi: TYPE = {BDB | HEAP | ISAM | InnoDB | MERGE | MRGMYISAM | MY1SAM }
avtoinkrement hisoblagichining boshlang'ich qiymati: AUTO INCREMENT = son
jadval satrining o'rtacha uzunligi: AVGROWLENGTH = son
jadval uchun izoh (60 belgidan iborat satr): COMMENT = «satr»
satrning taxminiy eng katta va eng kichik qiymati: MAX_ ROWS = son va MIN_ROWS = son
NOT NULL jadval ustunidagi barcha yacheykalar qiymatga ega bo'lishi zarurligini bildiradi, agar NOT NULL ko'rsatilmasa, ustun qiymatlari bo'sh (NULL) bo'lishi mumkin.
AUTOINCREMENT — sonli ustunlar uchun ishlatiladigan MySQL ning maxsus imkoniyati. Agar jadvalga satrlarni qo'yishda ushbu maydonni bo'sh qoldirilsa, MySQL avtomatik tarzda identifikatorning unikal qiymatini qo'yadi. Bu qiymat maydondagi mavjud maksimal qiymatdan bittaga katta bo'ladi. Har bir jadvalda bunday maydon faqatgina bitta bo'ladi. AUTO_INCREMENT ustunlari indekslangan bo'lishi zarur.
PRIMARY KEY kalit so'zi ustun nomidan so'ng aniqlanib, ushbu ustun jadval uchun birlamchi kalit ekanligini anglatadi. Ushbu ustundagi ma'lumotlar unikal bo'lishi lozim. MySQL ushbu ustunni avtomatik tarzda indekslaydi.
UNSIGNED chegaralashi qo'yilgan ustun qiymati yoki butun son yoki nol bo'lishi mumkin.
Talabalar portalining o'quv jarayoni jadvallarini yaratamiz.
mysqi>CREATE TABLE Student
(stud_id INT UNSIGNED NOT NULL PRIMARY KEY, surname VARCHAR(100), name VARCHAR(100), stipend INT, kurs INT, city VARCHAR(200), birthday DATE, univjd INT UNSIGNED NOT NULL );
mysql>CREATE TABLE exam_marks (exam_id INT UNSIGNED NOT NULL PRIMARY KEY, stud_id INT UNSIGNED NOT NULL, subj_id INT UNSIGNED NOT NULL, mark INT, exam_date DATA );
mysql>CREATE TABLE subject
(subj_id INT UNSIGNED NOT NULL PRIMARY KEY,
subj_name VARCHAR(IOO) NOT NULL,
hour INT, semestr INT);
mysql>CREATE TABLE lecturer
(lecturerJd INT UNSIGNED NOT NULL PRIMARY KEY, surname VARCHAR(100) NOT NULL, name VARCHAR(100) NOT NULL, city VARCHAR(200), univjd INT UNSIGNED NOT NULL );
mysql>CREATE TABLE subjject
(lecturerJd INT UNSIGNED NOT NULL, subjjd INT UNSIGNED NOT NULL); mysql>CREATE TABLE univercity
(univ_id INT UNSIGNED NOT NULL PRIMARY KEY, univ_name VARCHAR(100) NOT NULL, rating INT, city VARCHAR(200));
Jadval yaratishda CREATE buyrug'ining yana bir elementi SELECT ifodasi (select jfodasi) ham qatnashishi mumkin. [IGNORE |REPLACE] SELECT ... (SELECT ning ixtiyoriy to'g'ri ifodasi)
Agar CREATE buyrug'i yordamida jadval yaratishda select_ifodasi ko'rsatilsa, u holda tanlashda olingan barcha maydonlar yaratilgan jadvalga qo'shiladi.
MySql ning maxsus SHOW buyrug'i yordamida ma'lumotlar bazasi tarkibi (ma'lumotlar bazasi jadvallari va jadval maydonlari) ni ko'rish mumkin.