Khóa học
SQL rất cần thiết với các nhà khoa học dữ liệu và kỹ sư dữ liệu để truy xuất thông tin từ cơ sở dữ liệu. Một cơ sở dữ liệu gồm nhiều bảng và có nhiều “phiên bản” SQL khác nhau, từ PostgreSQL đến Snowflake.
Các lệnh Ngôn ngữ Định nghĩa Dữ liệu (DDL) trong SQL được dùng để xác định và quản lý cấu trúc của các đối tượng cơ sở dữ liệu. Trong bài viết này, tôi sẽ giải thích các lệnh DDL trong SQL kèm ví dụ với một Cơ sở dữ liệu Phim. Hãy bắt đầu nhé!
Các lệnh DDL trong SQL là gì?
Các lệnh Ngôn ngữ Định nghĩa Dữ liệu (DDL) cho phép tôi xác định và quản lý một schema trong SQL. Tóm lại, một schema trong SQL là bản thiết kế xác định cách dữ liệu được tổ chức trong cơ sở dữ liệu và cách quản lý các mối quan hệ giữa các bảng trong cơ sở dữ liệu.
Các lệnh DDL gồm nhiều lệnh với các chức năng khác nhau, mà tôi sẽ lần lượt trình bày theo thứ tự sau:
|
Lệnh DDL |
MÔ TẢ |
CÚ PHÁP |
|
|
Tạo một bảng và các cột của nó cùng kiểu dữ liệu tương ứng. |
|
|
|
Sửa tên cột và thêm hoặc xóa cột. |
|
|
|
Đổi tên bảng. |
|
|
|
Thêm giải thích vào mã SQL để các thành viên khác trong nhóm xem xét. |
|
|
|
Xóa dữ liệu khỏi bảng mà không xóa bảng. |
|
|
|
Xóa bảng cùng toàn bộ dữ liệu của nó. |
|
Các lệnh DDL trong SQL kèm ví dụ
Giờ chúng ta đã hiểu cơ bản về các lệnh DDL và mục đích của chúng, hãy xem một vài ví dụ thực tế với cơ sở dữ liệu Phim.
Lệnh CREATE trong SQL
Khi tôi cần tạo một bảng mới, tôi dùng lệnh CREATE TABLE như sau:
CREATE TABLE table_name (
column_1 datatype,
column_2 datatype,
...,
column_n datatype
);
Trong ví dụ trên, tôi định nghĩa các cột với những kiểu dữ liệu khác nhau. SQL hỗ trợ nhiều kiểu dữ liệu, nhưng phổ biến nhất thường là STRING (văn bản), INT (số nguyên), FLOAT (số thập phân) và DATE (ngày).
Ví dụ, nếu tôi muốn tạo bảng actor, tôi dùng CREATE TABLE như sau:
CREATE TABLE actor (
actor_id String(32767),
first_name String(32767),
last_name String(32767),
last_update String(32767)
);
Trong đó:
actorlà tên bảngactor_idlà tên cột có nội dung dự kiến ở dạng văn bản (String) và không vượt quá 32767 ký tự.first_namelà tên cột có nội dung dự kiến ở dạng văn bản (String) và không vượt quá 32767 ký tự.last_namelà tên cột có nội dung dự kiến ở dạng văn bản (String) và không vượt quá 32767 ký tự.last_updatelà tên cột có nội dung dự kiến ở dạng văn bản (String) và không vượt quá 32767 ký tự.
Sau khi tôi thực thi truy vấn, bảng mới sẽ hiển thị cùng các bảng khác, và tôi có thể truy vấn từ đó bất cứ lúc nào.
Lệnh ALTER trong SQL
Dùng ALTER trong SQL, tôi có thể cập nhật một bảng mà không cần tạo bảng khác rồi xóa bảng cũ. Các tổ chức có thể sở hữu hàng nghìn bảng, nên biết cách giữ dữ liệu luôn cập nhật mà không làm mất dữ liệu là điều thiết yếu.
Lưu ý rằng có nhiều cách dùng ALTER, bao gồm:
- Thêm cột mới vào bảng
- Đổi tên cột trong bảng
- Chỉnh sửa cột trong bảng
- Xóa cột trong bảng
Lệnh ADD trong ALTER
Để thêm cột mới bằng ALTER, chúng ta kết hợp lệnh ALTER với ADD, như dưới đây:
ALTER TABLE table_name ADD column_name datatype;
Ở đây, chúng ta thêm cột mới nationality với kiểu dữ liệu STRING vào bảng actor.
ALTER TABLE actor ADD nationality String(32767);
Tất cả các lệnh ALTER trong SQL đều có cấu trúc tương tự, khiến SQL trở thành một ngôn ngữ lập trình tự nhiên để học và thành thạo.
Lệnh RENAME trong ALTER
Bất cứ khi nào tôi cần đổi tên cột, tôi dùng lệnh RENAME trong ALTER như sau:
ALTER TABLE table_name RENAME COLUMN old_column_name TO new_column_name;
Ví dụ, hãy đổi tên cột last_name thành family_name để tránh nhầm lẫn đó là tên đệm hay họ. Khi đó, tôi sẽ chạy truy vấn sau:
ALTER TABLE actor RENAME COLUMN last_name TO family_name;
Lệnh MODIFY trong ALTER
Kiểu dữ liệu xác định thuộc tính của cột và ảnh hưởng đến chất lượng dữ liệu. Chẳng hạn, last_update được đặt là String(text), nhưng dữ liệu rõ ràng thể hiện ngày và giờ.
Xem xét các kiểu dữ liệu khác nhau và đối chiếu với dữ liệu trong cột, kiểu dữ liệu phù hợp là TIMESTAMP.
Cập nhật đúng kiểu dữ liệu cho cột sẽ giúp tổng hợp và lọc dữ liệu theo ngày bằng các lệnh SQL khác. Đây là cách chúng ta dùng MODIFY trong SQL:
ALTER TABLE table_name ALTER COLUMN column_name datatype;
Áp dụng vào cột last_update như trên, tôi dùng truy vấn sau:
ALTER TABLE actor ALTER COLUMN last_update TIMESTAMP;
Lệnh DROP trong ALTER
Tùy chọn cuối cùng mà ALTER cung cấp là xóa một cột. Có rất nhiều lý do để tôi cần DROP một cột, bao gồm nhưng không giới hạn ở:
- Thông tin không còn phù hợp,
- Thông tin trùng lặp, cùng cột đó đã có ở bảng khác,
- Vấn đề chất lượng dữ liệu,
- Tối ưu hóa không gian lưu trữ.
Xóa cột trong SQL rất dễ, nhưng hãy thận trọng vì không phải lúc nào cũng có thể hoàn tác thao tác xóa cột.
ALTER TABLE table_name DROP COLUMN column_name;
Lệnh xóa cột tương tự với đổi tên cột, nhưng hai việc này không giống nhau. Đổi tên cột giữ nguyên dữ liệu trong cột nhưng thay đổi tiêu đề. Ngược lại, lệnh DROP xóa cả dữ liệu và tiêu đề, như thể cột đó chưa từng tồn tại.
Sau khi nhận ra cột last_update hầu như chỉ cho biết cơ sở dữ liệu được làm mới hay không, tôi quyết định xóa nó bằng truy vấn sau:
ALTER TABLE actor DROP COLUMN last_update;
Lệnh RENAME trong SQL
Lệnh RENAME chỉ áp dụng để đổi tên bảng và không nên nhầm với khả năng RENAME của ALTER. Thực tế, để đổi tên một bảng, truy vấn đơn giản là:
RENAME TABLE old_table_name TO new_table_name;
Bảng actor chỉ chứa tên và không có thông tin khác về diễn viên. Vì vậy, hợp lý là làm rõ điều này bằng cách đổi tên bảng thành:
RENAME TABLE actor TO actor_names;
COMMENT trong SQL
Việc viết chú thích trong SQL rất quan trọng để rõ ràng và có ngữ cảnh, giúp truy vấn dễ hiểu và dễ bảo trì hơn. Nó giúp giải thích logic phức tạp, ghi lại thay đổi và lý giải một số lựa chọn. Trong SQL, bạn có thể thêm chú thích theo hai cách:
- Chú thích một dòng
- Chú thích nhiều dòng
Hãy xem chúng hoạt động thế nào.
Chú thích một dòng trong SQL
Chú thích một dòng thường được viết ngay cạnh mã, như dưới đây. Nhờ vậy, tôi có thể đọc bình luận của đồng nghiệp khi đọc mã.
Trong bảng actor, actor_id và last_update không trực quan và cần làm rõ bằng chú thích.
CREATE TABLE actor (
actor_id String(32767), --unique identifier
first_name String(32767),
last_name String(32767),
last_update String(32767)--datetime of last update
);
Chú thích trong SQL là một lệnh khác so với những lệnh còn lại trong bài vì nó không gọi hàm COMMENT. Hai dấu gạch ngang liền nhau ‘--’ biểu thị bắt đầu của chú thích. Bất cứ nội dung nào sau đó sẽ không được tính là một phần của mã.
Chú thích nhiều dòng trong SQL
Khi phần giải thích dài hơn, hãy dùng chú thích nhiều dòng. Cách này phù hợp để giải thích một hàm hoặc cung cấp ngữ cảnh chi tiết. Để thêm chú thích nhiều dòng trong SQL, bắt đầu bằng /* và kết thúc bằng */. Bộ máy SQL sẽ bỏ qua mọi thứ nằm giữa /* và */ và không thực thi chúng như một phần của truy vấn.
/* Create a table `actor` with the actors’ names. Store first and last name, and keep track of any updates*/
CREATE TABLE actor (
actor_id String(32767), --unique internal identifier
first_name String(32767),
last_name String(32767),
last_update String(32767)--datetime of last update
);
Lệnh TRUNCATE trong SQL
Cắt gọn (truncating) một bảng không giống xóa bảng. Truncating xóa toàn bộ dữ liệu nhưng giữ nguyên cấu trúc bảng, trong khi xóa sẽ loại bỏ cả bảng lẫn cấu trúc của nó. Cần thận trọng để chọn đúng lệnh phù hợp với mục đích.
Tương đương với TRUNCATE trong Excel là chọn toàn bộ dữ liệu dưới tên cột rồi nhấn delete. Trong SQL, tôi viết:
TRUNCATE TABLE table_name;
Nếu cần cắt gọn bảng actor, tôi thực thi:
TRUNCATE TABLE actor;
Kết quả sẽ là một bảng chỉ còn tên cột mà không có giá trị nào.
Lệnh DROP trong SQL
Trái với TRUNCATE, lệnh DDL DROP xóa hẳn bảng và toàn bộ giá trị của nó. Cần cẩn trọng khi thực thi các lệnh như vậy, vì hành động này không phải lúc nào cũng có thể đảo ngược. Lệnh DROP có cấu trúc tương tự truy vấn TRUNCATE:
DROP TABLE table_name;
Vì vậy, xóa bảng actor đơn giản như
DROP TABLE actor;
Mặc dù các “phiên bản” SQL khác nhau có thể yêu cầu thay đổi nhẹ về cú pháp, các lệnh DDL ở trên phần lớn là giống nhau bất kể bạn dùng phiên bản SQL nào.
So sánh lệnh DDL với các loại lệnh khác
Ở phần trước, tôi đã giải thích cách các lệnh DDL xác định cấu trúc bảng và cập nhật nội dung hoặc thuộc tính của chúng khi cần. Các loại lệnh SQL khác cho phép chọn, tổng hợp, cập nhật và thậm chí nối bảng để có góc nhìn khác về dữ liệu, và mỗi nhóm lệnh có một mục đích cụ thể.
|
Lệnh |
Định nghĩa |
Mục đích |
|
DQL |
Data Query Language |
Lấy dữ liệu từ cơ sở dữ liệu dựa trên tiêu chí |
|
DML |
Data Manipulation Language |
Thao tác các bảng trong cơ sở dữ liệu với nhiều chức năng hơn ALTER. |
|
DCL |
Data Control Language |
Kiểm soát quyền truy cập và thẩm quyền. |
|
TCL |
Transaction Control Language |
Cập nhật cơ sở dữ liệu với các thay đổi đã chỉnh bằng lệnh DML |

Xây dựng kỹ năng SQL với DataCamp
Chất lượng dữ liệu tốt đạt được khi dữ liệu được định nghĩa rõ ràng và có cấu trúc. Các lệnh DDL trong SQL giúp chuyên gia dữ liệu xây dựng và duy trì cơ sở dữ liệu có cấu trúc. Các lệnh SQL khác, như lệnh DML, cho phép bạn xem, tổng hợp, chèn, lọc và hợp nhất dữ liệu. Tìm hiểu thêm về SQL và nâng cao kỹ năng của bạn qua các tài nguyên sau:
- Tìm hiểu các loại lệnh khác nhau để làm việc với SQL
- Giữ một cheat sheet SQL bên cạnh để làm quen với các thực hành tốt và những lệnh thường dùng.
- Chuẩn bị cho phỏng vấn SQL với Hướng dẫn Câu hỏi Phỏng vấn SQL Hàng đầu của chúng tôi
Chuyên gia Dữ liệu và AI với bề dày kinh nghiệm xây dựng các mô hình khoa học dữ liệu theo yêu cầu, sử dụng cả kỹ thuật thống kê lẫn các mô hình tiên tiến như chuỗi thời gian, LLM, mạng nơ-ron và lý thuyết đồ thị.
