MySQL là hệ quản trị cơ sở dữ liệu quan hệ (RDBMS) mã nguồn mở, chạy nhanh, tin cậy và dễ sử dụng. MySQL dựa trên chuẩn SQL để biên dịch trên nhiều nền tảng, nó là hệ quản trị cơ sở dữ liệu SQL đa luồng và đa người dùng.
Dữ liệu trong cơ sở dữ liệu MySQL được lưu dưới dạng bảng. Một bảng là một tập hợp dữ liệu có quan hệ, trong bảng bao gồm cột và hàng.
MySQL có client độc lập cho phép người dùng tương tác trực tiếp với cơ sở dữ liệu MySQL bằng SQL, nhưng cũng có thể triển khai các ứng dụng sử dụng ngôn ngữ khác.
Hiện tại MySQL là cơ sở dữ liệu phổ biến nhất thế giới.
3. Bạn hiểu "cơ sở dữ liệu" là gì?
5. Một cơ sở dữ liệu MySQL bao gồm những gì?
6. Làm thế nào để tương tác với MySQL?
8. Các lệnh phổ biến trong MySQL?
9. Cách tạo cơ sở dữ liệu trong MySQL?
10. Cách tạo bảng trong MySQL?
11. Cách chèn dữ liệu vào MySQL?
14. Xoá dữ liệu trong bảng MySQL?
15. Cách để xem cơ sở dữ liệu trong MySQL?
17. Các kiểu chuỗi trong MySQL?
18. Kiểu dữ liệu thời gian là gì?
20. Cách thêm người dùng vào MySQL?
22. Tạo và thực thi view trong MySQL?
24. Có bao nhiêu Trigger khả dụng trong MySQL?
27. Các kiểu quan hệ trong MySQL?
28. Giải thích kiến trúc của MySQL?
31. Transaction Storage Engines trong MySQL là gì?
MySQL là hệ quản trị cơ sở dữ liệu mã nguồn mở lớn nhất thế giới, đặc biết được dùng rất nhiều cho các dự án, ứng dụng, website trên internet.
- Dễ sử dụng: MySQL là cơ sở dữ liệu tốc độ cao, ổn định, dễ sử dụng và hoạt động trên nhiều hệ điều hành cung cấp một hệ thống lớn các hàm tiện ích rất mạnh.
- Độ bảo mật cao: MySQL rất thích hợp cho các ứng dụng có truy cập CSDL trên Internet khi sở hữu nhiều nhiều tính năng bảo mật thậm chí là ở cấp cao.
- Đa tính năng: MySQL hỗ trợ rất nhiều chức năng SQL được mong chờ từ một hệ quản trị cơ sở dữ liệu quan hệ cả trực tiếp lẫn gián tiếp.
- Khả năng mở rộng và mạnh mẽ: MySQL có thể xử lý rất nhiều dữ liệu và hơn thế nữa nó có thể được mở rộng nếu cần thiết.
- Nhanh chóng: Việc đưa ra một số tiêu chuẩn cho phép MySQL để làm việc rất hiệu quả và tiết kiệm chi phí, do đó nó làm tăng tốc độ thực thi.
Cơ sở dữ liệu là hệ thống bao gồm rất nhiều thông tin, dữ liệu được xây dựng theo một cấu trúc nhất định nhằm đáp ứng nhu cầu khai thác, sử dụng của nhiều người hay chạy nhiều chương trình ứng dụng cùng một lúc.
Khi áp dụng hình thức lưu trữ này, nó sẽ giúp khắc phục được những điểm yếu của việc lưu file thông thường trên máy tính. Các thông tin lưu trữ sẽ đảm bảo được nhất quán, hạn chế tình trạng trùng lặp thông tin.
Chuẩn SQL (Structured Query Language) là ngôn ngữ sử dụng cho các RDBMS bên cạnh MySQL như Oracle, Microsoft SQL Server. Có thể coi SQL là ngôn ngữ chung mà bất cứ hệ thống cơ sở dữ liệu quan hệ (RDBMS) nào cũng phải đáp ứng.
Một cơ sở dữ liệu MySQL bao gồm một hay nhiều bảng, mỗi bảng gồm cột và dòng. Trong đó cột là các thuộc tính dữ liệu còn hàng là các bản ghi dữ liệu.
Có 3 cách để tương tác với MySQL:
- dùng lệnh trực tiếp
- qua web interface
- qua ngôn ngữ lập trình
Một truy vấn là một yêu cầu hay câu hỏi cụ thể. Nó đòi hỏi cơ sở dữ liệu phải trả về một hay nhiều bảng ghi cụ thể.
Command | Action |
---|---|
ALTER | Chỉnh sửa bảng hay cơ sở dữ liệu |
BACKUP | Phục hồi bảng |
CREATE | Tạo cơ sở dữ liệu |
DELETE | Xoá hàm của bảng |
DESCRIBE | Mô tả cột của bảng |
DROP | Xoá bảng hay cơ sở dữ liệu |
EXIT | Thoát |
GRANT | Đổi quyền người dùng |
HELP | Hiển thị bảng trợ giúp |
INSERT | Thêm dữ liệu |
LOCK | Khoá bảng |
QUIT | Giống EXIT |
RENAME | Đổi tên bảng |
SHOW | Liệt kê chi tiết đối tượng |
SOURCE | Thực thi một file |
STATUS | Hiển thị trạng thái hiện tại |
TRUNCATE | Làm trống bảng |
UNLOCK | Mở khoá bảng |
UPDATE | Cập nhật bảng ghi đã tồn tại |
USE | Sử dụng cơ sở dữ liệu |
CREATE DATABASE books;
CREATE TABLE history (
author VARCHAR(128),
title VARCHAR(128),
type VARCHAR(16),
year CHAR(4)
) ENGINE InnoDB;
Lệnh INSERT INTO dùng cho chèn bảng ghi mới vào bảng MySQL:
INSERT INTO table_name (column1, column2, column3,...)
VALUES (value1, value2, value3,...)
Nếu bạn muốn thêm dữ liệu cho tất cả cột trong bảng, bạn không cần chỉ định tên cột trong truy vấn SQL. Tuy nhiên, trật tự của giá trị sẽ tương ứng với thứ tự cột của bảng.
INSERT INTO table_name
VALUES (value1, value2, value3,...)
ALTER TABLE classics DROP pages;
Trong MySQL, có nhiều kiểu chỉ mục khác nhau như regular index, fulltext index hay primary key. Các chỉ mục giúp ta tìm kiếm nhanh hơn. Chỉ mục gia tăng hiệu suất bằng cách đánh thứ tự dữ liệu trên đĩa, nhờ đó mà nó tìm kiếm kết quả nhanh hơn, hoặc nói cho SQL engine biết vị trí cần tìm dữ liệu.
Ví dụ:
ALTER TABLE history ADD INDEX(author(10));
ALTER TABLE history ADD INDEX(title(10));
ALTER TABLE history ADD INDEX(category(5));
ALTER TABLE history ADD INDEX(year);
DESCRIBE history;
DELETE FROM table_name
WHERE column_name = value_name
mysql> SHOW DATABASES;
Type | Ý nghĩa |
---|---|
TINYINIT | Số nguyên rất nhỏ |
SMALLINT | Số nguyên nhỏ |
MEDIUMINT | Số nguyên cỡ vừa |
INT | Số nguyên tiêu chuẩn |
BIGINT | Số nguyên lớn |
DECIMAL | Số thập phân |
FLOAT | Số dấu phẩy động chính xác đơn |
DOUBLE | Số dấu phẩy động chính xác kép |
BIT | trường bit |
Type | Ý nghĩa |
---|---|
CHAR | chuỗi (ký tự) với độ dài cố định |
VARCHAR | chuỗi với độ dài biến |
BINARY | chuỗi nhị phân độ dài cố định |
VARBINARY | chuỗi nhị phân độ dài biến |
TINYBLOB | BLOB (đối tượng nhị phân lớn) rất nhỏ |
BLOB | Blob nhỏ |
MEDIUMBLOB | Blob trung bình |
LONGBLOB | Blob lớn |
TINYTEXT | Chuỗi rất ngắn |
TEXT | Chuỗi ngắn |
MEDIUMTEXT | Chuỗi trung bình |
LONGTEXT | Chuỗi dài |
ENUM | Mỗi giá trị cột được gán, một thành viên enum |
SET | Một tập hợp, mỗi cột giá trị được gán 0 hoặc nhiều tập hợp thành viên |
NULL | NULL trong SQL là thuật ngữ được sử dụng để biểu thị một giá trị bị thiếu. Giá trị NULL trong bảng là giá trị trong trường có vẻ như là trống. Giá trị này khác với giá trị 0 hoặc một trường có chứa khoảng trắng. |
|
Type | Ý nghĩa |
---|---|
DATE | Giá trị ngày, theo định dang "YYYY-MM-DD" |
TIME | Giá trị giờ, theo định dang "hh:mm:ss" |
DATETIMET | Giá trị ngày giờ, theo định dang "YYYY-MM-DD hh:mm:ss" |
TIMESTAMP | Giá trị thười gian, theo định dang "YYYY-MM-DD hh:mm:ss" |
YEAR | Giá trị năm, theo định dang "YYYY" hoặc "YY" |
Ví dụ: Để lấy bảng ghi từ Order có ngày là "2018-11-11":
SELECT * FROM Orders WHERE OrderDate='2018-11-11'
BLOB là một đối tượng nhị phân lớn (Binary Large OBject) có thể chứa một lượng lớn dữ liệu. Có bốn loại BLOB, TINYBLOB, BLOB, MEDIUMBLOB, và LONGBLOB. Những chỉ khác nhau về độ dài tối đa của các giá trị mà chúng có thể giữ.
BLOB được dùng cho lưu giữ một biến có dữ liệu rất lớn. Bạn có thể lưu trữ cả quyển tiểu thuyết trong BLOB nếu cần.
Bạn có thể thêm người dùng bằng cách dùng lệnh CREATE và chỉ định định danh.
CREATE USER 'testuser' IDENTIFIED BY "sample password";
Trong MySQL, một view bao gồm một tập hợp hàng được trả về nếu một truy vấn được thực thi. Nó còn gọi là một "bảng ảo". View giúp việc truy xuất dễ dàng hơn thông qua tên alias.
Các ưu điểm của view:
- Đơn giản
- Bảo mật
- Dễ bảo trì
Tạo một view được thực hiện thông qua lệnh CREATE VIEW. Ví dụ:
CREATE
[OR REPLACE]
[ALGORITHM = {MERGE | TEMPTABLE | UNDEFINED }]
[DEFINER = { user | CURRENT_USER }]
[SQL SECURITY { DEFINER | INVOKER }]
VIEW view_name [(column_list)]
AS select_statement
[WITH [CASCADED | LOCAL] CHECK OPTION]
Trigger là trình kích hoạt, sẽ được kích hoạt khi có một tác động nào đó vào nó.
Trong MySQL, Trigger có nghĩa là một đoạn code SQL xử lý một chức năng nào đó, nó hoạt động ngầm và được chạy khi một trong các tác động như chèn, sửa đó hay xoá dữ liệu trong bảng.
Trigger có nhiều mục đích, bao gồm:
- Kiểm tra dữ liệu
- Đồng bộ hoá dữ liệu
- Đảm bảo các mối quan hệ giữa các bảng
Có 6 Trigger được cho phép trong cơ sở dữ liệu MySQL:
- Trước khi chèn
- Sau khi chèn
- Trước khi sửa
- Sau khi sửa
- Trước khi xoá
- Sau khi xoá
MySQL Server là máy tính hay một hệ các máy tính cài đặt phần mềm MySQL dành cho server để giúp bạn lưu trữ dữ liệu trên đó, để máy khách có thể truy cập vào quản lý. Dữ liệu này được đặt trong các bảng, và các bảng có mối liên hệ với nhau. MySQL server nhanh, an toàn, đáng tin cậy. Phần mềm MySQL cũng miễn phí và được phát triển, phân phối và hỗ trợ bởi Oracle Corporation.
Là các chương trình MySQL khả dụng để giao tiếp với server. Dành cho mục đích quản trị, các phần quan trong được liệt kê dưới đây:
• mysql — Một chương trình tương tác cho phép bạn gửi các câu lệnh SQL đến server và xem kết quả. Bạn cũng có thể sử dụng mysql để thực thi các script(file chứa câu lệnh SQL).
• mysqladmin — Một chương trình quản trị để thực hiện các tác vụ như tắt server, kiểm tra cấu hình hoặc theo dõi trạng thái của nó nếu nó có vẻ không hoạt động bình thường.
• mysqldump — Một công cụ để sao lưu cơ sở dữ liệu của bạn hoặc sao chép cơ sở dữ liệu sang một máy chủ khác.
• mysqlcheck & myisamchk — Các chương trình giúp bạn thực hiện kiểm tra, phân tích và tối ưu hóa bảng, cũng như sửa chữa nếu bảng bị hỏng. mysqlcheck hoạt động với các bảng MyISAM và ở một mức độ nào đó với các bảng cho các công cụ lưu trữ khác. myisamchk chỉ được sử dụng với các bảng MyISAM.
Có 3 kiểu quan hệ trong MySQL
- One-to-One: là mối quan hệ giữa hai bảng trong đó mỗi bản ghi trong một bảng được liên kết với tối đa một bản ghi trong bảng kia.
- One-to-Many: là mối quan hệ được sử dụng phổ biến nhất trong đó một bản ghi trong bảng được liên kết với nhiều bản ghi trong bảng khác.
- Many-to-Many: được sử dụng trong các trường hợp khi cần có nhiều thực thể ở cả hai bên để tạo mối quan hệ.
Như bạn có thể thấy trên hình, kiến trúc logic của MySQL gồm 3 layers chính.
- Layer trên cùng chỉ ra các services mà MySQL cung cấp cho các hệ thống mạng client/server bao gồm xử lí kết nối, xác thực, bảo mật.
- Layer ở giữa, là trung tâm xử lí của MySQL bao gồm việc phân tích câu truy vấn, tối ưu hóa, caching và các hàm sẵn có trong MySQL.
- Layer dưới cùng bao gồm storage engine chịu trách nhiệm cho với lưu trữ và lấy ra dữ liệu. Các storage engine phổ biến hiện nay của MySQL là InnoDB và MyISAM
Trong MySQL, khả năng mở rộng thực ra là khả năng xử lý tải và sẽ hữu ích khi nghĩ về tải từ một số góc độ khác nhau như:
- Số lượng dữ liệu
- Số lượng người dùng
- Hoạt động người dùng
- Kích thước của các bộ dữ liệu liên quan
harding là một mẫu kiến trúc cơ sở dữ liệu liên quan đến phân vùng ngang - thực tế tách một hàng bảng Bảng thành nhiều bảng khác nhau, được gọi là partitions. Mỗi partitions có cùng schema và cột, nhưng cũng có các hàng hoàn toàn khác nhau. Tương tự, dữ liệu được giữ trong mỗi partitions là duy nhất và độc lập với dữ liệu được giữ trong các partitions khác.
Có thể hữu ích khi so sánh suy nghĩ về phân vùng ngang theo cách nó liên quan đến phân vùng dọc. Trong một bảng được phân vùng theo chiều dọc, toàn bộ các cột được tách ra và đưa vào các bảng mới, riêng biệt. Dữ liệu được giữ trong một phân vùng dọc độc lập với dữ liệu trong tất cả các phân vùng khác và mỗi dữ liệu chứa cả các hàng và cột riêng biệt. Sơ đồ sau minh họa cách bảng có thể được phân vùng theo cả chiều ngang và chiều dọc
Để có thể sử dụng transaction cơ sở của MySQL, bạn phải sử dụng storage engine InnoDB của MySQL. Đây là Storage Engine mặc định trong MySQL 5.7. InnoDB là một Storage Engine transaction-safe (tuân thủ ACID) cho MySQL có các commit, rollback và khả năng khôi phục lỗi để bảo vệ dữ liệu người dùng. Row-level locking của InnoDB và kiểu nonlocking read của Oracle-style làm tăng sự đồng thời và hiệu suất của nhiều người dùng. InnoDB lưu trữ dữ liệu người dùng trong các clustered indexes để giảm I/O cho các truy vấn thông thường dựa trên các primary key. Để duy trì tính toàn vẹn của dữ liệu, InnoDB cũng hỗ trợ các ràng buộc toàn vẹn Foreign Key.