Dữ liệu là một tài nguyên quan trọng trong hệ thống thông tin hiện đại. Việc sử dụng ngôn ngữ thao tác dữ liệu như DML là một phần quan trọng để quản lý và tương tác với dữ liệu trong cơ sở dữ liệu. Trong bài blog này, chúng ta sẽ khám phá sâu hơn về các khái niệm cơ bản của ngôn ngữ thao tác dữ liệu, những lợi ích và hạn chế của việc sử dụng nó cũng như những ví dụ cụ thể để hiểu rõ hơn về cách thức hoạt động của DML trong môi trường cơ sở dữ liệu.
Đọc bài viết này để hiểu về:
- Ngôn ngữ thao tác dữ liệu là gì? Có những loại nào?
- Các lệnh trong ngôn ngữ thao tác dữ liệu
- Ưu điểm và hạn chế của ngôn ngữ thao tác dữ liệu
- Ngôn ngữ thao tác dữ liệu có gì khác biệt so với các loại ngôn ngữ liên quan đến dữ liệu khác?
Ngôn ngữ thao tác dữ liệu là gì?
Ngôn ngữ thao tác dữ liệu, hay còn gọi là DML (Data Manipulation Language), là một nhóm ngôn ngữ được sử dụng trong các hệ quản trị cơ sở dữ liệu (DBMS) để cho phép người dùng diễn tả các yêu cầu thao tác đối với dữ liệu.
DML bao gồm các toán tử và câu lệnh được sử dụng để thao tác dữ liệu trong cơ sở dữ liệu, từ việc chèn, truy xuất, xóa đến sửa đổi dữ liệu hiện có trong các bảng.
Đặc biệt, DML thường được tích hợp trong cơ sở dữ liệu quan hệ (RDBMS), là một phần của SQL, cung cấp cho người dùng các công cụ mạnh mẽ để thao tác và quản lý dữ liệu theo các yêu cầu cụ thể.
Các loại ngôn ngữ thao tác dữ liệu
Ngôn ngữ thao tác dữ liệu (DML) được chia thành hai loại cơ bản: DML phi thủ tục (Non-Procedural DML) hay còn gọi là High-Level (cấp cao) và DML theo thủ tục (Procedural DML) hay còn gọi là Low-Level (cấp thấp). Dưới đây là mô tả sự khác biệt giữa hai loại này:
Tiêu chí |
DML phi thủ tục (Non-Procedural DML) |
DML thủ tục (Procedural DML) |
Cách xử lý dữ liệu |
Được thiết lập để xử lý một tập dữ liệu trong cùng một thời điểm hoặc được thiết kế để tập trung vào thực hiện các thao tác theo chuỗi (series oriented), giúp kiểm soát và tổ chức việc thao tác dữ liệu một cách có hệ thống và đảm bảo tính nhất quán trong quá trình xử lý. | Thực hiện các thao tác dữ liệu theo từng bước hoặc theo từng dòng một (track-at-a-time), đòi hỏi người sử dụng phải cung cấp các hướng dẫn cụ thể về cách xử lý dữ liệu một cách chi tiết. |
Tính độc lập | Có thể được sử dụng độc lập để xác định chính xác các hoạt động phức tạp trong cơ sở dữ liệu. |
Phải được tích hợp vào một ngôn ngữ lập trình. |
Cách truy xuất dữ liệu |
Khi sử dụng DML phi thủ tục, người dùng chỉ cần chỉ ra những dữ liệu nào cần thiết mà không cần phải quan tâm đến cách thức và thời điểm thu thập dữ liệu đó | Khi sử dụng DML thủ tục, người dùng không chỉ đơn thuần phải mô tả những dữ liệu cần thiết, mà còn phải mô tả cách thức và thời điểm thu thập dữ liệu đó. |
Ví dụ | Ví dụ, trong SQL, câu lệnh SELECT là một High-Level DML, người dùng chỉ cần chỉ định các tiêu chí truy vấn và hệ quản trị cơ sở dữ liệu sẽ tự động lấy dữ liệu phù hợp và trả về kết quả cho người dùng. |
Ví dụ, trong ngôn ngữ PL/SQL của DB2 và Oracle,, người dùng có thể sử dụng các câu lệnh IF, LOOP và các vòng lặp khác để duyệt qua từng bản ghi trong một tập hợp dữ liệu và thực hiện các thao tác cần thiết trên từng bản ghi đó. Người dùng phải xác định cách lấy và xử lý từng bản ghi dữ liệu một cách riêng lẻ. |
Các lệnh cơ bản trong ngôn ngữ thao tác dữ liệu
SELECT
Lệnh SELECT được sử dụng để truy vấn một hoặc nhiều bản ghi từ một hoặc nhiều bảng dữ liệu dựa trên các điều kiện cụ thể.
- Cú pháp cơ bản:
SELECT column1, column2, ... FROM <table_name>;
Ví dụ:
Để lấy cột Name và Age của các sinh viên từ bảng Students, ta có thể viết như sau:
SELECT Name, Age FROM Students;
- Cú pháp truy vấn nhiều bảng:
Để truy vấn nhiều bảng dữ liệu cùng một lúc, chúng ta thường sử dụng các phép kết như INNER JOIN, LEFT JOIN, RIGHT JOIN và FULL JOIN để kết hợp dữ liệu với nhau. Các loại truy vấn này cho phép kết hợp dữ liệu từ nhiều nguồn khác nhau dựa trên các điều kiện cụ thể.
Dưới đây là cú pháp về INNER JOIN:
SELECT table1.column1, table2.column2, ... FROM table1 INNER JOIN table2 ON table1.common_column = table2.common_column;
Ví dụ: Để lấy thông tin về sinh viên và khóa học mà họ đăng ký từ hai bảng Students và Courses ta có thể viết như sau:
SELECT Students.Name, Courses.CourseID FROM Students INNER JOIN Courses ON Students.StudentID = Courses.StudentID;
- Cú pháp SELECT * để lấy tất cả các cột của 1 bảng:
SELECT * FROM <table_name>;
Ví dụ: Để lấy thông tin của tất cả các sinh viên từ bảng Students ta có thể viết như sau:
SELECT * FROM Students;
- Sử dụng WHERE để chỉ định điều kiện truy vấn:
SELECT column1, column2, ... FROM <table_name> WHERE condition;
Ví dụ: Để lấy thông tin của các sinh viên từ năm 1, ta có thể viết như sau:
SELECT * FROM Students WHERE Year = 1 AND Age < 20;
INSERT
INSERT là câu lệnh cho phép thêm các bản ghi mới vào một bảng, mở rộng thông tin được lưu trữ trong cơ sở dữ liệu.
- Cú pháp:
INSERT INTO <table_name> ('column_name1', 'column_name2', …) VALUES ('value1', 'value2');
- Ví dụ:
Để thêm thông tin học sinh ta có thể viết như sau:
INSERT INTO Students (StudentID, FullName, Age, Major) VALUES (009, 'Nguyen Van A', 20, 'Computer Science');
Hoặc để thêm thông tin của nhiều học sinh ta có thể viết như sau:
INSERT INTO Students (StudentID, FullName, Age, Major) VALUES (009, 'Nguyen Van A', 20, 'Computer Science') (010, 'Nguyen D', 20, 'Data Science'), (011, 'Bob', 21, 'IT');
UPDATE
Lệnh UPDATE được sử dụng để cập nhật thông tin cho các bản ghi có sẵn trong bảng mà không làm thay đổi cấu trúc của bảng đó. Lệnh này cho phép thực hiện các thay đổi linh hoạt và cập nhật thông tin một cách đồng nhất trong cơ sở dữ liệu.
- Cú pháp:
UPDATE <table_name> SET <column_name = value> WHERE condition;
- Ví dụ:
Để cập nhật thông tin tuổi của sinh viên có StudentID là 101 từ 20 tuổi thành 21 tuổi ta có thể viết như sau:
UPDATE Students SET Age = 21 WHERE StudentID = 101;
DELETE
Lệnh DELETE được sử dụng để xóa các bản ghi từ bảng được chỉ định với điều kiện xác định. Khi sử dụng lệnh DELETE, dữ liệu sẽ bị xóa vĩnh viễn và không thể khôi phục lại, do đó cần phải lưu ý và cẩn thận khi sử dụng.
- Cú pháp:
DELETE FROM <table_name> WHERE <condition>;
- Ví dụ:
Để xoá dữ liệu của các sinh viên hơn 22 tuổi, ta có thể sử dụng như sau:
DELETE FROM Students WHERE Age > 22;
Ưu điểm của ngôn ngữ thao tác dữ liệu
- Các câu lệnh DML cho phép thay đổi dữ liệu được lưu trữ trong cơ sở dữ liệu
- Tạo ra một giao tiếp hiệu quả giữa người và máy
- Người dùng có thể chỉ định dữ liệu cần thiết từ cơ sở dữ liệu
- DML có nhiều loại, nhiều chức năng khác nhau giữa các nhà cung cấp cơ sở dữ liệu và dễ dàng tích hợp với các công nghệ, ứng dụng khác
- DML có cú pháp đơn giản và trực quan, giúp người dùng dễ sử dụng
- DML có hỗ trợ Transaction, đảm bảo tính toàn vẹn và nhất quán của dữ liệu
Nhược điểm của ngôn ngữ thao tác dữ liệu
- Không thể sử dụng DML để thay đổi cấu trúc cơ sở dữ liệu
- Có thể truy cập dữ liệu mà không cần phải lưu trữ dữ liệu đó trong đối tượng nào đó trước đó. Điều này có thể tạo ra một số vấn đề liên quan đến bảo mật và kiểm soát dữ liệu.
- Bị giới hạn trong việc xây dựng hoặc xóa các danh sách hoặc phần của dữ liệu trong phạm vi quyền hạn được cấp, không thể tự ý thêm, xóa hoặc thay đổi cấu trúc của dữ liệu nhằm duy trì tính toàn vẹn và an ninh của dữ liệu.
- Sử dụng không đúng cách sẽ dẫn đến những lỗ hổng bảo mật như SQL Injection
- Bị phụ thuộc vào CSDL: Bởi vì mỗi loại CSDL có thể có những điểm khác biệt trong cú pháp của DML
Câu hỏi thường gặp về ngôn ngữ thao tác dữ liệu
Ngôn ngữ thao tác dữ liệu (DML), ngôn ngữ định nghĩa dữ liệu (DDL) và ngôn ngữ kiểm soát dữ liệu (DCL) và có gì khác nhau?
Tiêu chí |
DML | DDL | DCL |
Định nghĩa | DML là viết tắt của Data Manipulation Language, được sử dụng để quản lý dữ liệu trong cơ sở dữ liệu. | DDL là viết tắt của Data Definition Language, được sử dụng để định nghĩa cấu trúc của cơ sở dữ liệu. |
DCL là viết tắt của Data Control Language, được sử dụng để kiểm soát quyền truy cập và phân quyền của cơ sở dữ liệu. |
Phạm vi ảnh hưởng |
DML chỉ ảnh hưởng đến dữ liệu được chỉ định của bảng. | DDL ảnh hưởng đến bảng hoặc dữ liệu trong bảng. | DCL áp dụng cho bảng hoặc cơ sở dữ liệu tùy thuộc vào cấp độ truy cập. |
Tính đồng nhất và đảm bảo dữ liệu trong SQL | Các thay đổi trong DML không tự động commit (không vĩnh viễn) và có thể hoàn tác. | Những thay đổi được thực hiện bởi DDL được tự động commit (vĩnh viễn) . |
Các thay đổi trong DCL như các lệnh GRANT và REVOKE thường được tự động commit (vĩnh viễn) và không thể hoàn tác. |
Chức năng |
Giúp định nghĩa các dòng hoặc bản ghi của bảng | Giúp định nghĩa các trường hoặc cột của bảng | Giúp kiểm soát quyền truy cập vào thông tin trong cơ sở dữ liệu. |
Các lệnh sử dụng | Các lệnh sử dụng trong DML: SELECT, UPDATE, DELETE, INSERT. | Các lệnh sử dụng trong DDL: CREATE, ALTER, TRUNCATE, RENAME, DROP. |
Các lệnh sử dụng trong DCL: REVOKE, GRANT. |
Nếu bạn muốn tìm hiểu chi tiết hơn về các loại ngôn ngữ này, bạn có thể đọc thêm bài SQL Database.
Transaction là gì trong DML?
Transaction là một chuỗi các lệnh DML được thực thi như một đơn vị riêng biệt. Nếu bất kỳ lệnh nào trong transaction thất bại, toàn bộ transaction có thể được hoàn tác để duy trì tính nhất quán của dữ liệu.
DML có tương tác với các quyền hạn (permissions) không?
Có, quyền hạn DCL (Data Control Language) quản lý ai có thể thực hiện các lệnh DML trên các bảng cụ thể. Ví dụ, một người dùng phải có quyền INSERT để thêm dữ liệu vào bảng.
Tổng kết về Ngôn ngữ thao tác dữ liệu
DML là một công cụ mạnh mẽ và cần thiết cho việc làm việc với cơ sở dữ liệu. Bằng cách sử dụng DML, chúng ta có thể truy vấn, cập nhật và xóa dữ liệu một cách linh hoạt và hiệu quả. Hiểu rõ về DML sẽ giúp chúng ta xây dựng và quản lý các ứng dụng và hệ thống cơ sở dữ liệu phức tạp. Tuy nhiên, cũng cần lưu ý rằng việc sử dụng DML cần phải cẩn thận để tránh các hậu quả không mong muốn như mất dữ liệu quan trọng.