Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Giới thiệu về các kiểu dữ liệu SQL

Chọn kiểu dữ liệu thích hợp cho một cột trong bảng là một quyết định quan trọng. Nó làm giảm nhu cầu chuyển đổi kiểu dữ liệu, nâng cao hiệu suất của các truy vấn cơ sở dữ liệu và giảm thiểu các yêu cầu lưu trữ.

Trong hướng dẫn này, bạn khám phá các kiểu dữ liệu khác nhau được sử dụng trong hệ thống quản lý cơ sở dữ liệu quan hệ (RDBMS). Các kiểu dữ liệu này có thể được sử dụng khi tạo hoặc thay đổi bảng, hoặc khi khai báo các biến trong các thủ tục được lưu trữ trong cơ sở dữ liệu. Một số RDBMS nổi tiếng là MySQL và PostgreSQL.

Kiểu dữ liệu nhị phân của SQL

Để lưu trữ dữ liệu nhị phân (0 hoặc 1 ), bạn sử dụng BINARYVARBINARY Loại dữ liệu. BINARY kiểu dữ liệu lưu trữ dữ liệu nhị phân có độ dài cố định, trong khi VARBINARY lưu trữ dữ liệu nhị phân có độ dài thay đổi. Cả hai kiểu dữ liệu này đều được sử dụng để lưu trữ các chuỗi bit (0 Của và 1 'S). Giá trị của chúng được gán và truy xuất bằng cách sử dụng biểu diễn thập lục phân, được biểu thị bằng tiền tố 0x . Các cột (hoặc biến) của cả BinaryVarBinary kiểu dữ liệu được sử dụng để lưu trữ nội dung của tệp hình ảnh như JPEG, BMP, tệp tài liệu, v.v.

Ví dụ:đối với giá trị thập phân của 63 , giá trị thập lục phân của nó được biểu thị bằng 0x3F và chuỗi bit nhị phân tương đương của nó là 111111 . Để hiểu giá trị của các chuỗi nhị phân này và cách chúng được lưu trữ, hãy xem xét ví dụ bên dưới:

Lưu ý Trừ khi được đề cập khác, tất cả các lệnh cơ sở dữ liệu được trình bày trong hướng dẫn này hoạt động tốt trên cả MySQL PostgreSQL .
  1. Từ dòng lệnh, tạo một bảng có tên BinaryExample như hình dưới đây:

     CREATE TABLE BinaryExample (
       BinaryCol BINARY (10),
       VarBinaryCol VARBINARY (10)
     );
    
  2. Chèn một hàng vào BinaryExample bảng:

     INSERT INTO BinaryExample (BinaryCol, VarBinaryCol)
     VALUES (0x4D7953514C, 0x39274D);
    
  3. Chọn dữ liệu từ BinaryExample bảng:

     SELECT BinaryCol, VarBinaryCol FROM BinaryExample;
    

    Đầu ra trông như sau:

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

Như bạn có thể thấy, BinaryCol dữ liệu được đệm đến kích thước cột tối đa với các số không ở cuối, nhưng VarBinaryCol cột dữ liệu không. Điều này là do các cột của VarBinaryCol được định nghĩa là độ dài thay đổi.

Lưu ý Kích thước (độ dài) tối đa của kiểu dữ liệu Binary và VarBinary khác nhau tùy thuộc vào việc triển khai cơ sở dữ liệu. Chúng thường khá lớn (hơn 8.000 byte). Một số triển khai cơ sở dữ liệu có phần mở rộng nhị phân cho các kiểu dữ liệu cốt lõi này có thể lưu trữ dữ liệu ở kích thước nhiều gigabyte.

Kiểu dữ liệu số trong SQL

Các kiểu dữ liệu Số có sẵn có thể được chia thành các nhóm sau:Kiểu dữ liệu số nguyên, Kiểu dữ liệu số chính xác và Kiểu dữ liệu số gần đúng. Các phần bên dưới thảo luận về từng nhóm.

Kiểu dữ liệu số nguyên

Các kiểu dữ liệu số nguyên có thể là Chưa ký và Đã ký. Chưa ký chỉ có thể lưu trữ số 0 và số dương, trong khi Đã ký cho phép số 0, số dương và số âm.

Hầu hết các triển khai SQL hỗ trợ kiểu dữ liệu Số nguyên của INT , SMALLINTTINYINT để lưu trữ các số nguyên dương và âm. Kiểu dữ liệu số nguyên mà bạn chọn tùy thuộc vào phạm vi giá trị mà bạn cần lưu trữ.

Bảng sau đây hiển thị dung lượng lưu trữ được phép tính bằng byte cho các kiểu dữ liệu số nguyên và các giá trị SIGNED tối thiểu và tối đa của chúng.

Loại Dung lượng (byte) Giá trị Tối thiểu ĐÃ ĐĂNG KÝ Giá trị tối đa ĐÃ ĐĂNG KÝ
INT 4 trừ 2 ^ 31 (-2147483648) plus 2 ^ 31 (2147483647)
SMALLINT 2 trừ 2 ^ 15 (-32768) plus 2 ^ 15 (32767)
TINYINT 1 -128 127

Ví dụ bên dưới minh họa các giá trị có dấu tối thiểu và tối đa của các kiểu dữ liệu Số nguyên bằng cách sử dụng bảng có tên NumericExample .

  1. Từ dòng lệnh, tạo NumericExample bảng.

     CREATE TABLE NumericExample (
       IntColumn INT,
       SmallIntColumn SMALLINT,
       TinyIntColumn TINYINT
     );
    
  2. Chèn các giá trị sau vào NumericExample bảng.

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

    Khi bạn thực hiện lệnh trên, bạn nhận được Out of range như được hiển thị trong đầu ra bên dưới. Bạn không thể chèn các giá trị 3258594758255 thành IntColumnTinyIntColumn tương ứng. Điều này là do giá trị SIGNED tối đa cho kiểu dữ liệu số nguyên là 2147483647 và của TinyInt là 127 .

    ERROR 1264 (22003): Out of range value for column 'IntColumn' at row 1
  3. Cập nhật các giá trị của IntColumnTinyIntColumn và chạy lại INSERT lệnh.

     INSERT INTO NumericExample (IntColumn, SmallIntColumn, TinyIntColumn)
     VALUES (2147483647, 32767, 127);
    
  4. Truy xuất các giá trị cột bằng cách sử dụng SELECT tuyên bố:

     SELECT IntColumn, SmallIntColumn, TinyIntColumn
     FROM NumericExample;
    

    Đầu ra giống với ví dụ dưới đây:

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

Kiểu dữ liệu số thập phân (Số chính xác)

Các kiểu dữ liệu thập phân, DECIMALNUMERIC , lưu trữ các giá trị số chính xác và cố định. Những loại dữ liệu này còn được gọi là số chính xác Loại dữ liệu. Chúng lưu trữ một giá trị số nguyên ở bên trái dấu thập phân và một giá trị phân số ở bên phải dấu thập phân. Chúng tương đương về mặt chức năng với các yêu cầu lưu trữ giống nhau. Việc lưu trữ được sử dụng cho các loại này phụ thuộc vào độ chính xác và phạm vi được chỉ định. Chúng có thể nằm trong khoảng từ 2 byte đến 17 byte và giá trị của chúng có thể nằm trong khoảng từ -10^38 +1 thành +10^38 -1 .

Hai loại dữ liệu này được xác định bằng độ chính xác và một quy mô . Độ chính xác biểu thị số vị trí ở bên trái và bên phải của dấu thập phân được kết hợp, trong khi tỷ lệ biểu thị tổng số chữ số ở bên phải của dấu thập phân. Hai kiểu dữ liệu này được tạo bằng cú pháp sau:

DECIMAL(precision, scale)

hoặc

NUMERIC(precision,scale)

Ví dụ dưới đây trình bày cách tạo và sử dụng kiểu dữ liệu số thập phân.

  1. Từ dòng lệnh, tạo ExactNumericExample bảng.

     CREATE TABLE ExactNumericExample (
       DecimalCol DECIMAL(5,2),
       NumericCol NUMERIC(7,2)
     );
    
  2. Chèn các giá trị sau vào ExactNumericExample bảng.

     INSERT INTO ExactNumericExample (DecimalCol, NumericCol)
     VALUES (123.45, 12345.67);
    
  3. Truy xuất các giá trị cột bằng cách sử dụng SELECT tuyên bố:

     SELECT DecimalCol, NumericCol FROM ExactNumericExample;
    

    Đầu ra giống như sau:

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

Kiểu dữ liệu số bằng dấu chấm động (Số gần đúng)

Các kiểu dữ liệu số dấu phẩy động là FLOATREAL . Chúng còn được gọi là số gần đúng Loại dữ liệu. Các kiểu dữ liệu này lưu trữ một giá trị gần đúng do biểu diễn nhị phân của dữ liệu dấu phẩy động. Cú pháp để tạo cột hoặc biến dấu phẩy động như sau:

Float(N)

Tham số N cho biết liệu trường nên giữ bốn hay tám byte. Giá trị N lớn hơn bảy yêu cầu tám byte; bảy hoặc ít hơn yêu cầu bốn byte. Độ chính xác nổi cho kiểu dữ liệu này nằm trong khoảng từ -1.79E + 308 thành 1.79E + 308 .

Tương tự, một cột và biến được xác định là kiểu dữ liệu REAL chiếm bốn byte dung lượng lưu trữ và cung cấp một loạt giá trị từ -3.40E + 38 thành 3.40E + 38 .

Kiểu dữ liệu ký tự SQL

Các kiểu dữ liệu CHARVARCHAR được sử dụng để lưu trữ dữ liệu ký tự có độ dài lên đến 8.000 byte. Cả hai kiểu dữ liệu này đều lưu trữ các giá trị chuỗi trong các cột cơ sở dữ liệu, nhưng chúng khác nhau về cách các giá trị của chúng được lưu trữ và truy xuất. Độ dài của CHAR kiểu dữ liệu vẫn cố định ở độ dài được chỉ định cho dù không gian cấp phát đó có được sử dụng hay không. Nếu không gian không được sử dụng, cột hoặc biến sẽ được chèn thêm khoảng trắng. VARCHAR xuất ra giá trị như nó vốn có mà không có thêm khoảng trắng nào.

Ví dụ dưới đây minh họa kiểu dữ liệu ký tự.

  1. Từ dòng lệnh, tạo Employee bảng.

     CREATE TABLE Employee (
         LastName VARCHAR(25),
         FirstName VARCHAR(20),
         Sex CHAR(1)
     );
    
  2. Chèn các giá trị sau vào Employee bảng.

     INSERT INTO Employee (LastName, FirstName, Sex)
     VALUES ('Jones', 'Mary', 'F');
    
  3. Truy xuất các giá trị cột bằng cách sử dụng SELECT tuyên bố:

     SELECT LastName, FirstName, Sex FROM Employee;
    

    Đầu ra giống như sau:

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

Các cột LastNameFirstname được khai báo kiểu Varchar . Điều này cho phép các tên dài như định nghĩa kiểu dữ liệu. Nhưng đối với các tên ngắn hơn giá trị tối đa đã chỉ định, không có khoảng trống nào được thêm vào dữ liệu trong các cột này.

Kiểu dữ liệu ngày và giờ trong SQL

DATETIME kiểu dữ liệu được sử dụng để lưu trữ các giá trị ngày và giờ trong cơ sở dữ liệu. Giá trị cho DATETIME kiểu dữ liệu sử dụng bốn byte bộ nhớ cho phần ngày và bốn byte cho phần thời gian. Phần thời gian của loại dữ liệu này chỉ định thời gian với mức độ chi tiết xuống đến số mili giây sau nửa đêm. Độ chính xác cho loại dữ liệu này nằm trong khoảng từ “ngày 1 tháng 1 năm 1753” đến “ngày 31 tháng 12 năm 9999”, với độ chính xác là 3,33 mili giây.

Lưu ý Nếu bạn chỉ gán giá trị ngày cho DATETIME cột hoặc biến kiểu dữ liệu, phần thời gian được mặc định là nửa đêm.

Ví dụ dưới đây minh họa DATETIME kiểu dữ liệu.

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

Đầu ra giống như sau:

+----------+-----------+
| BirthDate            |
+----------+-----------+
| 1990-01-01 09:00:00  |
+----------+-----------+
Lưu ý Một số triển khai SQL hỗ trợ các kiểu dữ liệu bổ sung, là một tập hợp con, tập hợp con hoặc biến thể của tất cả các kiểu dữ liệu được chỉ định ở trên.

Các vấn đề cần cân nhắc về kiểu dữ liệu SQL

Khi thiết kế cơ sở dữ liệu, điều cực kỳ quan trọng là phải lựa chọn cẩn thận các kiểu dữ liệu thích hợp cho các cột bảng và các biến thủ tục được lưu trữ.

Các lựa chọn được thực hiện có thể có tác động đáng kể đến hiệu quả lưu trữ và hiệu suất cơ sở dữ liệu tổng thể. Một ví dụ đơn giản là xác định Age của một người thuộc về Tinyint kiểu dữ liệu, trái ngược với Int loại dữ liệu. Điều này là do những lý do sau:

  1. Như đã lưu ý trước đó, Tinyint kiểu dữ liệu có ¼ yêu cầu lưu trữ của Int kiểu dữ liệu.
  2. Hiệu quả truy xuất của Tinyint so với cột Int lớn hơn nhiều.

Bề ngoài, điều này có vẻ không đáng lo ngại. Tuy nhiên, nếu bảng bị ảnh hưởng có hàng triệu hàng trong đó, thì chắc chắn có thể đạt được cả hiệu suất lưu trữ và hiệu suất. Nếu bạn mở rộng tiêu chí thiết kế này trên toàn bộ cơ sở dữ liệu, bạn có thể tạo ra những hiệu quả này theo cấp độ lớn.

Dành thời gian thiết kế cần thiết để lựa chọn kiểu dữ liệu cơ sở dữ liệu có thể giảm thiểu nhu cầu thực hiện chuyển đổi kiểu đắt tiền trong các truy vấn và logic thủ tục được lưu trữ, khi so sánh các cột của các kiểu dữ liệu khác nhau.

Ví dụ:trong một bảng, bạn lưu trữ ngày trong Varchar(20) và trong một bảng khác, bạn lưu trữ một ngày trong Datetime cột. Nếu bạn cần so sánh hai cột, bạn phải sử dụng hàm chuyển đổi kiểu dữ liệu trong truy vấn trên một trong hai cột. Đây là một hoạt động tốn kém.

Kết luận

Kiểu dữ liệu SQL là các thuộc tính được liên kết với các cột và biến cơ sở dữ liệu. Các thuộc tính này có thể ở dạng nhị phân, số, ký tự và ngày / giờ. Thời gian thiết kế cẩn thận là cần thiết để đảm bảo rằng các cột và biến được xác định với kiểu dữ liệu chính xác, nhằm đảm bảo cả hiệu quả lưu trữ và thực thi truy vấn.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kết nối với máy chủ MySQL từ xa bằng PHP

  2. Sự khác biệt giữa cơ sở dữ liệu SQL &NoSQL - So sánh MySQL &MongoDB

  3. Sử dụng Cơ sở dữ liệu quan hệ MySQL trên Ubuntu 9.04 (Jaunty)

  4. Truy vấn được tham số hóa cho MySQL với C #

  5. Cách kiểm tra trạng thái máy chủ trong MySQL Workbench bằng GUI