MySQL là hệ quản trị cơ sở dữ liệu quan hệ nguồn mở được sử dụng phổ biến
thứ hai trong bảng xếp hạng các hệ quản trị cơ sở dữ liệu, tính đến tháng 3 năm 2014!, Tên MySQL được đặt theo tên My của con gái nhà đồng sáng lập Michael Widenius và cụm từ SQL là viết tắt của Structured Query Language.
Dự án phát triển MySQL được phân phối, tuân theo các điều khoản của GNƯ General Public License, va cing tuan theo các thỏa thuận phần mềm độc quyền. MySQL thuộc quyền sở hữu và được tài trợ bởi công ty Thụy Điền
MySQL AB, bây giờ thuộc sở hữu của tổng công ty Oracle.
MySQL là hệ quản trị cơ sở dữ liệu đi ir dung phô biến trong các ứng dụng.
Web, déng vai trò quan trọng trong hệ thống phản mềm ứng dụng Web nguồn mg LAMP (Linux, Apache, MySQL, Perl / PHP / Python). MySQL eung ep
các od án phân mềm. Phiên bản thương mại cung cấp thêm các chức năng bô sung. Các ứng dụng sử dụng cơ sở dữ liệu MySQL bao gồm: Typo3, MODx, Joomla, WordPress, phpBB, MyBB, Drupal và phần mềm khác. MySQL cũng.
được sử dụng trong nhiều ứng dụng quy mô lớn, bao gồm cả Google, Facebook, Twitter, Flickr va YouTube.
Phiên bản đầu tiên của MySQL ra đời vào ngày 23 tháng 5 năm 1995, xuất phát từ mục đích sử dụng cá nhân mSQL với ngôn ngữ cấp thấp ISAM -
Indexed Sequential Access Method, quá chậm và cứng nhắc, MySQL đã tạo ra một giao diện SQL mới tương tự như giao diện mSQL.My§QL được phân phối tuân theo giấy phép GPL từ phiên bản 3.23.19 vào tháng 6 năm 2000,
Các phiên bản lần lượt là 4.0 (10/2001 ~ 03/2003), 4.1 (04/2003 — 10/2004), 5.0 (12/2003 — 10/2005), 5.1(12/2005 — 09/2007), 5.2 (02/2007, sau đó đã được đổi tên thành phiên bản 6.0, bị bỏ rơi ké tir khi Oracle mua lai MySQL).
Phiên bản 5.5 được phát hành từ tháng 10 năm 2010 và phiên bản 5.6 được phát hành kể từ tháng 2 năm 2013. Năm 2003, MySQL AB va SAP AG đã ký kết một thỏa thuận, tích hợp SAP DB vào MySQL đề tạo ra MaxDB. Ngày 20 tháng 04 năm 2009, Oracle công bố mua lại Sun Microsystems với giá 7.4 tỷ đô la, tạo ra những lo ngại về việc MySQL sẽ biến mắt - hoặc ít nhất là không, được phát triển, vì lợi ích của hệ quản trị cơ sở dữ liệu Oracle. Tuy nhiên MySQL còn lâu mới có được các tính năng của hệ quản trị cơ sở dữ liệu Oracle, và nó được coi như sản phẩm miễn phí, hướng dẫn sử dụng SỌL,
chuẩn bị cho việc thương mại hóa trong tương lai.
Phiên bản MySQL 5.6 cung cấp các tính năng như sau:
Tập lệnh tuan theo chudn ANSI SQL 99 va phan mở rộng
Hỗ trợ đa nên
Mô hình chủ-khách (client-server)
Thủ tục lưu trữ (stored procedures), sử dụng ngôn ngữ thủ tục SQL/PSM (SQL/Persistent Stored Modules)
“Thủ tục kích hoạt tyr dOng (triggers) Côn trỏ (cursors)
Khung nhìn có thể cập nhật (updatable views)
Ngôn ngữ định nghĩa dữ-liệu trực tuyến khi-sử dụng engine lưu trữ InnoDB
© So dé théng tin (information schema)
© So dé higu nang (performance schema)
© Mét tip hp cae ché dé thy chon SQL dé kiém soat hanh vi trong thời gian thực thí, bao gồm chế độ tuân thủ nghiêm ngặt chuẩn SỌL.
rợ X/Open XA cho xử lý giao dịch phân tán, commit hai giai đoạn, ung engine lưu trừ InnoDB
ợ giao địch với savepoints khi sử dụng engine lưu trữ InnoDB, lưu tra cum NDB
© H6 tro truy cập cạnh tranh tuan thi co ché ACID (Atomicity,
Consistency, Isolation, Durability) khi sir dung InnoDB va NDB Hỗ try SSL (Secure Sockets Layer)
Query caching
Sub-SELECT (vi du: SELECT léng nhau) Hỗ trợ nhân bản dữ liệu
Lập chỉ mục và tìm kiếm Thư viện cơ sở dữ liệu nhúng
Hỗ trợ Unicode
Bang được phân vùng với chia cắt các phân vùng trong tối ưu hóa
sử
© Shared-nothing clustering thong qua MySQL Cluster
ô _ Nhiều engine lưu trữ, cho phộp lựa chọn sao cho đạt hiệu quả cao nhất
cho mỗi bảng trong ứng dụng, các engine cơ bản như InnoDB,
MyISAM, Merge, Memory (heap), Federated, Archive, CSV, Blackhole, NDB Cluster
© Commit nhóm, tập hợp nhiều giao dịch từ nhiều kết nối với nhau để
tăng số lượng các commit trong một giây.
MySQL chạy trên nhiều hệ điều hành khác nhau: AIX, IBM i-5 BSDI,
FreeBSD, HP-UX, Linux, Mac OS X, NetWare, NetBSD, OpenBSD, OS/2 Warp, SGI IRIX, Solaris, SCO OpenServer, SCO UnixWare, Tru64 Unix, Windows,
Cơ sở dữ liệu có thể được truy cập bằng các giao diện cho các ngôn ngữ lập
trình C/C++, VB, VB NET, C #, Delphi/Kylix, Eiffel, Java, Perl, PHP, Python, Windev, Ruby va Tel.
5.2 QUAN TRI CO SO DU LIEU VA NGUOI DUNG
Thông thường người ta chỉ cho phép người dùng root được toàn quyền quản
trị cơ sở dữ liệu và người dùng trên MySQL server. Để thực hiện các thao tác
quản trị cơ sở đữ liệu và người dùng, cân đăng nhập vào MySQL server với tài khoản root từ chương trình MySQL client. Cú pháp để đăng nhập vào server
tir client như sau;
mysql -h[ip-serv] -u[username] -p
Tay chon -h để đặc tả địa chỉ IP ca MySQL server, tity chon -u dé
khoản người dùng đăng nhập và -p yêu cầu nhập mật khẩu của tài khoản người dùng.
Vi du, dé k MySQL server c6 dia chi IP 1a 172.16.66.162 bing
tải khoản người dùng root, chỉ cần gỡ lệnh:
mysql -h172.16.66.162 -uroot -p Enter password: ********
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 59 to server version: 5.1.63
Type ‘help;' or ‘\h' for help. Type '\c' to clear the buffer.
mysql>
Cần chú ý rằng dấu nhắc lệnh của giao diện MySQL client là mysql>. Tir day,
người dựng root cú th thực hiện cỏc chức năng quản trị bằng cỏch gử lệnh kết thúc bằng đấu chấm phẩy ;.
5.2.1 Quản trị cơ sở dữ liệu
Cơ sở dữ liệu trong MySQL là bộ sưu tập các thông tin được tổ chức sao cho dễ dàng lưu trữ, truy cập, chỉnh sửa, và các thao tác quản lý khác. Cơ sở dữ liệu chứa các bảng dữ liệu, các chỉ mục, khung dữ liệu (view), các thủ tục
lưu trữ.
Cú pháp của lệnh tạo cơ sở dit
create database db_name;
với tén db_name nhu sau:
Ví dụ như muốn tạo cơ sở dữ liệu mydb, chỉ cần gõ lệnh:
mysql> create database mydb;
Query OK, 1 row affected (3.40 sec)
Muốn biết trên MySQL server hiện có bao nhiêu cơ sở dữ liệu, chỉ cần gõ lệnh show databases như sau;
mysql> show databases;
| Database +
+ + |
| information_schema |
| | + |
| mydb
| mysql
| test
enar
4 rows in set (0,12 sec)
Kết quả cho biết hiện có 4 cơ sở dữ liệu. Muốn thao tác trên một cơ sở dữ liệu
nào đó, người dùng can chon cơ sở dữ liệu đẻ làm việc. Đề chọn cơ sở dữ liệu mydb, chỉ cần sử dụng lệnh use như sau:
mysql> use mydb;
Database changed
Giả sử chúng ta tạo một bing t (ct phap dutge giải thích ở phần sau) như sau;
mysql> create table t ( -> id int primary key,
-> name varchar(3@) not null
> )3
Query OK, @ rows affected (8.02 sec)
Muốn xem có bao nhiêu bảng trong cơ sở dữ liệu mydb, có thể sử dụng lệnh
show tab1es như sau;
mysql> show tables;
+ .-+
| Tables_in_mydb |
- -+
Lénh describe tab cho phép xem lại cấu trúc của bảng tab. Ví dụ như dé xem cấu trúc bang £, sử dụng lệnh:
mysql> describe t;
= +8 =>
| Field | Type aaah | Null | Key | Default | extra | aan
| id | int(a1) | NO | PRT | nuLL | |
| name | varchar(39) | N0 | [nu | I
+reeeree đe vugoseGGỂUG ee fae
2 rows in set (0.89 sec)
Cú pháp lệnh cho phép xóa cơ sở dữ liệuđb_name như s
drop database db_name;
Ví dụ lệnh sau đây thực hiện thao tác xóa cơ sở dữ liệu mytest:
mysql> drop database mytest;
Query OK, @ rows affected (0.13 sec) 5.2.2 Quản trị người dùng
MySQL kiểm soát truy nhập vào các cơ sở dữ liệu trên server thông qua tài khoản người dùng. Cần chú ý rằng các tài khoản người dùng trên MySQL server độc lập với tai khoản người dùng của hệ điều hành.
Cú pháp lệnh tạo, gán mật khẩu và phân quyền cho người dùng mới như sau:
grant priv type privileges on db_obj
tousername@'servername' identified by ‘password’;
Trong đó priv_type là các quyền cáp cho người dùng username được phép
thao tác trên đối tượng db_obj của cơ sở dữ liệu, Mật khẩu đăng nhập của tài khoản username là password. Các quyền có thẻ là:
~_CREATE: tạo bảng hay cơ sở dữ liệu mới
~_DROP: xóa bảng hay cơ sở dữ liệu
~_DELETE: xóa dòng trong bảng,
- INSERT: chén thém dong vào bảng.
~_SELECT: thực hiện truy vấn dữ liệu
~_.UPDATE: cập nhật dòng trong bảng
Ví dụ sau đây cho phép tạo tài khoản người dùng nghỉ với mật khẩu là nghipassud, được toàn quyền thao tác trên các đối tượng trong cơ sở dữ liệu mydb,
mysql> grant all privileges on mydb.* to nghi@' localhost"
identified by ‘nghipasswd';
Query OK, @ rows affected (@.05 sec)
Cú pháp lệnh đẻ xóa phân quyền của người dùng như sau:
revoke priv_type privileges on db_obj fromusername@’ servername? ;
Vi dụ sau đây cho phép xóa tắt cả quyền truy cập vào các đối tượng trong cơ sở dữ liệu mydb của người dùng nghỉ, đồng thời dùng lệnh drop user dé xóa tài khoản người dùng nghỉ.
mysql> revoke all privileges on mydb.* from
nghi@' 1ocalhost ' ;
Query OK, @ rows affected (0:63 sec) mysql> drop user nghi@'localhost” ; Query OK, @ rows-affected`(:66 sec)
5.2.3. Tạo bản dự phòng và phục hồi cơ sở dữ liệu
MySQL còn cung cấp công cụ mysq1dunp đẻ lưu dự phòng cơ sở dữ liệu.
Đây là công cụ rất hữu ích, phục vụ thao tác khôi phục cơ sở dữ liệu nếu có sự cổ hỏng hóc cơ sở dữ liệu xây ra.
mysqldump [opts] -h[ip-serv] -u[username] -p [db_name] >
[backup_file]
Tay chon -h dé dic ta dia chi IP cla MySQL server, ty chon -u dé đặc tả tài khoản người dùng đăng nhập và -p yêu cầu nhập mật khâu của tài khoản
người dùng, db_name là tên cơ sở dữ liệu cần lưu dự phòng vào tập tin xuất là
backup_fi1e. Chúng ta có thể sử dụng thêm các tùy chọn opts khác như --all-databases, --databases đề lưu dự phòng nhiều cơ sở dữ liệu.
Ngoài ra còn các tùy chọn quan trọng khác được trình bày trong [2]
Ví dụ sau đây thực hiện lưu dự phòng cơ sở dữ liệu mydb trêi
chỉ IP là 172.16.66.162 vào tập tin mydb.bak, sử dụng
nhap root tir console:
mysqldump -h172.16.66.162 -uroot -p mydb > mydb.bak
Fnten nassword: *#******
server có địa hoản đăng
Để phục hồi cơ sở dữ liệu từ tập tin lưu dự phòng trước đó, chúng ta có thể sử
dụng lệnh như sau:
mysql -h[ip-serv] -u[username] -p [đb_name] <
[backup_file]
Ví dụ từ console, thực hiện khôi phục cơ sở dữ liệu mydb trên server có địa chỉ IP là 172.16.66.162 từ tập tin mydb.bak, sử dụng tải khoản đăng nhập
root bằng lệnh:
mysql -h172.16.66.162 -uroot -p mydb < mydb.bak Enter password: P+
Đôi khi nhà quản trị hệ thống có thể chỉ lưu dự phòng một bảng của cơ sở dữ:
liệu mà anh ta quan tâm thay vì là lưu dự phòng toàn bộ cơ sở dữ liệu qua
nặng nề. Lệnh select hỗ trợ cho lưu dự phòng bảng table ra tap tin
outfi1e có cú pháp như sau:
select * into [outfile] from [table]
Ví dụ sau đây cho phép lưu dự phòng bảng test vào tập tin test..sq1.
mysql> select * into outfile 'test.sql' from test;
Query OK, 3 rows affected (0.00 sec)
Lénh load cho phép phyc hdi bing table tir tap tin dy phong File 6 ci pháp như sau:
load data infile [file] replace into table [table]
Ví dụ sau đây thực hiện khôi phục bảng test từ tập tin dự phòng test..sq1.
Sau đó thực hiện câu truy vấn để xem lại kết quả khôi phục dữ liệu bảng test.
mysql> load data infile ‘test.sql' replace into table
test;
Query OK, 3 rows affected (@.00 sec)
Records: 3 Deleted: @ Skipped: @ Warnings: ® mysql> select * from test;
+>~==t~===
| id | name I
+ Ị
| |
1| Thanh- Nghỉ Do | 2 | Nguyen-Khang Pham | 3 | Tu-Quynh Tran |
“+
+ee==te
3 rows in set (0.09 sec)
“Trên đây chỉ là các thao tác quản trị cơ bản, các tài liệu [1], [4] cung cấp nhí và chỉ tiết hơn các chức năng quản trị cơ sở dữ liệu, người dùng và server.
Ngoài ra, còn có chương trình quản trị với giao điện đồ họa thân thiện như
MySQL Administrator của MySQL AB (hình 5.1), hỗ trợ đầy đủ các thao tác quản trị cơ sở dữ liệu và người dùng.
gh He mang (0
Hình 5.1 Giao dign MySQL Administrator
5.3 NGON NGỮ ĐỊNH NGHĨA DỮ LIỆU
Ngôn ngữ định nghĩa dữ liệu được sử dụng để tạo, xóa cơ sở dữ liệu, tạo mới, chỉnh sửa và xóa các đối tượng trong cơ sở dữ liệu như bảng. Những lệnh này sẽ chủ yếu được sử dụng bởi các nhà quản trị cơ sở dữ liệu trong các giai đoạn thiết lập, chỉnh sửa hoặc xóa bỏ cơ sở dữ liệu của một dự án. Nhóm lệnh tạo (create database), chọn (use), xóa (drop database) co so dit li
đã được trình bày trong phần quản trị cơ sở dữ liệu. Tiếp theo, chúng tôi tập
trung trình bày các lệnh cho phép tạo, chỉnh sửa và xóa bảng.
5.3.1 Tạo bảng
Lénh create table ding dé tao bảng có cú pháp tổng quát như sau:
CREATE TABLE tbl_name ( column_definition
| [CONSTRAINT [symbol]] PRIMARY KEY [index_type]
(index_col_name,...)
| [CONSTRAINT [symbol]] UNIQUE [INDEX] [index_name]
[index_type] (index_col_name,...)
| [CONSTRAINT [symbol]] FOREIGN KEY [index_name]
(index_col_name,...) [reference_definition]
| CHECK (expr));
Các tùy chọn trong lệnh tạo bảng bao gồm các định nghĩa cột (trường), kiểu
„ tham chiếu và các rằng buộc toàn vẹn dữ liệu. Các tùy chọn có thể được mô tả như.
column_definition (định nghĩa cột)
col name type[NOT NULL | NULL] [DEFAULT def_value]
[AUT0_TNCREMENT]
[UNIQUE [KEY] | [PRIMARY] KEY]
[COMMENT 'str'] [reference_definition]
type (kiểu dữ liệu)
®© Số: TINYINT, SMALLINT, MEDIUMINT, INT, INTEGER,
BIGINT, REAL, DOUBLE, FLOAT, DECIMAL, NUMERIC
Chuỗi ky ty: char, varchar, text
Ngay gid: date, time, timestamp
Nhị phân: BLOB, TINYBLOB, BLOB, MEDIUMBLOB, LONGBLOB Tập hợp: SET
reference_definition (định nghĩa tham chiếu):
REFERENCES tbl_name [(index_co1_name,...)]
[MATCH FULL | MATCH PARTIAL | MATCH SIMPLE]
[ON DELETE reference_option]
[ON UPDATE reference_option]
reference_option (tùy chọn):
RESTRICT | CASCADE | SET NULL | NO ACTION
“Trong lệnh tạo bảng, chúng ta có thé định nghĩa các ràng bude (constraint) toàn vẹn dữ liệu như: khóa chính (PRTMARY. KEY), duy nhất (UNTQUE), không.
rng (NOT NULL), khéa ngoai (FOREIGN KEY), mién gia trị (CHECK). Trong các vi dụ mình họa tiếp theo, chúng tôi lần lượt trình bảy cách tạo bảng có sử dụng định nghĩa ràng buộc toàn vẹn dữ
Ví dụ để tạo bảng s có sử dụng ràng buộc khóa chính (PRIMARY. KEY) và
khong rong (NOT NULL), thực hiện lệnh sau:
mysql> CREATE TABLE s (
sid varchar(3) PRIMARY KEY, sname text NOT NULL,
status smallint, city text);
Query 0K, @ rows affected (0.01 sec)
Ví dụ để tạo bảng p có sử dụng rằng buộc duy nhất (UNIQUE) va không rỗng (NOT NULL), cả 2 rằng buộc này tương tự như ràng buộc khóa chính (PRIMARY KEY). Tuy nhiên ở ví dụ này, chúng tôi muốn minh họa việc sử dụng cùng lúc cả 2 ràng buộc. Lệnh tạo bảng p như sau:
mysql> CREATE TABLE p (
pid varchar(3) UNIQUE NOT NULL, pname text NOT NULL,
color text,
weight smallint, city text);
Query OK, @ rows affected (@.01 sec)
Ví dụ tiếp theo dùng để tạo bảngˆsp.có sử dụng ràng buộc khóa chính (PRIMARY KEY) gdin 2 cOt-sid, pid, ngoai ra còn có ràng buộc về miễn giá
trị (CHECK). Lệnh tạo bằng p như sau:
mysql> CREATE TABLE“sp ( sid varchar(3),
pid varchar(3),
qty integer NOT NULL CHECK (qty > @),
CONSTRAINT sp_pkey PRIMARY KEY (sid, pid));
Query OK, @ rows affected (6.01 sec)
Ví dụ sau cho phép tạo bang #ilms minh hoa định nghĩ:
cột date_prod.
mysql> CREATE TABLE films (
code char(5) PRIMARY KEY,
title text NOT NULL,
date_prod date DEFAULT '2000/01/01');
Query OK, @ rows affected (@.01 sec)
dinh cua
Giả sử trong cơ sở dữ liệu có bảng nhanvien có cột madv là khóa ngoài tham khảo đến cột madv của bảng donvi, cột macv là khóa ngoài tham khảo đến cột macv của bảng chucvu (xem hình 5.2). Lệnh tạo bang donvi, chucvu va nhanvien được thực hiện như sau:
mysql> CREATE TABLE chucvu(
macv varchar(3) primary key, chucvu varchar(3@) not null);
Query OK, @ rows affected (@.01 sec)
mysql> CREATE TABLE donvi(
madv varchar(3) primary key, donvi varchar(3@) not null);
Query OK, @ rows affected (@.02 sec)
NHANVIEN pot
men -madv
hater oa -donvi
~namsinh -gicitinh ~
-madv“
~maey
-lưong
Hình §.2 Lược đỗ quan hệ -luong viên
mysql> CREATE TABLE nhanvien(
many varchar(5) primary key, hoten varchar(3@) not null, namsinh date,
gioitinh varchar(3) not null, madv varchar(3) not null, macy varchar(3) not null,
luong int CHECK (luong > 1909),
FOREIGN KEY (madv) REFERENCES donvi(madv), FOREIGN KEY (macv) REFERENCES chucvu(macv));
Query OK, 0 rows affected (0.02 sec)
5.3.2 Chính sứa bảng
Nếu cấu trúc bảng không phù hợp, lệnh alter tab1e cho phép chỉnh sửa
cấu trúc bảng, Cú pháp để chỉnh sửa bảng như sau:
ALTER TABLE tbl_name
alter_specification [, alter_specification] ...
Các thao tác chỉnh sửa có là thêm cột mới, xóa bỏ cột, chỉnh.
dữ liệu hay ràng buộc. Các thao tác chỉnh sửa được mô tả như s¡
alter_specification (thao tác chỉnh sửa):
ADD [COLUMN] column_def [FIRST | AFTER col name ]
| ADD [COLUMN] (column_definition,...)
| ADD [CONSTRAINT [symbol]]
PRIMARY KEY [index_type] (index_col_name,..
| RENAME [TO] new_tbl_name
| DROP [COLUMN] col_name
a rằng kiểu
Trước khi chính sửa bảng £Ä1ms, chúng ta có thể xem lại mô tả bảng Films với lệnh đescribe như sau:
mysql> DESCRIBE films;
——.. =
| Field | Type
| Null | Key |
| code | char(5) | NO | PRI | NULL | |
| title | text | no | | NULL | I
| date_prod | date | Yes | | 2000-81-01 | |
tone nem tones: +
3 rows in set (8.6ổ'Sec)
Để thêm cột nb có kiểu ấnt vào bảng films va xem lai mé ta bang sau khi thêm vào cột nb, cần thực hiện 2 lệnh sau đây:
mysql> ALTER TABLE films ADD COLUMN nb int;
Query OK, @ rows affected (0.04 sec) Records: @ Duplicates: @ Warnings: @ mysql> DESCRIBE films;
| Field | Type | Null | Key | Default | Extra |
| code | char(5) | NO | PRI | NULL | |
| title | text | no | | NULL | |
| date_prod | date | yes | | 2009-01-01 | |
| nb | int(11) |YES | | NULL | |
tone ot -rterer +
4 rows in set (0.02 sec)