Ngôn ngữ thao tác dữ liệu (DML) là gì?
Trong hệ thống thông tin, dữ liệu được biết đến là phần không thể thiếu. DML là ngôn ngữ dữ liệu chuyên dùng để tương tác, quản lý với dữ liệu trong cơ sở dữ liệu. Ở bài viết dưới đây, Bizfly Cloud sẽ giúp bạn hiểu rõ hơn ngôn ngữ thao tác dữ liệu là gì và các câu lệnh phổ biến trong DML.
Ngôn ngữ thao tác dữ liệu là gì?
Ngôn ngữ thao tác dữ liệu có tên tiếng anh là Data Manipulation Language, viết tắt là DML. Đây là nhóm ngôn ngữ chuyên dùng trong việc quản trị cơ sở dữ liệu giúp quá trình thao tác với dữ liệu của người dùng diễn ra hiệu quả hơn.
DML sẽ có các câu lệnh, thuật toán được dùng nhằm thao tác dữ liệu trong cơ sở dữ liệu thông qua việc truy xuất, chèn, sửa, xóa dữ liệu trong các bảng. Ngoài ra, ngôn ngữ này cũng sẽ được tích hợp trong RDBMS ( cơ sở dữ liệu quan hệ) để giúp quá trình quản lý, thao tác dữ liệu theo yêu cầu.
Các câu lệnh phổ biến trong DML
Trong DML sẽ có các câu lệnh phổ biến sau đây:
Lệnh SELECT
SELECT là một trong những lệnh cơ bản và quan trọng nhất trong SQL. Nó được sử dụng để truy xuất dữ liệu từ một hoặc nhiều bảng trong cơ sở dữ liệu. Lệnh SELECT cho phép người dùng chỉ định các cột cần lấy, áp dụng các điều kiện lọc, sắp xếp và nhóm dữ liệu.
Cú pháp của lệnh này là:
- SELECT column1, column2, ...
- FROM table_name
- WHERE condition;
Trong đó:
- SELECT chỉ định các cột cần lấy dữ liệu.
- FROM xác định bảng chứa dữ liệu.
- WHERE áp dụng điều kiện lọc để giới hạn kết quả trả về.
Các tính năng nâng cao:
- JOIN: Kết hợp dữ liệu từ nhiều bảng dựa trên mối quan hệ giữa các cột.
- GROUP BY: Nhóm dữ liệu dựa trên một hoặc nhiều cột.
- HAVING: Áp dụng điều kiện lọc cho các nhóm dữ liệu.
- ORDER BY: Sắp xếp dữ liệu theo thứ tự tăng dần hoặc giảm dần.
Lệnh INSERT
Lệnh INSERT được sử dụng để thêm dữ liệu mới vào bảng. Lệnh này cho phép chèn một hoặc nhiều hàng dữ liệu vào bảng.
Cú pháp của lệnh này là:
- INSERT INTO table_name (column1, column2, ...)
- VALUES (value1, value2, ...);
Trong đó:
- INSERT INTO xác định bảng và các cột cần chèn dữ liệu.
- VALUES cung cấp giá trị tương ứng cho các cột.
Các tính năng nâng cao:
- INSERT INTO SELECT: Chèn dữ liệu từ một bảng khác.
- ON DUPLICATE KEY UPDATE (trong MySQL): Cập nhật dữ liệu nếu xảy ra trùng khóa.
Lệnh UPDATE
Lệnh UPDATE được sử dụng để thay đổi dữ liệu trong bảng. Nó cho phép cập nhật một hoặc nhiều cột của các hàng đáp ứng điều kiện lọc.
Cú pháp của lệnh này là:
- UPDATE table_name
- SET column1 = value1, column2 = value2, ...
- WHERE condition;
Trong đó:
- UPDATE xác định bảng cần cập nhật dữ liệu.
- SET chỉ định các cột và giá trị mới.
- WHERE áp dụng điều kiện lọc để xác định các hàng cần cập nhật.
Các tính năng nâng cao:
- UPDATE JOIN: Cập nhật dữ liệu dựa trên kết quả của phép JOIN.
- RETURNING (trong PostgreSQL): Trả về dữ liệu đã được cập nhật.
Lệnh DELETE
Lệnh DELETE được sử dụng để xóa dữ liệu trong bảng. Nó cho phép xóa một hoặc nhiều hàng đáp ứng điều kiện lọc.
Cú pháp của lệnh này là:
- DELETE FROM table_name
- WHERE condition;
Trong đó:
- DELETE FROM xác định bảng cần xóa dữ liệu.
- WHERE áp dụng điều kiện lọc để xác định các hàng cần xóa.
Các tính năng nâng cao:
- DELETE JOIN: Xóa dữ liệu dựa trên kết quả của phép JOIN.
- RETURNING (trong PostgreSQL): Trả về dữ liệu đã bị xóa.
Lệnh MERGE
Lệnh MERGE được sử dụng để chèn hoặc cập nhật dữ liệu tùy thuộc vào việc dữ liệu đó đã tồn tại hay chưa. Lệnh MERGE kết hợp cả lệnh INSERT và UPDATE.
Cú pháp của lệnh này là:
- MERGE INTO target_table USING source_table
- ON (condition)
- WHEN MATCHED THEN
- UPDATE SET column1 = value1, column2 = value2, ...
- WHEN NOT MATCHED THEN
- INSERT (column1, column2, ...) VALUES (value1, value2, ...);
Trong đó:
MERGE INTO xác định bảng đích cần chèn hoặc cập nhật dữ liệu.
USING chỉ định bảng nguồn chứa dữ liệu mới.
ON xác định điều kiện khớp giữa hai bảng.
WHEN MATCHED chỉ định hành động cập nhật khi có hàng khớp.
WHEN NOT MATCHED chỉ định hành động chèn khi không có hàng khớp.
Các Best practices để sử dụng DML hiệu quả
Để sử dụng DML hiệu quả sẽ cần dùng đến các Best practices sau đây:
Sử dụng để truy vấn tham số
Truy vấn tham số là một trong những best practices quan trọng nhất. Dạng này giúp tăng cường bảo mật và hiệu suất của các truy vấn SQL. Khi sử dụng truy vấn tham số, bạn sẽ tránh được các cuộc tấn công SQL Injection, một loại tấn công mà kẻ xấu có thể chèn mã độc vào các câu truy vấn SQL.
-- Truy vấn không an toàn
query = "SELECT * FROM users WHERE username = '" + username + "';"
-- Truy vấn tham số hóa
query = "SELECT * FROM users WHERE username = ?"
cursor.execute(query, (username,))
Xử lý các giao dịch về dữ liệu đúng cách
Quản lý giao dịch) là một phần quan trọng trong việc sử dụng DML. Giao dịch giúp đảm bảo rằng các thao tác DML (INSERT, UPDATE, DELETE) được thực hiện một cách nguyên tử. Điều này có nghĩa là hoặc tất cả các thao tác đều được thực hiện thành công, hoặc không có thao tác nào được thực hiện cả. Việc sử dụng giao dịch giúp đảm bảo tính nhất quán của cơ sở dữ liệu.
BEGIN TRANSACTION;
-- Thực hiện nhiều thao tác DML
UPDATE accounts SET balance = balance - 100 WHERE account_id = 1;
UPDATE accounts SET balance = balance + 100 WHERE account_id = 2;
-- Nếu tất cả các thao tác đều thành công
COMMIT;
-- Nếu bất kỳ thao tác nào thất bại
ROLLBACK;
Xử lý các lỗi phát sinh
Trong quá trình làm việc với DML, lỗi là điều không thể tránh khỏi. Khi thực hiện các thao tác DML, bạn nên kiểm tra kết quả và xử lý các lỗi có thể phát sinh. Trong đó cách xử lý lỗi hiệu quả nhất đó là sử dụng các khối try-catch trong ngôn ngữ lập trình. Nó có tác dụng trong việc bắt các lỗi và xử lý chúng một cách phù hợp, đảm bảo rằng hệ thống không bị gián đoạn hoặc rơi vào trạng thái không nhất quán.
try:
cursor.execute("INSERT INTO users (username, email) VALUES (?, ?)", (username, email))
connection.commit()
except sqlite3.Error as error:
print("Failed to insert data into sqlite table", error)
connection.rollback()
finally:
if connection:
connection.close()
Xác thực và bảo mật dữ liệu đầu vào
Đây là bước quan trọng để đảm bảo rằng dữ liệu được lưu trữ trong cơ sở dữ liệu là chính xác và an toàn. Dữ liệu không được xác thực đúng cách có thể dẫn đến các vấn đề bảo mật nghiêm trọng, bao gồm cả SQL Injection.
Bạn cần kiểm tra và xác thực dữ liệu đầu vào từ người dùng trước khi sử dụng nó trong các truy vấn DML. Nó bao gồm việc kiểm tra định dạng, độ dài, và giá trị của dữ liệu.
def validate_user_input(username, email):
if not username or not email:
raise ValueError("Username and email cannot be empty")
if len(username) > 50 or len(email) > 100:
raise ValueError("Input exceeds allowed length")
if not re.match(r"[^@]+@[^@]+\.[^@]+", email):
raise ValueError("Invalid email format")
return True
Kiểm soát truy cập
Công đoạn này giúp đảm bảo rằng chỉ những người dùng hoặc ứng dụng có quyền mới có thể thực hiện các thao tác DML trên cơ sở dữ liệu. Nó giúp bảo vệ dữ liệu khỏi bị truy cập trái phép và đảm bảo các thao tác chỉ được thực hiện bởi những người có thẩm quyền.
Việc kiểm soát truy cập có thể được thực hiện thông qua việc sử dụng các quyền và vai trò trong hệ quản trị cơ sở dữ liệu. Bạn nên chỉ định quyền truy cập tối thiểu cần thiết cho từng người dùng hoặc ứng dụng, và thường xuyên xem xét và cập nhật các quyền này.
-- Tạo vai trò và gán quyền truy cập
CREATE ROLE data_editor;
GRANT SELECT, INSERT, UPDATE, DELETE ON users TO data_editor;
-- Gán vai trò cho người dùng
GRANT data_editor TO john_doe;
Sao lưu và giám sát
Sao lưu và giám sát là hai best practices giúp dữ liệu luôn an toàn và có thể khôi phục lại được trong trường hợp có sự cố. Việc sao lưu thường xuyên giúp bạn khôi phục lại dữ liệu trong trường hợp bị mất mát hoặc hỏng hóc.
Ngoài ra, giám sát các thao tác DML cũng giúp phát hiện sớm các vấn đề và xử lý chúng kịp thời. Bạn nên thiết lập các công cụ giám sát để theo dõi các truy vấn SQL, hiệu suất của cơ sở dữ liệu, và các sự kiện bất thường.
-- Tạo bản sao lưu
BACKUP DATABASE my_database TO DISK = 'C:\backups\my_database.bak';
-- Thiết lập giám sát
CREATE EVENT SESSION [MonitorDML]
ON SERVER
ADD EVENT sqlserver.sql_statement_completed
(SET collect_statement = (1))
ADD TARGET package0.event_file
(SET filename = 'C:\monitoring\DMLActivity.xel');
Trên đây là toàn bộ các thông tin liên quan đến ngôn ngữ quản lý dữ liệu. Có thể thấy DML là công cụ cần thiết giúp quá trình làm việc với cơ sở dữ liệu diễn ra hiệu quả hơn. Nhưng bạn cũng cần chú ý, trong quá trình sử dụng cần hết sức cẩn thận để tránh dữ liệu bị mất.