Nội dung
MySQL là gì?
MySQL là một hệ quản trị cơ sở dữ liệu quan hệ mã nguồn mở được sử dụng ở khắp các công ty lớn trong các lĩnh vực công nghệ hiện đại. Từ khi được tạo ra, MySQL đã tự thiết lập mình là tiêu chuẩn công nghiệp để tạo và thao tác quan hệ cơ sở dữ liệu.
Để hiểu cơ sở dữ liệu MySQL, chúng ta phải chia nhỏ thành hai nhánh cơ bản: Hệ quản trị cơ sở dữ liệu và SQL Tables.
Sau đó, chúng ta sẽ thực hành một ví dụ về cách xây dựng, chèn dữ liệu và thao tác chương trình MySQL của riêng mình bằng cách sử dụng SQL chuẩn.
Ở bài viết này, chúng ta cùng tìm hiều về MySql:
- Tổng quan về hệ thống quản lý cơ sở dữ liệu
- Giới thiệu về SQL Tables
- Phân tích các phần của MySQL
- Ưu điểm của MySQL
- Các kiểu dữ liệu phổ biến trong MySQL
- Ví dụ về lưu trữ ticket hỗ trợ
- Thực hành thêm
Tổng quan về hệ quản trị cơ sở dữ liệu MySQL
Nói rộng ra, hệ quản trị cơ sở dữ liệu là một nhánh công cụ được các nhà phát triển sử dụng để tạo, duy trì và xóa nhiều cơ sở dữ liệu. Bằng cách hợp lý hóa quá trình tạo cơ sở dữ liệu, các hệ thống này cho phép các nhà phát triển một cách nhanh chóng tạo cơ sở dữ liệu và thân thiện với người dùng, chỉ định các tập hợp con dữ liệu thông qua các bảng và thao tác với dữ liệu trong nó.
Chúng cũng đi kèm với nhiều lợi ích về chất lượng như:
- Lập chỉ mục tự động cập nhật sau khi bổ sung một mục mới và các khuôn khổ để làm việc với nhiều bảng cùng một lúc,
- Đảm bảo tính toàn vẹn tham chiếu, đảm bảo tất cả các chỉ mục được ghi lại và liên kết nếu cùng một dữ liệu xuất hiện nhiều lần trên các bảng khác nhau,
- Khả năng kết hợp dữ liệu từ các bảng riêng biệt khác nhau để hoàn thành một yêu cầu của người dùng.
Giới thiệu về SQL Tables
Một khía cạnh quan trọng khác để hiểu MySQL là làm quen với Structural Query Language Tables (SQL Tables), thành phần cơ bản của bất kỳ chương trình MySQL nào.
SQL Tables là một cách lưu trữ dữ liệu trong các bảng kỹ thuật số. Chúng được tổ chức thành các cột được định nghĩa chặt chẽ để xác định loại và kích thước của tất cả dữ liệu trong cột đó. Tiêu chí của các cột này là một phần quan trọng của bất kỳ lược đồ cơ sở dữ liệu nào.
Hệ thống SQL Table này được sử dụng bởi MySQL và nhiều hệ quản trị cơ sở dữ liệu quan hệ khác hiện nay.
Cơ sở dữ liệu SQL Tables là một ví dụ về cơ sở dữ liệu quan hệ. Các cột trong bảng sắp xếp dữ liệu dựa trên các thuộc tính chia sẻ của chúng và mối quan hệ với các điểm dữ liệu khác.
Phân tích các thành phần của MySQL
Giống như các hệ quản trị cơ sở dữ liệu quan hệ khác (RDBMS), mọi khía cạnh của MySQL được chia thành các cấp dựa trên các mối quan hệ.
Mỗi cấp ngày càng cụ thể hơn, cho phép các nhà phát triển tinh chỉnh khả năng truy cập của từng tập hợp con trong suốt chương trình.
MySQL Server Layer
Code của MySQL là máy chủ MySQL. Máy chủ có thể truy cập được như một thư viện riêng biệt có thể được nhúng vào các ứng dụng của bạn để xử lý các lệnh cơ sở dữ liệu.
Tất cả các khía cạnh của một chương trình MySQL tương tác với máy chủ MySQL theo một cách nào đó.
Database
Đây là lớp cao nhất và rộng nhất trong các lớp của chúng ta, hoạt động như một vùng chứa cho tất cả các lớp bên dưới nó. Nó là một tập hợp dữ liệu có cấu trúc, nếu không có, MySQL sẽ không hoạt động. Nhiều database có thể có trong bất kỳ chương trình nhất định nào, cho phép các nhà phát triển xây dựng các tập hợp bảng con riêng biệt trong cùng một chương trình.
Ví dụ: một hộ gia đình có thể tạo một chương trình MySQL duy nhất chứa cơ sở dữ liệu riêng biệt cho từng thành viên, tổ chức tất cả các bảng dữ liệu sau này để liên hệ đến các thành viên gia đình đã được định nghĩa.
Table
Table là lớp thứ hai của chúng ta, các table là vị trí lưu trữ cho các tập con dữ liệu liên quan. Nhiều table có thể tồn tại trong một cơ sở dữ liệu, với một table cho mỗi danh mục do người dùng định nghĩa. Các truy vấn phải chỉ rõ chúng đang hoạt động trong table nào, đảm bảo sự giao nhau ngẫu nhiên hoặc thời gian chạy kéo dài. Điều này cũng có ích cho quyền riêng tư, vì đôi khi chúng tôi có thể muốn in một trong các table của mình nhưng vẫn ẩn table kia.
Ví dụ, mỗi database của thành viên gia đình trong chương trình hộ gia đình của chúng ta có thể có một bảng cho những món quà sinh nhật được yêu cầu TABLE GIFTS và một bảng khác dành cho mật khẩu riêng tư TABLE PASSWORDS.
Column
Column là tiếp tục chia nhỏ của table, các giá trị trong column đó chứa phải được định nghĩa là một kiểu dữ liệu. Mỗi column trong table có thể là một kiểu dữ liệu khác nhau và tiếp tục chia dữ liệu thành các tập con theo ngữ cảnh. Các colum đặc biệt hữu ích để chỉ định thông tin mà tất cả các hàng trong table phải có (ngay cả khi nó chỉ là NULL) và lưu trữ giá trị của hàng đó tách biệt với tất cả các hàng khác.
Ví dụ: table trước đây của chúng ta là GIFTS có thể có ba column: một column liệt kê tên sản phẩm – ProductName, hai cột khác liệt kê người bán sản phẩm – ProductSeller và niêm yết giá – Price. Hai column đầu tiên trong số các column này sẽ chứa các giá trị chuỗi trong khi column cuối sẽ chứa một giá trị số.
Row
Row là cấp nhỏ nhất và hoạt động tương tự như column, trong khi các column hiển thị mối quan hệ trong một loại, các row được nhóm lại dựa trên những cách ít rõ ràng hơn. Mỗi row trong table có một khóa cụ thể trỏ đến nó.
Điều này được hiểu rõ nhất thông qua ví dụ. Bên trong GIFTS, chúng ta có thể chèn một row có giá trị xác định cho mỗi column: “Mug” cho ProductName, “Mug Co.” cho ProductSellervà “15,50” cho Price. Nếu không có những biến này trên cùng một row, người dùng sẽ không có cách nào để thấy mối liên hệ giữa bất kỳ biến nào trong số ba biến này vì chúng là các giá trị khác nhau và các kiểu khác nhau. Tuy nhiên, vì chúng được liệt kê dưới cùng một hàng, nên dễ dàng thấy rằng tất cả các giá trị này đều liên quan đến cùng một đối tượng.
Query
Trong MySQL, query là lệnh để lấy dữ liệu từ một table. Điều này thường được thực hiện thông qua lệnh SELECT và là loại lệnh phổ biến nhất được sử dụng cho hoạt động của table.
Ưu điểm của mySQL
Là một hệ quản trị cơ sở dữ liệu quan hệ, MySQL có tất cả các ưu điểm trên của Hệ quản trị cơ sở dữ liệu và SQL Tables được tích hợp sẵn, nhưng cũng đổi mới dựa trên nền tảng đó với một số tính năng độc đáo. Dưới đây là bảng phân tích các điểm mạnh lớn nhất của MySQL:
Các kiểu dữ liệu phổ biến trong MySQL
Trước khi đi vào code ví dụ, trước tiên hãy xem cú pháp cho các kiểu dữ liệu cơ bản của MySQL, khi mỗi kiểu được sử dụng thì sẽ có kết quả và bố cục gì độc đáo.
Các kiểu chuỗi
CHAR (x)
Kiểu chuỗi đầu tiên của chúng ta là CHAR, có yêu cầu số ký tự x, được chỉ định khi tạo. Nếu chuỗi nhỏ hơn độ dài được chỉ định, MySQL sẽ đệm chuỗi bằng một số khoảng trắng cho đến khi đạt đến giới hạn ký tự. Đây là kiểu chuỗi tiết kiệm bộ nhớ nhất nhưng có thể bị hạn chế do yêu cầu ký tự cứng nhắc.
Ví dụ:
Nếu cột ProductNameđược tạo dưới dạng loại CHAR (10) thì với giá trị được lưu trữ là “Mug” thì sẽ có thêm bảy dấu cách sau từ “Mug”.
VARCHAR (x)
Kiểu chuỗi này khá giống với CHAR, khác là nó có thể cho phép độ dài ký tự khác nhau và không có dấu cách. Tuy nhiên, chuỗi không được chứa nhiều ký tự hơn số lượng x, được chỉ định khi tạo, nếu một chuỗi vượt quá giới hạn ký tự, thì nó sẽ bị cắt bớt để phù hợp.
VARCHAR sử dụng nhiều bộ nhớ hơn một chút so với kiểu CHAR nếu cả hai có độ ký tự dài bằng nhau. Tuy nhiên, sự khác biệt quá nhỏ (5 byte so với 4 cho cùng một chuỗi bốn ký tự) nên khó có thể nhận thấy trừ khi ở một dự án quy mô lớn. Do đó, VARCHAR nó được sử dụng rộng rãi hơn vì nó lưu trữ dữ liệu ở dạng sạch hơn mà không có nhược điểm đáng kể.
Các kiểu số
INTEGER
Đối với những người quen thuộc với các ngôn ngữ lập trình khác, kiểu INTEGER sẽ khá quen thuộc. Kiểu dữ liệu này chấp nhận một số nguyên trong khoảng từ -2147483648 đến 2147483647.
Thêm vào tiêu chuẩn SQL, MySQL cũng cho phép phân nhóm của TINYINT, MEDIUMINT và BIGINT, trong đó mỗi kiểu đều có tối thiểu và tối đa khác nhau, cũng như các yêu cầu lưu trữ khác nhau:
Ở bảng trên, mỗi loại số nguyên này có một yêu cầu lưu trữ khác nhau. Để tối đa hóa hiệu quả của các chương trình, cách tốt nhất là sử dụng kiểu số nguyên nhỏ nhất mức có thể để áp dụng cho cột.
NUMERIC (M, D)
Kiểu NUMERIC lưu các giá trị dữ liệu số dưới dạng số thập phân. Khi một cột thuộc loại này được định nghĩa, nó có thể được cung cấp một đặc điểm kỹ thuật cho số lượng hình có nghĩa lớn nhất có thể, M và D, số chữ số ở bên phải của vị trí thập phân cần giữ lại. Những điều này ảnh hưởng đến phạm vi của các số có thể, như với NUMERIC (4,2), phạm vi sẽ là -9999,99 đến 9999,99. Nó cũng cho phép nếu không xác định, 10 là giá trị mặc định cho M và 30 cho D.
Với INTEGER, nó là tốt nhất để giữ cho phạm vi thu nhỏ cần thiết cho hoạt động của ứng dụng.
Ví dụ: NUMERIC (4,4) cột Price, sẽ lưu trữ 15,50 dưới dạng “15,5000”, vì có bốn số có nghĩa và hai ở bên phải của số thập phân. Nếu Price thay bằng NUMERIC (5,4), 15.50 sẽ thay được lưu trữ như “015,5000”.
Các kiểu đặc biệt
Các kiểu đặc biệt đề cập đến dữ liệu không phải là chuỗi hoặc số trong biểu mẫu, làm cho danh mục này có phạm vi rộng. Trong khi có hàng tá kiểu dữ liệu đặc biệt trong MySQL, chúng ta sẽ chỉ xem xét một số kiểu dữ liệu đơn giản và dễ sử dụng nhất, DATE dùng để lưu trữ ngày tháng và ENUM dữ liệu chỉ với một số hợp lệ được chọn.
DATE và DATETIME
DATE là kiểu lưu trữ thông tin ngày tháng “yyyy-mm-dd”, từ những năm giữa “1000/01/01” và “9999-12-31”.
Để có thời gian chính xác hơn, chúng ta cũng có thể sử dụng kiểu DATETIME bao gồm tất cả thông tin của kiểu DATE nhưng cũng bao gồm thời gian ở dạng hh:mm:ss. Thời gian này sau đó sẽ tự động được chuyển đổi sang UTC để lưu trữ và sẽ được chuyển đổi trở lại múi giờ địa phương khi truy xuất.
Ưu điểm của các biểu mẫu này là chúng có thể được sắp xếp chính xác theo ngày cũng như theo các khía cạnh được chọn của ngày, chẳng hạn như tháng hoặc năm, mà không cần xem xét các khía cạnh không mong muốn khác của ngày.
ENUM (a, b, c)
Kiểu ENUM chấp nhận các giá trị chuỗi được lựa chọn từ một tập hợp các câu trả lời đã định nghĩa khi tạo cột, ở đây là a, b, và c.
Nếu một giá trị không hợp lệ được nhập, MySQL thay vào đó sẽ lưu trữ một chuỗi trống như một trường hợp lỗi đặc biệt. Điều này thường được sử dụng nhất khi tạo các trường phải được điền và chỉ có một số tùy chọn được chấp nhận.
Ví dụ: nếu chúng ta tạo một bảng khác MUGS, để lưu trữ thông tin về những chiếc cốc yêu thích của chúng tôi từ Mug Co., chúng ta có thể có một cột chỉ định màu sắc của chiếc cốc từ ba tùy chọn có sẵn của chúng:
ENUM (‘Đỏ’, ‘Xanh lam’, ‘Vàng’)
Ở đây, các lựa chọn hợp lệ của chúng ta là ‘Đỏ’, ‘Xanh lam’ và ‘Vàng’. Nếu một hàng được chèn với giá trị của cột này là MySQL ‘Màu tím’ thì nó sẽ lưu là một chuỗi trống.
Ví dụ về lưu trữ ticket hỗ trợ
Bây giờ, chúng ta sẽ chuyển sang một ví dụ về cách một chương trình SQL MySQL tiêu chuẩn có thể được xây dựng để xử lý các ticket hỗ trợ cho công ty quản lý trang web nhỏ có tên là Websites Incorporated, thực hiện các bước từ xây dựng cơ sở dữ liệu đến thêm mới và truy cập dữ liệu.
Tạo Database, Table, và các Column
Đầu tiên, chúng ta tạo database của mình tên là CustomerService, trong đó ta sẽ lưu trữ tất cả các table liên quan đến bộ phận đó. Sau đó, chúng ta sử dụng USE để chọn CustomerService để thực hiện các lệnh sau này.
Do quy mô doanh nghiệp của chúng ta nhỏ và sự mạnh mẽ của MySQL, về mặt lý thuyết, ta có thể có database cho từng bộ phận trong Websites Incorporated, tuy nhiên, chúng ta sẽ chỉ tập trung vào CustomerService trong bài tập này.
Khi có cơ sở dữ liệu cho chi nhánh dịch vụ khách hàng, chúng ta tạo một table để lưu trữ tất cả các ticket hỗ trợ mà chúng ta nhận được, được gọi là Tickets.
Trong table này, ta xác định năm cột dữ liệu mà mọi ticket sẽ có:
- Username sẽ lưu tên người dùng tài khoản của khách hàng dưới dạng một chuỗi (tối đa 25 ký tự).
- Email nơi lưu trữ email của khách hàng dưới dạng một chuỗi (tối đa 50 ký tự) để trả lời sau.
- DateRecieved để theo dõi thời ticket được tạo (ở dạng SQL DATE, YYYY-MM-DD).
- Device để lưu thiết bị gặp sự cố, có giá trị hợp lệ là ‘Mobile’ hoặc ‘Computer’.
- Description để lưu mô tả vấn đề bằng văn bản của khách hàng.
Để xác minh rằng chúng đã được tạo, chúng ta gõ lệnh SHOW TABLES.
Nếu chúng ta muốn tìm xem thêm về các cột của mình, sử dụng DESC TICKETS.
Ở đây chúng ta thấy tên và kiểu của mỗi cột là Field và Type. Ta cũng thấy cột có thể chấp nhận NULL thông qua Null hay không, cột hiện được lập chỉ mục với Key, giá trị mặc định cho mỗi cột Default và bất kỳ thông tin đặc biệt nào, chẳng hạn như nếu cột được tạo bằng tùy chọn Auto-Increment, với Extra.
Inserting Row
Table và các column đã được tao trên, hãy thử điền vào nó một số dữ liệu. Để làm điều này, ta sẽ sử dụng lệnh INSERT để thêm một hàng và chỉ định giá trị của nó cho mỗi cột trong số năm cột đó.
Ở đây ta thêm một hàng duy nhất cho một ticket của người dùng “PURPLEPANDA31”, trước tiên liệt kê các cột sẽ được điền, sau đó là giá trị cho từng cột trên hàng này.
Chúng ta cũng có thể thêm nhiều hàng chỉ với một lần sử dụng lệnh INSERT, bằng cách thêm một hàng khác vào phần VALUES.
Các lệnh INSERT có thể được sử dụng để đồng thời thêm một số hàng lên đến 65.535 ÷ số cột, ở ví dụ này tối đa là 13.000. Điều này có nghĩa là đối với hầu hết các ứng dụng, toàn bộ table có thể được lấp đầy chỉ bằng một lần thực thi INSERT duy nhất.
Querying Value
Bây giờ table đã có dữ liệu, chúng ta cần một cách để đọc hoặc truy vấn các giá trị. Để thực hiện, chúng ta sử dụng lệnh SELECT, lệnh này có thể truy vấn toàn bộ bảng, chọn các cột trong bảng hoặc chỉ các hàng có giá trị nhất định trong một cột được chỉ định.
Đối với truy vấn đầu tiên, chúng ta sẽ in toàn bộ bảng chỉ định rằng ta muốn tất cả các cột được in bằng * trong trường cột SELECT.
Cũng có thể chỉ truy vấn các cột nhất định của bảng. Ví dụ, nếu chúng ta chỉ quan tâm đến ngày của mỗi vấn đề này thì có thể in một bảng chỉ có cột Usernamevà DateRecieved.
Cuối cùng, nếu ta chỉ muốn in các ticket có thiết bị là “Computer”, ta có thể sử dụng lệnh WHERE kết hợp với SELECT để tìm kiếm và in các hàng mong muốn. Ở đây, chúng ta sẽ chỉ quan tâm đến ticket của các vấn đề trên máy tính, vì vậy chúng ta chỉ định rằng cột Device phải bằng “Computer” được truy vấn.
Kết thúc chương trình
Chúng ta đã đi qua các khái niệm cơ bản về việc tạo, chèn và truy vấn trong chương trình MySQL của mình, ta cần kết thúc chương trình và xóa database của ví dụ này để dành cho các dự án MySQL lớn hơn và tốt hơn sắp tới.
Thực hành thêm
Nếu bạn muốn thực hành nhiều hơn, hãy thử tạo một chương trình MySQL của riêng bạn bằng terminal với gợi ý dưới đây.
Gợi ý
Tạo cơ sở dữ liệu cho một chi nhánh khác của Websites Incorporated là DatabaseDesign. Trong cơ sở dữ liệu này, hãy tạo một bảng hai cột EmployeeOps, để lưu trữ thông tin về hệ điều hành của mỗi nhân viên làm việc. Cột đầu tiên sẽ lưu tên nhân viên và cột thứ hai sẽ lưu trữ một trong các giá trị sau “macOS”, “Windows” hoặc “Linux”.
Chèn các hàng cho mỗi nhân viên, hãy thử ít nhất một nhân viên cho mỗi hệ điều hành. Cuối cùng, truy vấn tất cả các cột của bất kỳ hàng nào mà nhân viên sử dụng “Linux”.
Đáp án
Kết luận
Bạn có thể thấy MySQL đơn giản và hiệu quả như thế nào trong việc tạo các bộ dữ liệu có cấu trúc cao. Do tính dễ sử dụng, khả năng ứng dụng và sự phổ biến trong thế giới công nghệ hiện đại, không có gì ngạc nhiên khi MySQL đã và sẽ tiếp tục là một công cụ thiết yếu.