Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Pengantar Tipe Data SQL

Memilih tipe data yang tepat untuk kolom tabel adalah keputusan penting. Ini mengurangi kebutuhan untuk konversi tipe data, meningkatkan kinerja kueri database, dan meminimalkan persyaratan penyimpanan.

Dalam panduan ini, Anda menjelajahi berbagai tipe data yang digunakan dalam sistem manajemen basis data relasional (RDBMS). Tipe data ini dapat digunakan saat membuat atau mengubah tabel, atau saat mendeklarasikan variabel dalam prosedur tersimpan database. Beberapa RDBMS yang terkenal adalah MySQL dan PostgreSQL.

Tipe Data Biner SQL

Untuk menyimpan data biner (0 atau 1 ), Anda menggunakan BINARY dan VARBINARY tipe data. BINARY tipe data menyimpan data biner dengan panjang tetap, sedangkan VARBINARY menyimpan data biner dengan panjang variabel. Kedua tipe data ini digunakan untuk menyimpan string bit (0 's dan 1 's). Nilainya ditetapkan dan diambil menggunakan representasi heksadesimal, yang ditunjukkan dengan awalan 0x . Kolom (atau variabel) dari kedua Binary dan VarBinary tipe data digunakan untuk menyimpan konten file gambar seperti JPEG, BMP, file dokumen, dll.

Misalnya, untuk nilai desimal 63 , nilai heksadesimalnya diwakili oleh 0x3F dan ekuivalen string bit binernya adalah 111111 . Untuk memahami nilai string biner ini dan cara penyimpanannya, perhatikan contoh di bawah ini:

Catatan Kecuali disebutkan sebaliknya, semua perintah database yang ditunjukkan dalam panduan ini berfungsi dengan baik di MySQL dan PostgreSQL .
  1. Dari baris perintah, buat tabel bernama BinaryExample seperti yang ditunjukkan di bawah ini:

     CREATE TABLE BinaryExample (
       BinaryCol BINARY (10),
       VarBinaryCol VARBINARY (10)
     );
    
  2. Masukkan baris ke dalam BinaryExample tabel:

     INSERT INTO BinaryExample (BinaryCol, VarBinaryCol)
     VALUES (0x4D7953514C, 0x39274D);
    
  3. Pilih data dari BinaryExample tabel:

     SELECT BinaryCol, VarBinaryCol FROM BinaryExample;
    

    Outputnya terlihat sebagai berikut:

    +------------------------+----------------------------+
    | BinaryCol              | VarBinaryCol               |
    +------------------------+----------------------------+
    | 0x4D7953514C0000000000 | 0x39274D                   |
    +------------------------+----------------------------+

Seperti yang Anda lihat, BinaryCol data diisi ke ukuran kolom maksimum dengan nol di belakang, tetapi VarBinaryCol kolom data tidak. Ini karena kolom VarBinaryCol didefinisikan sebagai panjang variabel.

Catatan Ukuran maksimum (panjang) tipe data Binary dan VarBinary bervariasi tergantung pada implementasi database. Mereka umumnya cukup besar (lebih dari 8.000 byte). Beberapa implementasi database memiliki ekstensi biner untuk tipe data inti ini yang dapat menyimpan data dalam ukuran multi-gigabyte.

Tipe Data Numerik SQL

Tipe data numerik yang tersedia dapat dipecah menjadi grup berikut:Tipe data numerik bilangan bulat, Tipe data numerik tepat, dan Tipe data numerik perkiraan. Bagian di bawah ini membahas setiap kelompok.

Tipe Data Numerik Integer

Tipe data integer dapat Unsigned dan Signed. Tidak ditandatangani hanya dapat menyimpan angka nol dan positif, sedangkan Ditandatangani memungkinkan angka nol, positif, dan negatif.

Sebagian besar implementasi SQL mendukung tipe data Integer INT , SMALLINT , dan TINYINT untuk penyimpanan bilangan bulat positif dan negatif. Tipe data numerik bilangan bulat yang Anda pilih bergantung pada rentang nilai yang perlu Anda simpan.

Tabel berikut menampilkan penyimpanan yang diizinkan dalam byte untuk tipe data numerik bilangan bulat, dan nilai SIGNED minimum dan maksimumnya.

Type Penyimpanan (byte) Nilai Minimum DITANDATANGANI Nilai Maksimum DITANDATANGANI
INT 4 minus 2^31 (-2147483648) plus 2^31 (2147483647)
SMALLINT 2 minus 2^15 (-32768) plus 2^15 (32767)
TINYINT 1 -128 127

Contoh di bawah ini menunjukkan nilai bertanda tangan minimum dan maksimum dari tipe data numerik bilangan bulat menggunakan tabel bernama NumericExample .

  1. Dari baris perintah, buat NumericExample tabel.

     CREATE TABLE NumericExample (
       IntColumn INT,
       SmallIntColumn SMALLINT,
       TinyIntColumn TINYINT
     );
    
  2. Masukkan nilai berikut ke dalam NumericExample tabel.

     INSERT INTO NumericExample (IntColumn, SmallIntColumn, TinyIntColumn)
     VALUES (3258594758, 32767, 255);
    

    Saat Anda menjalankan perintah di atas, Anda mendapatkan Out of range kesalahan seperti yang ditunjukkan pada output di bawah ini. Anda tidak dapat memasukkan nilai 3258594758 dan 255 ke IntColumn dan TinyIntColumn masing-masing. Ini karena nilai SIGNED maksimum untuk tipe data integer adalah 2147483647 dan TinyInt adalah 127 .

    ERROR 1264 (22003): Out of range value for column 'IntColumn' at row 1
  3. Perbarui nilai IntColumn dan TinyIntColumn kolom dan jalankan kembali INSERT perintah.

     INSERT INTO NumericExample (IntColumn, SmallIntColumn, TinyIntColumn)
     VALUES (2147483647, 32767, 127);
    
  4. Ambil nilai kolom menggunakan SELECT pernyataan:

     SELECT IntColumn, SmallIntColumn, TinyIntColumn
     FROM NumericExample;
    

    Outputnya seperti contoh di bawah ini:

    +------------+----------------+---------------+
    | IntColumn  | SmallIntColumn | TinyIntColumn |
    +------------+----------------+---------------+
    | 2147483647 |          32767 |           127 |
    +------------+----------------+---------------+

Tipe Data Numerik Desimal (Numerik Persis)

Tipe data Desimal, DECIMAL dan NUMERIC , menyimpan nilai numerik yang tepat dan tetap. Tipe data ini juga dikenal sebagai numerik tepat tipe data. Mereka menyimpan nilai integer di sebelah kiri titik desimal dan nilai pecahan di sebelah kanan titik desimal. Mereka secara fungsional setara dengan persyaratan penyimpanan yang sama. Penyimpanan yang digunakan untuk jenis ini tergantung pada presisi dan rentang yang ditentukan. Mereka dapat berkisar dari 2 byte hingga 17 byte, dan nilainya dapat berkisar dari -10^38 +1 ke +10^38 -1 .

Kedua tipe data ini ditentukan oleh presisi dan skala . Presisi menunjukkan jumlah tempat di sebelah kiri dan kanan titik desimal yang digabungkan, sedangkan skala menunjukkan jumlah total digit di sebelah kanan titik desimal. Kedua tipe data ini dibuat menggunakan sintaks berikut:

DECIMAL(precision, scale)

atau

NUMERIC(precision,scale)

Contoh di bawah ini menunjukkan cara membuat dan menggunakan tipe data numerik desimal.

  1. Dari baris perintah, buat ExactNumericExample tabel.

     CREATE TABLE ExactNumericExample (
       DecimalCol DECIMAL(5,2),
       NumericCol NUMERIC(7,2)
     );
    
  2. Masukkan nilai berikut ke dalam ExactNumericExample tabel.

     INSERT INTO ExactNumericExample (DecimalCol, NumericCol)
     VALUES (123.45, 12345.67);
    
  3. Ambil nilai kolom menggunakan SELECT pernyataan:

     SELECT DecimalCol, NumericCol FROM ExactNumericExample;
    

    Outputnya seperti berikut:

    +------------+------------+
    | DecimalCol | NumericCol |
    +------------+------------+
    |     123.45 |   12345.67 |
    +------------+------------+

Tipe Data Numerik Floating Point (Perkiraan Numerik)

Tipe data numerik floating point adalah FLOAT dan REAL . Mereka juga disebut angka perkiraan tipe data. Tipe data ini menyimpan nilai perkiraan karena representasi biner dari data floating point. Sintaks untuk membuat kolom atau variabel floating point adalah sebagai berikut:

Float(N)

Parameter N menunjukkan apakah bidang harus menampung empat atau delapan byte. Nilai N lebih besar dari tujuh membutuhkan delapan byte; tujuh atau kurang membutuhkan empat byte. Presisi mengambang untuk tipe data ini berkisar dari -1.79E + 308 ke 1.79E + 308 .

Demikian pula, kolom dan variabel yang didefinisikan sebagai tipe data REAL membutuhkan empat byte penyimpanan, dan menyediakan rentang nilai dari -3.40E + 38 ke 3.40E + 38 .

Tipe Data Karakter SQL

Tipe data CHAR dan VARCHAR digunakan untuk menyimpan data karakter dengan panjang hingga 8.000 byte. Kedua tipe data ini menyimpan nilai string dalam kolom database, tetapi berbeda dalam cara nilai disimpan dan diambil. Panjang CHAR tipe data tetap pada panjang yang ditentukan apakah ruang alokasi itu digunakan atau tidak. Jika ruang tidak digunakan, kolom atau variabel diisi dengan spasi tambahan. VARCHAR menampilkan nilai apa adanya, tanpa spasi tambahan.

Contoh di bawah ini menunjukkan tipe data karakter.

  1. Dari baris perintah, buat Employee tabel.

     CREATE TABLE Employee (
         LastName VARCHAR(25),
         FirstName VARCHAR(20),
         Sex CHAR(1)
     );
    
  2. Masukkan nilai berikut ke dalam Employee tabel.

     INSERT INTO Employee (LastName, FirstName, Sex)
     VALUES ('Jones', 'Mary', 'F');
    
  3. Ambil nilai kolom menggunakan SELECT pernyataan:

     SELECT LastName, FirstName, Sex FROM Employee;
    

    Outputnya akan seperti berikut:

    +----------+-----------+------+
    | LastName | FirstName | Sex  |
    +----------+-----------+------+
    | Jones    | Mary      | F    |
    +----------+-----------+------+

Kolom LastName dan Firstname dideklarasikan sebagai tipe Varchar . Ini memungkinkan nama sepanjang definisi tipe data. Tetapi untuk nama yang lebih pendek dari maksimum yang ditentukan, tidak ada spasi kosong yang ditambahkan ke data dalam kolom ini.

Tipe Data Tanggal dan Waktu SQL

DATETIME Tipe data digunakan untuk menyimpan nilai tanggal dan waktu dalam database. Nilai untuk DATETIME tipe data menggunakan empat byte penyimpanan untuk bagian tanggal dan empat byte untuk bagian waktu. Porsi waktu dari tipe data ini menentukan waktu dengan perincian hingga jumlah milidetik setelah tengah malam. Presisi untuk tipe data ini berkisar dari “1 Januari 1753”, hingga “31 Desember 9999”, dengan akurasi 3,33 milidetik.

Catatan Jika Anda hanya menetapkan nilai tanggal ke DATETIME kolom atau variabel tipe data, porsi waktu default ke tengah malam.

Contoh di bawah ini menunjukkan DATETIME tipe data.

DELIMITER //
CREATE PROCEDURE Datetimedemo()
BEGIN
DECLARE BirthDate DATETIME
SET BirthDate = '1990-01-01 09:00:00'
SELECT BirthDate
END//
DELIMITER ;
call Datetimedemo;

Outputnya seperti berikut:

+----------+-----------+
| BirthDate            |
+----------+-----------+
| 1990-01-01 09:00:00  |
+----------+-----------+
Catatan Beberapa implementasi SQL mendukung tipe data tambahan, yang merupakan subset, superset, atau varian dari semua tipe data yang ditentukan di atas.

Pertimbangan Tipe Data SQL

Saat mendesain database, sangat penting untuk memilih tipe data yang sesuai untuk kolom tabel dan variabel prosedur tersimpan dengan hati-hati.

Pilihan yang dibuat dapat berdampak signifikan pada efisiensi penyimpanan dan kinerja database secara keseluruhan. Contoh sederhana adalah untuk menentukan Age seseorang kolom menjadi Tinyint tipe data, sebagai lawan dari Int tipe data. Ini karena alasan berikut:

  1. Seperti disebutkan sebelumnya, Tinyint tipe data memiliki persyaratan penyimpanan Int tipe data.
  2. Efisiensi pengambilan Tinyint kolom versus Int kolom jauh lebih besar.

Di permukaan, ini mungkin tidak menjadi perhatian besar. Namun, jika tabel yang terpengaruh memiliki jutaan baris di dalamnya, baik penyimpanan, maupun efisiensi kinerja pasti dapat dicapai. Jika Anda memperluas kriteria desain ini di seluruh database, Anda dapat menghasilkan efisiensi ini berdasarkan urutan besarnya.

Menghabiskan waktu desain yang diperlukan dalam pemilihan tipe data database berpotensi mengurangi kebutuhan untuk melakukan konversi tipe yang mahal dalam kueri dan logika prosedur tersimpan, saat membandingkan kolom dari tipe data yang berbeda.

Misalnya, dalam satu tabel, Anda menyimpan tanggal dalam Varchar(20) kolom, dan di tabel lain Anda menyimpan tanggal dalam Datetime kolom. Jika Anda perlu membandingkan dua kolom, Anda harus menggunakan fungsi konversi tipe data dalam kueri di salah satu dari dua kolom. Ini adalah operasi yang mahal.

Kesimpulan

Tipe Data SQL adalah atribut yang terkait dengan kolom dan variabel database. Atribut ini dapat berbentuk biner, numerik, karakter, dan tanggal/waktu. Waktu desain yang cermat diperlukan untuk memastikan bahwa kolom dan variabel didefinisikan dengan tipe data yang benar, untuk memastikan efisiensi penyimpanan dan eksekusi kueri.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Menghitung jarak antara kode pos di PHP

  2. Cara membuat cadangan database MySQL menggunakan AutoMySQLBackup

  3. Kesalahan mysql 1452 - Tidak dapat menambah atau memperbarui baris anak:batasan kunci asing gagal

  4. Bagaimana Memperbaiki Kesalahan Koneksi Database MySQL JDBC 08001

  5. (mysql, php) Bagaimana cara mendapatkan nilai bidang auto_increment sebelum memasukkan data?