Pengenalan kepada Jenis Data dalam SQL
Tidak seperti JavaScript, SQL mempunyai penaipan yang kuat. Dalam setiap jadual, setiap lajur mempunyai jenis data tetapnya sendiri.
Terdapat banyak jenis data, tetapi tidak seperti bahasa Java, terdapat begitu banyak jenis data bukan kerana terdapat jenis data untuk semua keadaan. Pangkalan data sangat bergantung pada saiz data, jadi banyak jenis data berbeza antara satu sama lain hanya panjangnya.
Secara keseluruhan, jenis data boleh dibahagikan kepada 5 kumpulan:
- Jenis angka
- Jenis rentetan
- Jenis untuk menyimpan tarikh dan masa
- Objek: biasanya diwakili sebagai koleksi bait
- Pengangkutan : JSON dan XML
Biasanya DBMS yang berbeza masih mempunyai jenis data mereka sendiri. Setiap DBMS mempunyai pengkhususan sendiri, jadi menambah jenis data baharu adalah perkara yang sangat biasa.
Perkara lain ialah hanya menambah jenis data baharu tidak mencukupi, anda perlu menambah fungsi yang akan berfungsi dengannya, serta menjadikan kerja ini mudah dan pantas.
Jika anda bekerja pada mana-mana DBMS perindustrian (perusahaan), kemungkinan besar anda perlu berurusan dengan jenis data dan fungsinya. Untuk apa yang diperlukan untuk membaca 2-5 buku yang bagus.
Sebagai sebahagian daripada perkenalan kami dengan SQL, kami akan mempertimbangkan tiga kumpulan utama jenis data:
- Nombor
- rentetan
- kurma
Jenis Numerik dalam SQL
Dalam SQL, jenis angka dibahagikan kepada tiga kumpulan:
- Jenis integer
- Nombor titik tetap (bilangan tempat perpuluhan tetap)
- Nombor titik terapung
Mari kita mulakan dengan integer . Terdapat hanya 5 daripada mereka, dan mereka boleh diterangkan dalam satu jadual:
# | Taip nama | Panjang dalam bait | Analog dari Jawa | Nilai minimum | Nilai maksimum |
---|---|---|---|---|---|
1 | TINYINT | 1 | bait | -128 | 127 |
2 | KECIL | 2 | pendek | -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 | BESAR | 8 | panjang | -2 63 | 2 63-1 |
Jenis data sangat serupa dengan jenis data Java, tetapi terdapat juga jenis integer yang panjangnya tiga bait. Ini dilakukan untuk menjimatkan saiz.
Seterusnya datang jenis titik terapung , seperti di Jawa, hanya terdapat dua daripadanya:
# | Taip nama | Panjang dalam bait | Analog dari Jawa | Nilai minimum | Nilai maksimum |
---|---|---|---|---|---|
1 | TERApung | 4 | terapung | -3.40E+38 | +1.18E+38 |
2 | BERGANDA | 8 | berganda | -1.79E+308 | +1.79E+308 |
Sekali lagi, tiada yang baru. Semuanya sama seperti di Jawa. Walau bagaimanapun, tidak seperti Java, SQL mempunyai satu lagi jenis khas, nombor nyata titik tetap. Ia dipanggil DECIMAL.
Biasanya jenis ini digunakan untuk menyimpan sejumlah wang. Apabila nama jenis ini ditulis, maka selepas itu biasanya ditunjukkan berapa banyak tempat perpuluhan nombor itu sebelum dan selepas titik perpuluhan. Format umum kelihatan seperti ini:
DECIMAL(total_characters, after_comma)
Dan contoh kecil:
salary DECIMAL(5,2)
Beginilah kami menerangkan hakikat bahawa lajur gaji boleh mengandungi integer (maksimum 3 tempat perpuluhan) dan bahagian pecahan - 2 tempat perpuluhan.
Bilangan maksimum aksara yang jenis DECIMAL menyokong ialah 65.
Jenis rentetan dalam SQL
Baris dalam pangkalan data boleh disimpan dalam dua bentuk:
- Rentetan panjang tetap
- Rentetan dengan panjang berubah-ubah
Rentetan panjang tetap ditentukan sebagai CHAR :
CHAR(length)
Panjang tetap bermakna semua nilai lajur ini akan mengandungi bilangan aksara yang tetap.
Contoh rentetan panjang tetap:
country_code CHAR(2)
Rentetan panjang boleh ubah ditentukan oleh jenis VARCHAR :
VARCHAR(max_length)
Panjang boleh ubah bermakna semua nilai lajur ini akan mengandungi teks dengan sebarang panjang, tetapi tidak melebihi panjang maksimum.
Contoh rentetan panjang berubah:
phone VARCHAR(12)
Rentetan panjang tetap mempunyai kelebihan yang sangat besar. Jika pelanggan meminta pelayan SQL untuk mengembalikan kepadanya baris ke-1,000,000 dari jadual, dan baris dalam jadual adalah panjang tetap, maka, mengetahui panjang baris, anda boleh mengira bait yang berkaitan dengan yang dikehendaki dengan mudah. barisan.
Dalam kes panjang garis yang berubah-ubah, ia tidak akan dapat mencari baris yang dikehendaki dengan cepat dalam jadual. Ingat kelajuan akses kepada ArrayList dan LinkedList, keadaannya lebih kurang sama di sini.
Mari kita bandingkan cara rentetan panjang yang berbeza akan disimpan dalam jadual, bergantung pada jenis data.
Talian | CHAR(4) | Byte untuk disimpan | VARCHAR(4) | Byte untuk disimpan | |
---|---|---|---|---|---|
'' | '' | 4 | '' | 1 | |
'ab' | 'ab' | 4 | 'ab' | 3 | |
'abcd' | 'abcd' | 4 | 'abcd' | 5 | |
'abcdefgh' | 'abcd' | 4 | 'abcd' | 5 |
Catatan. Jenis VARCHAR memerlukan satu bait lagi untuk panjang yang sama, kerana ia juga perlu menyimpan panjang rentetan.
Jenis sementara dalam SQL
SQL juga mempunyai jenis khas untuk menyimpan tarikh dan masa. Terdapat lima jenis secara keseluruhan:
# | Taip nama | Analog dari Java DateTime API | Contoh | Nilai minimum | Nilai maksimum |
---|---|---|---|---|---|
1 | TARIKH | LocalDate | '2022-06-30' | '1000-01-01' | '9999-12-31' |
2 | MASA | LocalTime | 'hh:mm:ss[.fraction]' | '-838:59:59.000000' | '838:59:59.000000' |
3 | MASA TARIKH | LocalDateTime | '1000-01-01 00:00:00.000000' | '9999-12-31 23:59:59.999999' | |
4 | STAMP MASA | Tarikh | '1970-01-01 00:00:01.000000' | '2038-01-19 03:14:07.999999' | |
5 | TAHUN | 1901 | 2155 |
Semua data dalam pertanyaan ditulis sebagai rentetan - dalam petikan tunggal. Format penyertaan bermula dari terbesar kepada terkecil:
- tahun
- bulan
- Hari
- Jam
- minit
- Kedua
- Pecahan sesaat
Jenis DATE, TIME dan DATETIME boleh dianggap sebagai analog daripada jenis daripada Java DateTme API: LocalDate, LocalTime, LocalDateTime. Logiknya lebih kurang sama.
Jenis TIMESTAMP menyimpan data dalam milisaat sejak awal tahun 1970 (standard sistem pengendalian UNIX). Dalam bentuk inilah ia disimpan mengikut jenis Tarikh dalam bahasa Java.
Dan akhirnya, terdapat jenis YEAR, iaitu 1 bait panjang dan menyimpan nilai dari 1 hingga 255. Oleh itu, julat tahun yang tersedia untuknya ialah 1901-2155. Tahun 1900 tidak boleh disimpan oleh jenis ini, kerana nilai 0 digunakan untuk mengekod nilai NULL.
Menyimpan objek dalam SQL
Terdapat jenis khas untuk menyimpan objek atau teks dengan panjang lebar. Kami tidak akan menjelaskannya secara terperinci, tetapi saya akan menyenaraikannya juga:
# | Taip nama | Penjelasan |
---|---|---|
1 | TEKS | Digunakan untuk menyimpan teks yang panjang. Apabila membandingkan dan mengisih pada medan ini, hanya 100 aksara pertama digunakan. |
2 | BLOB | Nama itu bermaksud Byte Large Object. Disimpan sebagai hanya koleksi bait. Boleh digunakan untuk, contohnya, menyimpan gambar dalam pangkalan data. |
3 | CLOB | Nama itu bermaksud Char Large Object. Digunakan untuk menyimpan teks yang panjang. |
4 | ENUM | Membolehkan anda menetapkan set nilai tetap dan menyimpan salah satu daripadanya sebagai nilai. |
5 | SET | Membolehkan anda menetapkan set nilai tetap dan menyimpan mana-mana subset daripadanya sebagai nilai. Biasanya menyimpannya sebagai topeng binari. |
Secara teorinya, anda boleh menyerikan mana-mana objek Java sebagai satu set bait dan menyimpannya dalam pangkalan data sebagai BLOB. Menyimpan objek tidak menjadi masalah. Bagaimana untuk bekerja dengannya lebih jauh?
Katakan jadual menyimpan sejuta objek dalam bentuk bersiri - bagaimana anda akan mencari melaluinya? DBMS hanya menyokong jenis data tertentu apabila ia menyediakan set fungsi yang luas untuk bekerja dengannya.
GO TO FULL VERSION