You are on page 1of 30

Hệ quản trị Cở sở dữ liệu

Các kiểu bảng dữ liệu và


Các kiểu dữ liệu

Lê Hồng Hải, hailh@vnu.edu.vn


Bộ môn CHTTT, ĐH Công nghệ
Các kiểu bảng dữ liệu MySQL

Các kiểu lưu trữ khác nhau của MySQL được thiết kế cho
các ca sử dụng khác nhau
Các kiểu bảng dữ liệu MySQL
 mysql> SHOW ENGINES \G
*************************** 1. row ***************************
Engine: FEDERATED
Support: NO
Comment: Federated MySQL storage engine
Transactions: NULL XA: NULL Savepoints: NULL
*************************** 2. row ***************************
Engine: MRG_MYISAM
Support: YES
Comment: Collection of identical MyISAM tables
Transactions: NO XA: NO Savepoints: NO
*************************** 3. row ***************************
Engine: MyISAM
Support: YES
Comment: Default engine as of MySQL 3.23 with great performance
Transactions: NO XA: NO Savepoints: NO

Các kiểu lưu trữ hỗ trợ bởi MySQL 5.5
 InnoDB:
 Hỗ trợ giao dịch (ACID compliant) commit, rollback.
 Hỗ trợ khóa mức dòng (row-level locking), tăng hiệu năng
và đa người dùng
 Hỗ trợ toàn ràng buộc tham thiếu khóa ngoài FOREIGN
KEY. InnoDB là kiểu lưu trữ ngầm định trong MySQL 5.5.5
 MyISAM:
 Được sử dụng phổ biến cho Web, kho dữ liệu (data
warehousing), là kiểu lưu trữ ngầm định trong phiên bản
trước MySQL 5.5.5
 Memory:
 Lưu tất cả dữ liệu trong RAM, cho truy cập cực nhanh (Có
tên gọi trước HEAP).
Các kiểu lưu trữ hỗ trợ bởi MySQL 5.5
 Merge:
 Cung cấp khả năng nhóm một chuỗi các bảng MyISAM
giống nhau và tham chiếu tới như một đối tượng
 Federated:
 Cung cấp khả năng tạo một CSDL Logic từ nhiều servers
vật lý. Thuận lợi cho môi trường dữ liệu phân tán
 CSV:
 Lưu dữ liệu dưới dạng văn bản, sử dụng định dạng dữ liệu
phân chia bởi dấu ‘,’. Giúp trao đổi dữ liệu dễ dàng giữa các
ứng dụng
Third party engine
 TokuDB
 ScaleDB
Ví dụ:
 CREATE TABLE table1 (item1 INT)
ENGINE = INNODB
Nếu bỏ lựa chọn ENGINE, MySQL server sẽ sử dụng
engine dựa trên cấu hình
 ALTER TABLE t2 ENGINE = MYISAM;
Một CSDL có thể chứa nhiều bảng với các kiểu khác
nhau
MyISAM
Storage limits 256TB Transactions No Locking granularity Table

Geospatial data type Geospatial indexing


MVCC No Yes Yes
support support

B-tree indexes Yes Hash indexes No Full-text search indexes Yes

Clustered
No Data caches No Index caches Yes
indexes

Cluster database
Compressed data Yes[a] Encrypted data[b] Yes No
support

Replication Backup / point-in-time


Yes Foreign key support No Yes
support[c] recovery[d]

Query cache Update statistics for


Yes Yes  
support data dictionary
MyISAM
 Mỗi bảng MyISAM được lưu trữ trên đĩa trong
3 file
 Các tên file bắt đầu với tên bảng
 File .frm lưu định dạng bảng
 File .MYD (MYData) lưu dữ liệu
 File chỉ mục (index) .MYI (MYIndex)
MyISAM
 Kiểm tra hoặc sửa chữa các bảng MyISAM
với chương trình mysqlcheck hoặc
myisamchk
 Nén các bảng MyISAM sử dụng chương trình
myisampack để giảm không gian lưu trữ
InnoDB
Storage limits 64TB Transactions Yes Locking granularity Row

Geospatial data Geospatial indexing


MVCC Yes Yes No
type support support
Full-text search
B-tree indexes Yes Hash indexes No No
indexes
Clustered
Yes Data caches Yes Index caches Yes
indexes
Compressed Cluster database
Yes[a] Encrypted data[b] Yes No
data support
Replication Foreign key Backup / point-in-time
Yes Yes Yes
support[c] support recovery[d]
Update statistics
Query cache
Yes for data Yes    
support
dictionary
InnoDB
 Tự duy trì dữ liệu đệm (caching data) và các chỉ mục
(indexes)trong bộ nhớ chính
 Lưu các bảng và các chỉ mục trong một bảng không
gian (tablespace)-chứa vài file (Khác so với bảng
MyISAM)
 Không sao chép một bảng InnoDB bằng cách sao
chép file thông thường
 Các bảng InnoDB yêu cầu không gian lưu trữ lớn
hơn so với MyISAM
 Up until MySQL 5.6, MyISAM was the only storage
engine with support for full-text search (FTS)
Các kiểu dữ liệu
Kiểu số (numeric)
Lưu trữ
Kiểu Miền giá trị

TINYINT Signed: -128 to 127 Unsigned: 0 to 255 1 byte

SMALLINT Signed: -32768 to 32767 Unsigned: 0 to 65535 2 bytes

MEDIUMINT Signed: -8388608 to 8388607 Unsigned: 0 to 16777215 3 bytes

INT/
Signed: -2147483648 to Unsigned: 0 to
INTEGE 4 bytes
2147483647 4294967295
R
Signed: - Unsigned: 0 to
BIGINT 9223372036854775808 to 18446744073709551 8 bytes
9223372036854775807 615
*Lưu ý: Kiểu BOOLEAN tương ứng với TINYINT(1)
Kiểu số (numeric)

Kiểu dữ liệu Miền giá trị Lưu trữ

-3.402823466E+38 to -1.175494351E-38 0
FLOAT 4 bytes
1.175494351E-38 to 3.402823466E+38

1.7976931348623157E+308 to -
DOUBLE
2.2250738585072014E-308 0
[PRECISION] 8 bytes
2.2250738585072014E-308 to
/REAL
1.7976931348623157E+308

DEC/
DECIMAL/
Phụ thuộc vào khi định nghĩa cột Depends
NUMERIC/
FIXED
Các kiểu xâu ký tự
 Kiểu ký tự
 CHAR (<length>) [BINARY | ASCII | UNICODE]
 VARCHAR (<length>) [BINARY]
 Kiểu nhị phân
 TINYBLOB | BLOB | MEDIUMBLOB | LONGBLOB
 Kiểu văn bản (text)
 TINYTEXT | TEXT | MEDIUMTEXT | LONGTEXT
 Kiểu liệt kê
 {ENUM | SET} (<value> [{, <value>}...])
Các kiểu xâu ký tự
 Kiểu dữ liệu CHAR có độ dài cố định và lưu
trữ đến 255 Ký tự.
 Nếu số ký tự trong cột có thể thay đổi, nên
dùng kiểu VARCHAR
 Các tùy chọn sau có thể sử dụng với kiểu ký
tự
 BINARY: Lưu sử dụng nhị phân
 ASCII: sử dụng tập ký tự latin1 cho cột
 UNICODE: Sử dụng tập ký tự ucs2 cho cột
Kiểu nhị phân
 Được thiết kế để lưu trữ số lượng dữ liệu lớn
 ví dụ: ảnh, file (image base64)
Kiểu xâu ký tự

Kiểu dữ liệu Kích thước lớn nhất

TINYBLOB/TINYTEXT 255 characters (355 bytes)

BLOB/TEXT 65,535 characters (64 KB)

MEDIUMBLOB/MEDIUMTEXT 16,777,215 characters (16 MB)

LONGBLOB/LONGTEXT 4,294,967,295 characters (4 GB)


Kiểu dữ liệu thời gian

Kiểu dữ liệu Định dạng Khoảng

DATE YYYY-MM-DD 1000-01-01 through 9999

TIME HH:MM:SS -838:59:59 to 838:59:59

YYYY-MM-DD
DATETIME 1000-01-01 00:00:00 through 9999
HH:MM:SS

YEAR YYYY 1901 to 2155 (and 0000)

YYYY-MM-DD 1970-01-01 00:00:00 to partway through


TIMESTAMP
HH:MM:SS 2037
Kiểu dữ liệu thời gian TIMESTAMP

 Các cột TIMESTAMP đóng vai trò đặc biệt khi chúng
được tự động cập nhật khi các bản ghi được thêm
mới hay cập nhật với thời gian lần cuối thay đổi
 Giá trị cột được xác định tùy theo thuộc tính lựa
chọn:
 TIMESTAMP [DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP]
(Default) The column is automatically updated both when a new record is created and for each
change in a record. The specification in square brackets [] is optional.
 TIMESTAMP DEFAULT CURRENT_TIMESTAMP
Time is set on the column when a new record is added, but column is left unchanged thereafter.
 TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
The column is set to zero on creation but updated with current time on subsequent changes.
 TIMESTAMP DEFAULT 'yyyy-mm-dd hh:mm:ss' ON UPDATE CURRENT_TIMESTAMP
When created, column is set to given time; but current time is stored on subsequent updates.
Lệnh tạo bảng dữ liệu

CREATE TABLE table-name ( ... columns ... )


ENGINE = {MYISAM | INNODB | MEMORY |
MERGE}

Chi tiết tại tài liệu tham khảo


CSDL Minh họa

CSDL Sakila
http://dev.mysql.com/doc/sakila/en/sakila.html
Ví dụ

CREATE TABLE actor (


actor_id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,
first_name VARCHAR(45) NOT NULL,
last_name VARCHAR(45) NOT NULL,
last_update TIMESTAMP NOT NULL DEFAULT
CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (actor_id),
KEY idx_actor_last_name (last_name)
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
Ví dụ

CREATE TABLE film_text (


film_id SMALLINT NOT NULL,
title VARCHAR(255) NOT NULL,
description TEXT,
PRIMARY KEY (film_id),
FULLTEXT KEY idx_title_description (title,description)
)ENGINE=MyISAM DEFAULT CHARSET=utf8;
Ví dụ

CREATE TABLE city (


city_id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,
city VARCHAR(50) NOT NULL,
country_id SMALLINT UNSIGNED NOT NULL,
last_update TIMESTAMP NOT NULL DEFAULT
CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (city_id),
KEY idx_fk_country_id (country_id),
CONSTRAINT `fk_city_country` FOREIGN KEY (country_id)
REFERENCES country (country_id) ON DELETE RESTRICT ON
UPDATE CASCADE
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
Xem thông tin về tạo bảng

SHOW CREATE TABLE Table_Name


Ví dụ sửa bảng
 ALTER TABLE film_review ADD review_date
DATETIME NOT NULL
 ALTER TABLE film_review MODIFY review_id
MEDIUMINT NOT NULL AUTO_INCREMENT
PRIMARY KEY;

Chi tiết tại tài liệu tham khảo


Quản lý chỉ mục (index)
 MySQL tự động tạo chỉ mục:
 Trên các cột được sử dụng là Khóa chính
 Khi tạo khóa ngoài trên các cột của một bảng
InnoDB
 Chỉ mục Full-text chỉ có thể sử dụng với các bảng
MyISAM và trên các cột CHAR, VARCHAR và TEXT
 Từ khóa KEY và INDEX có cùng ý nghĩa
Tài liệu tham khảo
 http://www.mysql.com
 http://dev.mysql.com/doc/refman/5.7/en/

You might also like