04 — CREATE — baza va jadval yaratish¶
⬅️ Oldingi: 03 — Amaliyot bazalarini tayyorlash (4 ta tizim) · 🏠 README · Keyingi: 05 — Ma'lumot turlari ➡️
Bu bobda: SQL'dagi birinchi "qurilish" buyruqlarini o'rganamiz:
CREATE DATABASEbilan baza yaratamiz,USEbilan uning ichiga kiramiz,CREATE TABLEbilan jadval quramiz;PRIMARY KEY,AUTO_INCREMENT,NOT NULL,UNIQUE,DEFAULTqoidalari nimaligini tushunib olamiz vaSHOW,DESCRIBE,DROPyordamchi buyruqlari bilan tanishamiz.
Ma'lumotlar bazasini binoga o'xshating: avval binoning o'zini qurasiz (CREATE DATABASE), keyin ichiga kirasiz (USE), so'ng xonalarni jihozlaysiz (CREATE TABLE). Tartib aynan shunday — xonani binosiz qurib bo'lmaydi.
Baza yaratish — CREATE DATABASE¶
CHARACTER SET utf8mb4— o'zbek, rus, emoji — hammasini saqlaydi. Har doim shuni yozing. MySQL 8.0 da bu allaqachon standart, lekin ochiq yozish — yaxshi odat: kodingiz eski sozlangan serverda ham to'g'ri ishlaydiCOLLATE utf8mb4_unicode_ci— harflarni solishtirish qoidasi. Oxiridagici(case-insensitive) — qidiruvda katta-kichik harf farqlanmaydi:Aziz=aziz- Baza nomida bo'shliq bo'lmasin:
mening bazam❌ →mening_bazam✅ - Kichik harf va pastki chiziq ishlating, nom raqam bilan boshlanmasin:
1baza❌ →baza1✅
Agar shu nomli baza allaqachon mavjud bo'lsa, CREATE DATABASE xato beradi. Skriptlarda buni IF NOT EXISTS bilan yumshatish mumkin — "bo'lmasa yarat, bo'lsa indama":
Bazaga kirish — USE¶
Bazani yaratish — bu hali uning ichiga kirish degani emas. Uyni qurib, hali kalitni qo'lga olmagandeksiz. Jadval yaratishdan oldin qaysi bazada ishlamoqchi ekaningizni aytib qo'yishingiz kerak:
SHOW DATABASES; -- serverda qanday bazalar bor?
USE maktab; -- endi "maktab" ichidamiz
SELECT DATABASE(); -- hozir qaysi bazadaman? (tekshirish)
💡 Boshlovchilarning klassik xatosi: USE'siz to'g'ridan-to'g'ri CREATE TABLE yozish. Natija — ERROR 1046: No database selected. Bu xato chiqsa, bilingki — siz hali hech qaysi bazaga "kirmagansiz".
Jadval yaratish — CREATE TABLE¶
Har bir ustun uch qismdan iborat: nomi (siz tanlaysiz), turi (qanday ma'lumot saqlanadi — 5-bobda batafsil) va ixtiyoriy qoidalar (cheklovlar). Ustunlar orasiga vergul qo'yiladi, lekin oxirgi ustundan keyin vergul yo'q — bu eng ko'p uchraydigan sintaksis xatosi!
Misol — bosqichma-bosqich tahlil¶
CREATE TABLE talabalar (
id INT AUTO_INCREMENT PRIMARY KEY,
ism VARCHAR(100) NOT NULL,
yosh INT,
email VARCHAR(150) UNIQUE,
kurs INT DEFAULT 1
);
Har bir qatorni o'qiymiz:
| Yozuv | Ma'nosi |
|---|---|
INT |
butun son saqlaydi |
AUTO_INCREMENT |
har yangi qatorga raqamni o'zi beradi: 1, 2, 3... |
PRIMARY KEY |
asosiy kalit — takrorlanmas, bo'sh bo'lmaydi |
VARCHAR(100) |
100 belgigacha matn |
NOT NULL |
bo'sh qoldirib bo'lmaydi |
UNIQUE |
takrorlanishi mumkin emas (2 ta bir xil email yo'q) |
DEFAULT 1 |
qiymat berilmasa, avtomatik 1 yoziladi |
E'tibor bering: yosh ustunida hech qanday qoida yo'q — demak u bo'sh (NULL) qolishi mumkin. NOT NULL — "majburiy maydon" degani: ismsiz talabani saqlab bo'lmaydi. DEFAULT esa "aytmasangiz ham o'zim bilaman" degani: yangi talaba odatda 1-kursda o'qiydi.
PRIMARY KEY + AUTO_INCREMENT — ajralmas juftlik¶
PRIMARY KEY — jadvaldagi har bir qatorning pasport raqami: ikki qatorda bir xil bo'lmaydi va bo'sh qolmaydi. Nega bu kerak? Jadvalda ikkita "Aziz Karimov" o'qisa, ularni faqat id orqali farqlaysiz. Keyinroq jadvallarni bog'lashda (12-bob, JOIN) ham aynan shu id'lar ishlatiladi.
AUTO_INCREMENT esa shu raqamlarni qo'lda bermaslik uchun: MySQL ichida hisoblagich saqlaydi va har yangi qatorga keyingi raqamni o'zi yozib qo'yadi. Shuning uchun deyarli har bir jadvalda id INT AUTO_INCREMENT PRIMARY KEY qatorini ko'rasiz — bu eng keng tarqalgan andoza, yodlab oling.
💡 Qator o'chirilsa, uning raqami qayta ishlatilmaydi: 3-qatorni o'chirsangiz, keyingi yangi qator baribir 4 bo'ladi. Bu xato emas — pasport raqami ham boshqa odamga qaytadan berilmaydi.
Yordamchi buyruqlar¶
SHOW TABLES; -- jadvallar ro'yxati
DESCRIBE talabalar; -- jadval tuzilishi (qisqasi: DESC talabalar;)
SHOW CREATE TABLE talabalar; -- to'liq CREATE kodi
DROP TABLE talabalar; -- jadvalni O'CHIRISH (ehtiyot bo'ling!)
DROP TABLE IF EXISTS talabalar; -- bo'lsa o'chir, bo'lmasa xato berma
DROP DATABASE IF EXISTS sinov; -- butun bazani o'chirish (sinov bazasini masalalarda yaratamiz)
DESCRIBE — eng yaqin do'stingiz: qaysi ustun majburiy-u (Null ustunida NO), qaysi biri kalit (Key ustunida PRI) ekanini bir qarashda ko'rsatadi. DROP esa qaytarib bo'lmas buyruq: jadval bilan birga ichidagi barcha ma'lumot ham yo'qoladi va MySQL "rostdan o'chirasizmi?" deb so'rab o'tirmaydi.
Tez-tez uchraydigan xatolar¶
| Xato xabari | Sababi |
|---|---|
ERROR 1046: No database selected |
USE baza_nomi; ni unutdingiz |
ERROR 1064: ...syntax error... |
ko'pincha vergul aybdor: yetishmaydi yoki oxirgi ustundan keyin ortiqcha turibdi |
ERROR 1050: Table ... already exists |
bunday jadval allaqachon bor — DROP qiling yoki IF NOT EXISTS yozing |
ERROR 1060: Duplicate column name |
ikkita ustunga bir xil nom berilgan |
ERROR 1068: Multiple primary key defined |
PRIMARY KEY jadvalda faqat bitta bo'ladi |
Xato xabaridan qo'rqmang — uni o'qing. MySQL ko'pincha muammo aynan qaysi qatorda ekanini ham aytib beradi.
4-bob masalalari¶
Yangi
sinovbazasi yarating va hammasini shu yerda qiling:CREATE DATABASE sinov; USE sinov;
oquvchilarjadvali yarating: id (PK, auto), ism (matn 100, majburiy), sinf (butun son)DESCRIBE oquvchilar;bilan tekshiring — har bir ustunning turi vaNullqiymatiga e'tibor beringfanlarjadvali: id, nomi (majburiy, takrorlanmas)baholarjadvali: id, oquvchi_id, fan_id, baho (butun son), sana (DATE)xodimlarjadvali: id, ism, maosh (DECIMAL(10,2)), ishga_kirgan (DATE)- Jadval yaratishda NOT NULL'siz
telefonustuni qo'shing — farqini DESCRIBE'da ko'ring (NullustunidaYES) DEFAULTsinovi:mehmonlarjadvali yarating,davlat VARCHAR(50) DEFAULT 'Ozbekiston'— apostrofni atayin tushirdik (3-bobdagi kelishuv):'O'zbekiston'deb yozsangiz, string ichidagi apostrof sintaksisni buzadi; yechimini keyinroq ko'ramizUNIQUEsinovi:userlarjadvali yarating,login VARCHAR(50) UNIQUE- Ataylab xato: ikkita ustunga bir xil nom bering — xato xabarini o'qing
- Ataylab xato:
PRIMARY KEYni ikki ustunga alohida-alohida yozing — nima dedi? - Jadval nomini bo'shliq bilan yarating:
CREATE TABLE mening jadvalim (...)— xato chiqdimi? Backtick bilan sinang:`mening jadvalim`(lekin bunday qilmang!) DROP TABLE mehmonlar;— o'chiring,SHOW TABLESbilan tekshiringDROP TABLE mehmonlar;ni QAYTA bajaring — qanday xato? EndiDROP TABLE IF EXISTS mehmonlar;— farqi?- Sportzal uchun
azolarjadvalini O'ZINGIZ loyihalang (kamida 5 ustun) va yarating - Mehmonxona uchun
xonalarjadvali: raqami, qavat, narx, band (BOOLEAN) BOOLEANustunli jadvalni DESCRIBE qiling — MySQL uni qanday ko'rsatdi? (tinyint(1)— bu normal)- Restoran menyusi jadvalini yarating: taom nomi, kategoriya, narx, mavjudligi
- Avtosalon:
mashinalarjadvali — model, rang, yil, narx, sotilganmi sinovbazasidagi barcha jadvallarni bitta-bitta DROP qilingDROP DATABASE sinov;qilib, bazani qaytadan yarating — endi bu jarayon sizga tanish!