JavaRush /Kurslar /All lectures for UZ purposes /SQLdagi Ma'lumot Turlari

SQLdagi Ma'lumot Turlari

All lectures for UZ purposes
Daraja, Dars
Mavjud

SQLdagi ma'lumot turlari bilan tanishuv

JavaScript tilidan farqli o'laroq, SQL tilida qat'iy tipi mavjud. Har bir jadvalda har bir ustun o'ziga xos aniq belgilangan ma'lumot turiga ega.

Ma'lumot turlari juda ko'p, lekin Java tilidan farqli o'laroq, bu yerda ular juda ko'p emas, chunki har qanday vaziyat uchun ma'lumot turi mavjud emas. Ma'lumot bazalari hajmi ma'lumotlarga bog'liq, shuning uchun ko'plab ma'lumot turlari bir-biridan faqat uzunlik bilan farqlanadi.

Umumiy hisobda, ma'lumot turlarini 5 guruhga bo'lish mumkin:

  • Sonli turlar
  • Matnli turlar
  • Sana va vaqt saqlash uchun turlar
  • Obyektlar: odatda baytlar to'plami sifatida
  • Transport: JSON va XML

Odatda, har xil DBMS o'zining o'ziga xos ma'lumot turlariga ega. Har bir DBMS o'z ixtisosiga ega, shuning uchun yangi ma'lumot turlarini qo'shish juda keng tarqalgan.

Boshqa tomondan, shunchaki yangi ma'lumot turini qo'shish yetarli emas, u bilan ishlaydigan funksiyalarni qo'shish, shuningdek ishni qulay va tez qilish kerak.

Agar sen qandaydir korporativ DBMS ustida ishlayotgan bo'lsang, ehtimol uning ma'lumot turlari va funktsiyalari bilan tanishishga to'g'ri keladi. Buning uchun 2-5 ta yaxshi kitob o‘qish kerak bo‘ladi.

Biz esa, SQL bilan tanishuv doirasida uchta asosiy ma'lumot turini ko'rib chiqamiz:

  • Sonlar
  • Matnlar
  • Sanalar

SQLdagi Sonli Turlar

SQL tilida sonli turlar uchta guruhga bo'linadi:

  • Butun sonli turlar
  • Qatiy vergul bilan sonlar (verguldan keyin belgilangan raqamlar soni)
  • O'zgaruvchan vergul bilan sonlar

Butun sonlar bilan boshlaymiz. Ular jami 5 ta, va ularni bitta jadval bilan tasvirlash mumkin:

# Tur Nomi Baytlarda uzunligi Java'dan analog Minimal qiymat Maksimal qiymat
1 TINYINT 1 byte -128 127
2 SMALLINT 2 short -32,768 32,767
3 MEDIUMINT 3 -8,388,608 8,388,607
4 INT 4 int -2,147,483,648 2,147,483,647
5 BIGINT 8 long -263 263-1

Ma'lumot turlari Java'dagi ma'lumot turlariga juda o'xshaydi, ammo bu yerda yana uch baytli integer turi mavjud. Bu hajmdan tejash imkoniyati uchun shunday qilingan.

Keyingi, o'zgaruvchan vergul bilan turlar, Java'dagi kabi, ularni atigi ikki xil mavjud:

# Tur Nomi Baytlarda uzunligi Java'dan analog Minimal qiymat Maksimal qiymat
1 FLOAT 4 float -3.40E+38 +1.18E+38
2 DOUBLE 8 double -1.79E+308 +1.79E+308

Yana yangi narsa yo'q. Hamma narsa Java'dagi kabi. Ammo, Java'dan farqli o'laroq, SQLda DECIMAL deb nomlangan qatiy vergul bilan haqiqiy raqamli maxsus tur mavjud.

Odatda, bu tur pul miqdorini saqlash uchun ishlatiladi. Ushbu tur nomi yozilganda, undan keyin odatda raqamning vergul oldidan va verguldan keyingi o'ninchi raqamlar soni ko'rsatiladi. Umumiy format quyidagicha ko'rinadi:


DECIMAL(umumiy_rakamlar, verguldan_keyingi) 

Va kichik misol:


salary DECIMAL(5,2) 

Shunday qilib, biz ustun salary butun raqamlarni (verguldan oldin maksimum 3 raqam) va verguldan keyin 2 raqamli kasr qismini o'z ichiga olishi mumkinligini tasvirladik.

DECIMAL turi qo'llab-quvvatlaydigan maksimal raqamlar soni - 65.

SQLdagi Matnli Turlar

Ma'lumotlar bazasidagi satrlar ikki hil turda saqlanishi mumkin:

  • Qatiy uzunlikdagi satrlar
  • O'zgaruvchan uzunlikdagi satrlar

Qatiy uzunlikdagi satrlar CHAR turi bilan belgilanadi:


CHAR(uzunlik) 

Qatiy uzunlik bu ustundagi barcha qiymatlarning belgilangan sonini tarkib topganini anglatadi.

Qatiy uzunlikdagi satr misoli:


country_code CHAR(2) 

O'zgaruvchan uzunlikdagi satrlar VARCHAR turi bilan belgilanadi:


VARCHAR(maks_uzunlik) 

O'zgaruvchan uzunlik bu ustundagi barcha qiymatlar belgilar uzunligi har qanday bo'lishi mumkinligini, lekin maksimal uzunlikdan ko'p emasligini anglatadi.

O'zgaruvchan uzunlikdagi satr misoli:


phone VARCHAR(12) 

Qatiy uzunlikdagi satrlarda juda katta afzallik bor. Agar mijoz SQL-serverdan jadvaldagi 1,000,000-chi satrni qaytarib berishni so'rasa, va jadvalda qatiy uzunlikdagi satrlar bo'lsa, satr uzunligini bilgan holda, kerakli satrga tegishli baytlarni osongina hisoblash mumkin.

O'zgaruvchan uzunlikdagi satr holida, jadvaldagi kerakli satrni topish unchalik tez bo'lmaydi. ArrayList va LinkedList'ga kirish tezligini eslang, bu yerda taxminan shunga o'xshash vaziyat.

Turlariga qarab, jadvalda har xil uzunlikdagi satrlar qanday saqlanishini solishtiraylik.

Satr CHAR(4) Saqla uchun baytlar VARCHAR(4) Saqla uchun baytlar
'' ' ' 4 '' 1
'ab' 'ab ' 4 'ab' 3
'abcd' 'abcd' 4 'abcd' 5
'abcdefgh' 'abcd' 4 'abcd' 5

Eslatma. VARCHAR turi ham xuddi shu uzunlikda qo'shimcha bir bayt talab qiladi, chunki u satr uzunligini ham saqlashi kerak.

SQLdagi Vaqt Turlari

SQLda sana va vaqtni saqlash uchun maxsus turlar mavjud. Jami bunday turlar beshta:

# Tur Nomi Java DateTime API'dan analog Misol Minimal qiymat Maksimal qiymat
1 DATE LocalDate ‘2022-06-30’ ‘1000-01-01’ ‘9999-12-31’
2 TIME LocalTime 'hh:mm:ss[.fraction]' '-838:59:59.000000' '838:59:59.000000'
3 DATETIME LocalDateTime ‘1000-01-01 00:00:00.000000’ '9999-12-31 23:59:59.999999'
4 TIMESTAMP Date '1970-01-01 00:00:01.000000' '2038-01-19 03:14:07.999999'
5 YEAR 1901 2155

So'rovlar bo'yicha barcha ma'lumotlar satr ko'rinishida - bir tirnoqda yoziladi. Yozuv formati katta va kichik tartibda keladi:

  • Yil
  • Oy
  • Kuni
  • Soat
  • Daqiqa
  • Soniya
  • Soniyalar ulushi

DATE, TIME va DATETIME turlarini shartli ravishda Java DateTime API'dan olingan turlarning anologlari deb hisoblash mumkin: LocalDate, LocalTime, LocalDateTime. Mantiq deyarli bir xil.

TIMESTAMP turi ma'lumotlarni saqlaydi 1970 yildan boshlab o'tgan millisekundlarda (UNIX operatsion tizim standarti). Java tilidagi Date turi ularni xuddi shunday turda saqlaydi.

Nihoyat, 1 bayt uzunlikdagi, 1 dan 255 gacha bo'lgan qiymatlarni saqlaydigan YEAR turi mavjud. Shuning uchun, unga mavjud yil diapazoni - bu 1901-2155. 1900 yil bu tur saqlay olmaydi, chunki 0 qiymati NULL qiymatini kodlash uchun ishlatiladi.

SQLda Obyektlarni Saqlash

Obyekt yoki katta hajmdagi matnlarni saqlash uchun maxsus turlar mavjud. Biz ularni batafsil ko'rib chiqmaymiz, ammo ularni sanab o'taman:

# Tur Nomi Tavsif
1 TEXT Uzun matn saqlash uchun ishlatiladi. Ushbu maydon bo'yicha taqqoslash va saralashda faqat 100 ta birinchi belgi ishlatiladi.
2 BLOB Nomining to'liq ochilishi Byte Large Object. Faqatgina baytlar to'plami ko'rinishida saqlanadi. Misol uchun, ma'lumotlar bazasida suratlarni saqlash uchun ishlatilishi mumkin.
3 CLOB Nomining to'liq ochilishi Char Large Object. Uzun matn saqlash uchun ishlatiladi.
4 ENUM Chiqirilgan qiymatlarning belgilangan to'plamini belgilash va qiymat sifatida ulardan birini saqlash imkonini beradi.
5 SET Chiqirilgan qiymatlarning belgilangan to'plamini belgilash va qiymat sifatida ularni bir qismi to'plamini saqlash imkonini beradi. Odatda ular binary maska ko'rinishida saqlanadi.

Nazariyani o'ylab ko'r, har qanday Java obyektini baytlar to'plami ko'rinishida seriyalab, BLOB turiga ma'lumotlar bazasida saqlashing mumkin. Obyektni saqlash - muammo emas. Bunga qanday ishlov berish kerak?

Faraz qilaylik, jadvalda million obyekt seriyalangan holda saqlanmoqda - ularni qanday qilib qidirib topa olasan? Ma'lum bir ma'lumot turini qo'llab-quvvatlayotgan DBMS, u bilan ishlash uchun keng funktsiyalar to'pini taqdim etgandagina mavjuddir.

Izohlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION