Dữ liệu và cấu trúc trong MySQL
Xem thêm các chuyên mục:

Là một website được viết trên công nghệ web Flutter vì vậy hỗ trợ rất tốt cho người học, kể cả những người học khó tính nhất.
Hiện tại website đang tiếp tục được cập nhập nội dung cho phong phú và đầy đủ hơn. Mong các bạn nghé thăm và ủng hộ website mới của chúng tôi.


Kiểu dữ liệu | Độ dài (số byte) |
Giá trị nhỏ nhất (Có dấu) |
Giá trị lớn nhất (Có dấu) |
Giá trị nhỏ nhất (Không dấu) |
Giá trị lớn nhất (Không dấu) |
---|---|---|---|---|---|
TINYINT | 1 | -128 | 127 | 0 | 255 |
SMALLINT | 2 | -32768 | 32767 | 0 | 65535 |
MEDIUMINT | 3 | -8388608 | 8388607 to | 0 | 16777215 |
INT | 4 | -2147483648 | 2147483647 | 0 | 4294967295 |
BIGINT | 8 | -9223372036854775808 | 92233720368 54775807 |
0 | 184467440737 09551615 |
Types | Description |
---|---|
FLOAT(M,D) | Một số chấm động (floating-point number) không thể không có dấu (unsigned). Bạn có thể định nghĩa độ dài phần nguyên (M) và độ dài phần thập phân (D). Điều này không bắt buộc và mặc định là 10,2, ở đây 10 là độ dài phần nguyên còn 2 là số số thập phân. Phần thập phân có thể sử dụng 24 vị trí cho một số FLOAT. |
DOUBLE(M,D) | Một số chấm động DOUBLE (Độ chính xác gấp 2) cũng không thể không có dấu (unsigned). Bạn có thể định nghĩa độ dài phần nguyên (M) và độ dài phần thập phân (D). Điều này không bắt buộc và mặc định là 16,4, ở đó 16 là độ dài phần nguyên còn 4 là độ dài phần thập phân. Phần thập phân có thể sử dụng tới 53 vị trí cho một số DOUBLE. REAL là một từ đồng nghĩa với DOUBLE. |
Following table shows the required storage and range (maximum and minimum value for signed and unsigned integer) for each floating-point type.
Kiểu dữ liệu | Độ dài (Số Bytes) |
Giá trị nhỏ nhất (Có dấu) |
Giá trị lớn nhất (Có dấu) |
Giá trị nhỏ nhất (Không dấu) |
Giá trị lớn nhất (Không dấu) |
---|---|---|---|---|---|
FLOAT | 4 | -3.402823466E+38 | -1.175494351E-38 | 1.175494351E-38 | 3.402823466E+38 |
DOUBLE | 8 | -1.7976931348623 157E+ 308 |
-2.22507385850720 14E- 308 |
0, and 2.22507385850720 14E- 308 |
1.797693134862315 7E+ 308 |
Trong SQL chuẩn, cú pháp DECIMAL(5,2) nghĩa là độ chính xác (precision) là 5, và 2 là phần thập phân (scale), nghĩa là nó có thể lưu trữ một giá trị có 5 chữ số trong đó có 2 số thập phân. Vì vậy giá trị lưu trữ sẽ là -999.99 tới 999.99. Cú pháp DECIMAL(M) tương đương với DECIMAL(M,0). Tương tự DECIMAL tương đương với DECIMAL(M,0) ở đây M mặc định là 10.
Độ dài tối đa các con số cho DECIMAL là 65.
Kiểu | Mô tả |
---|---|
TYPE(N) | Tại đây N là một số nguyên hiển thị chiều rộng cho kiểu độ dài lên đến N chữ số. |
ZEROFILL | Các khoảng đệm (padding) được thay thế bởi số 0. Ví dụ với cột kiểu INT(3) ZEROFILL, 7 sẽ hiển thị là 007. |
- TODO - Example
Kiểu dữ liệu | Mô tả | Định dạng hiển thị | Phạm vi |
---|---|---|---|
DATETIME | Sử dụng khi bạn cần giá trị lưu trữ cả hai thông tin ngày tháng và thời gian. | YYYY-MM-DD HH:MM:SS | '1000-01-01 00:00:00' to '9999-12-31 23:59:59'. |
DATE | Sử dụng khi bạn muốn lưu trữ chỉ thông tin ngày tháng. | YYYY-MM-DD | '1000-01-01' to '9999-12-31'. |
TIMESTAMP | Lưu trữ cả hai thông tin ngày tháng và thời gian. Giá trị này sẽ được chuyển đổi từ múi giờ hiện tại sang UTC trong khi lưu trữ, và sẽ chuyển trở lại múi giờ hiện tại khi lấy dữ liệu ra. | YYYY-MM-DD HH:MM:SS | '1970-01-01 00:00:01' UTC to '2038-01-19 03:14:07' UTC |
MySQL lấy và hiển thị thời gian theo định dạng ''HH:MM:SS'
(hoặc định dạng 'HHH:MM:SS'
đối với các giá trị giờ lớn). Giá trị của TIME
có thể trong khoảng '-838:59:59'
tới '838:59:59'
. Phần thời gian có thể lớn bởi vì kiểu TIME
có thể không chỉ mô tả thời gian của một ngày (Vốn chỉ có tối đa 24 giờ), mà nó có thể là thời gian trôi qua hoặc khoảng thời gian giữa hai sự kiện (Cái mà có thể lớn hơn 24h thậm trí có giá trị âm).
-- !!
SELECT
TIME_FORMAT(foo_hour, '%H:%i')
FROM bar
Kiểu dữ liệu YEAR được sử dụng 1-byte để mô tả giá trị.Nó có thể khai báo YEAR(2) hoặc YEAR(4) chỉ định rõ chiều rộng hiển thị là 2 hay 4 ký tự. Nếu không chỉ rõ chiều rộng mặc định là 4 ký tự.
YEAR(4) và YEAR(2) khác nhau định dạnh hiển thị nhưng có cùng phạm vi giá trị.
Với định dạng 4 số, MySQL hiển thị giá trị YEAR theo định dạng YYYY, với phạm vi 1901 tới 2155, hoặc 0000.
Với định dạng 2 số, MySQL chỉ hiển thị 2 số cuối; ví dụ 70 (1970 hoặc 2070) hoặc 69 (2069).
Bạn có thể chỉ định giá trị YEAR theo một vài định dạng khác nhau:
Độ dài chuỗi | Phạm vi |
---|---|
Chuỗi 4 con số | '1901' tới '2155'. |
Một số có 4 con số | 1901 tới 2155. |
Chuỗi 1 hoặc 2 chữ số | Giá trị từ '0' tới '99'. MySQL chuyển đổi '0' tới '69' tương đương với giá trị YEAR từ 2000-2069. Và '70' tới '99' tương đương với YEAR từ 1970 tới 1999. |
Một số có 1 hoặc 2 chữ số | Giá trị 1 từ 99. MySQL chuyển đổi giá trị từ 1 tới 69 tương đương với YEAR từ 2001 tới 2069. Và 70 tới 99 tương đương với YEAR từ 1970 tới 1999. |
Kiểu dữ liệu DATETIME được sử dụng khi bạn cần lưu trữ cả hai thông tin ngày tháng và thời gian.MySQL lấy và hiển thị DATETIME theo định dạng ‘YYYY-MM-DD HH:MM:SS’. Và hỗ trợ phạm vi từ '1000-01-01 00:00:00' tới '9999-12-31 23:59:59'.
Kiểu dữ liệu TIMESTAMP cũng được sử dụng khi bạn muốn lưu trữ cả hai thông tin ngày tháng và thời gian. TIMESTAMP có phạm vi '1970-01-01 00:00:01' UTC tới '2038-01-19 03:14:07' UTC
Sự khác biệt chính của DATETIME và TIMESTAMP là giá trị của TIMESTAMP được chuyển đổi từ múi giờ hiện tại sang UTC trong khi lưu trữ, và chuyển ngược trở lại từ UTC sang múi giờ hiện tại trong lúc lấy ra. Còn kiểu dữ liệu DATETIME thì không có gì thay đổi.
- CHAR
- VARCHAR
- BINARY
- VARBINARY
- BLOB
- TEXT
- ENUM
- SET.

Kiểu dữ liệu | Mô tả | Định dạng hiển thị | Phạm vi các ký tự |
---|---|---|---|
CHAR | Chứa chuỗi không phải nhị phân (non-binary strings). Độ dài là cố định như khi bạn khai báo cột của bảng. Khi lưu trữ chúng được độn thêm bên phải (right-padded) để có độ dài chỉ được chỉ định. | Khoảng trắng phía trước (Trailing spaces) được loại bỏ | Giá trị từ 0 tới 255 |
VARCHAR | Chứa các chuỗi không phải nhịn phân (non-binary strings). Cột là chuỗi có chiều dài thay đổi. | Giống như lưu trữ. | Giá trị từ 0 tới 255 với MySQL trước phiên bản 5.0.3. Và 0 tới 65,535 với các phiên bản MySQL 5.0.3 hoặc mới hơn. |
Kiểu dữ liệu | Mô tả | Phạm vi các bytes |
---|---|---|
BINARY | Chứa các chuỗi nhị phân (Binary Strings) | Giá trị từ 0 tới 255 |
VARBINARY | Chứa các chuỗi nhị phân (Binary Strings) | Giá trị từ 0 tới 255 đối với MySQL trước 5.0.3, và 0 tới 65,535 với MySQL 5.0.3 và mới hơn. |
Bốn loại TEXT là TINYTEXT, TEXT, MEDIUMTEXT, và LONGTEXT. Chúng ttương ứng với bốn loại BLOB và có độ dài tối đa và các yêu cầu lưu trữ tương tự.
Kiểu dữ liệu | Mô tả | Loại | Độ dài |
---|---|---|---|
BLOB | Đối tượng nhị phân lớn (Large binary object) chứa khối lượng dữ liệu lớn. Giá trị được xem như một chuỗi nhị phân. Bạn không cần thiết phải chỉ định độ dài khi tạo cột. | TINYBLOB | Chiều dài tối đa là 255 ký tự. |
MEDIUMBLOB | Chiều dài tối đa là 16777215 ký tự. | ||
LONGBLOB | Chiều dài tối đa là 4294967295 ký tự | ||
TEXT | Lưu trữ giá trị được coi như một chuỗi các ký tự có mã hóa (character set). | TINYBLOB | Chiều dài tối đa là 255 ký tự. |
MEDIUMBLOB | Chiều dài tối đa là 16777215 ký tự. | ||
LONGBLOB | Chiều dài tối đa là 4294967295 ký tự. |
Một đối tượng chuỗi có giá trị được chọn từ một danh sách các giá trị được đưa ra ở thời điểm tạo ra bảng. Ví dụ:
CREATE TABLE My_Table (
length ENUM('small', 'medium', 'large')
);
- TODO Example:
- DDL - Data Definition Language
- DML - Data Manipulation Language
- DCL - Data Control Language
- SELECT - Lấy dữ liệu từ một database
- INSERT - Trèn dữ liệu vào một bảng
- UPDATE - Cập nhập dữ liệu đang tồn tại trong bảng
- DELETE - Xóa các bản ghi trên bảng.
- MERGE - UPSERT Toán tử insert hoặc update
- CALL - Gọi thủ tục trong DB
- EXPLAIN PLAN - Giải thích đường dẫn truy cập dữ liệu
- LOCK TABLE - Điều khiển sự đồng thời (control concurrency).
- CREATE - Tạo các đối tượng trong databas
- ALTER - Sửa đổi cấu trúc của database
- DROP - Xóa các đối tượng trong database
- TRUNCATE - Xóa hết các bản ghi trong bảng, bao gồm cả các không gian được phân bổ cho các bản ghi đã xóa
- COMMENT - Thêm các chú thích vào từ điển dữ liệu (data dictionary).
- RENAME - Thay đổi tên của đối tượng.
-- Chú ý một bảng không nhất thiết phải có khóa chính.
-- Phải có dấu chấm phẩy cuối dòng lệnh.
CREATE TABLE <Table_Name> (
Column_Name_Id DataType [NOT NULL] [AUTO_INCREMENT] ,
Column_name2 DataType [NOT NULL] ,
......
Column_nameN DataType [NOT NULL] ,
Primary Key (Column_Name_Id)
);
Tại đây có một vài giải thích:
-
Thuộc tính NOT NULL được sử dụng nếu bạn không muốn trường này null. Như vậy nếu người dùng cố gắng trèn vào một bản ghi với dữ liệu NULL. MySQL sẽ ném ra một lỗi.
-
Thuộc tính AUTO_INCREMENT nói với MySQL tự gán giá trị tăng dần cho trường ID.
-
Từ khóa PRIMARY KEY được sử dụng để định nghĩa cột này là một khóa chính. Bạn có thể sử dụng nhiều cột ngăn cách nhau bởi dấu phẩy để định nghĩa một khóa chính.
Create Table Members (
Member_Id INT NOT NULL AUTO_INCREMENT,
Full_Name VARCHAR(64) NOT NULL,
Address VARCHAR(256),
Birth_Day DATE NOT NULL,
PRIMARY KEY (Member_Id)
);

ALTER TABLE <Table_Name>
Add <Column_Name> Data_Type [NOT NULL DEFAULT value];
-- Thêm cột Address2 có kiểu dữ liệu Varchar2(256)
ALTER TABLE Members ADD Address2 Varchar(256);
-- Thêm cột Active có kiểu dữ liệu Varchar(1), NOT NULL
-- Chú ý nếu bảng đã có dữ liệu sử dụng với NOT NULL cần thêm giá trị mặc định.
ALTER TABLE Members ADD Active Varchar(1) NOT NULL DEFAULT 'Y';
-- Cú pháp chỉ đổi tên cột.
ALTER TABLE <Table_Name> RENAME COLUMN <Column_Name> <New_Column_Name>;
-- Cú pháp vừa đổi tên cột vừa đổi kiểu dữ liệu:
ALTER TABLE <Table_Name> RENAME COLUMN <Column_Name> <New_Column_Name> Data_Type;
ALTER TABLE <Table_Name> DROP <Column_Name>;
ALTER TABLE Member DROP Address2;
ALTER TABLE <Table_Name> MODIFY <Column_Name> NewDataType;
-- Kiểu dữ liệu cũ của Cột Address là Varchar(225)
-- Sửa thành Varchar(512).
ALTER TABLE Member MODIFY Address Varchar(512);
ALTER TABLE <Table_Name> RENAME TO <New_Table_Name>;
ALTER TABLE Member RENAME TO User_Member;
DROP TABLE <table_name>;
- GRANT - Gán quyền truy cập cơ sở dữ liệu
- REVOKE - Rút đặc quyền được cho bởi lệnh GRANT.
- TODO
- TODO