SQL Cơ bản - Create Table
Nhân ngày đẹp trời rãnh rỗi, chúng ta sẽ đi vào một trong những phần cơ bản nhất của SQL - câu lệnh CREATE TABLE. Hãy tưởng tượng thế này, khi bạn định xây nhà, việc đầu tiên không phải là mua sofa hay tivi màn hình phẳng, mà là đổ móng! Trong SQL, việc "đổ móng" này chính là CREATE TABLE. Đó là bước đầu tiên để chúng ta tạo ra một bảng, nơi mà dữ liệu (các viên gạch) sẽ được lưu trữ một cách khoa học.
Nếu bạn vẫn còn chưa rõ, đừng lo! Hãy bắt đầu đọc bài viết nhé. Cùng bắt đầu nào!
1. Cú pháp CREATE TABLE
Cú pháp chuẩn của câu lệnh CREATE TABLE:
1
2
3
4
5
6
CREATE TABLE table_name (
column1 datatype [constraint],
column2 datatype [constraint],
column3 datatype [constraint],
...
);
Trong đó:
table_name: Tên bảng bạn muốn tạo. Cũng như đặt tên con vậy, đừng đặt bừa, kẻo sau này quên mất ý nghĩa của nó.column1, column2, column3...: Các cột của bảng. Mỗi cột đại diện cho một thuộc tính của bảng (như màu tóc, chiều cao của mỗi “người” trong bảng).datatype: Kiểu dữ liệu cho mỗi cột(ví dụ: INT, VARCHAR, DATE). Hãy chọn đúng kiểu dữ liệu, không ai muốn lưu chiều cao của một người dưới dạng… ngày sinh cả. [constraint]: Các ràng buộc để kiểm soát dữ liệu(ví dụ: PRIMARY KEY, NOT NULL, UNIQUE). Đừng ngại khó, ràng buộc là để bảo vệ bảng của bạn khỏi những dữ liệu xấu xí.
2. Ví dụ
Tạo một bảng để quản lý thông tin những con thú cưng trong trại nuôi. Giả sử mình đang kinh doanh dịch vụ chăm sóc thú cưng siêu cao cấp (mình chưa có, nhưng biết đâu được!). Đây là bảng Pets để lưu trữ thông tin về các bé thú đáng yêu.
1
2
3
4
5
6
7
8
9
CREATE TABLE Pets (
PetID INT PRIMARY KEY, -- Mỗi thú cưng có một ID duy nhất
Name VARCHAR(50) NOT NULL, -- Tên không thể để trống, thử hỏi có ai nuôi thú cưng mà không đặt tên không?
Species VARCHAR(50), -- Loài, có thể là chó, mèo, chuột hamster...
BirthDate DATE, -- Ngày sinh của bé thú cưng
OwnerName VARCHAR(100), -- Tên chủ nhân của bé thú cưng
Weight DECIMAL(5,2), -- Cân nặng, có thể có cả những bé "mập mạp" hơn ta nghĩ
Adopted BIT -- Đã được nhận nuôi hay chưa, `0` là chưa, `1` là rồi
);
Trong đó:
-
PetID INT PRIMARY KEY: Đây là ID duy nhất cho mỗi bé thú cưng, không thể trùng lặp. Mình không muốn rối loạn vì có hai bé chó cùng tên là “Boo” và mình không biết bé nào đã ăn hết đồ ăn của mình. -
Name VARCHAR(50) NOT NULL: Tên của thú cưng là bắt buộc. Mình không thể có một bé chó không tên được, giống như việc chúng ta không thể sống mà không có… Wi-Fi. -
Species VARCHAR(50): Đây là loại thú cưng. Từ chó, mèo, đến thỏ hay chim cánh cụt nếu bạn có. Không bắt buộc nhưng ai mà không tò mò thú cưng là con gì chứ? -
BirthDate DATE: Ngày sinh của thú cưng, để mình có thể tổ chức tiệc sinh nhật hoành tráng cho chúng! Nếu bạn không lưu ngày này, thú cưng của bạn sẽ rất buồn đó! -
OwnerName VARCHAR(100): Tên của chủ nhân, người đã yêu thương và chăm sóc bé thú cưng này. -
Weight DECIMAL(5,2): Cân nặng của bé thú cưng, rất hữu ích để biết khi cần lên thực đơn ăn kiêng (dành cho bé mèo Miu chẳng hạn). -
Adopted BIT: Một cột dạng BIT chỉ có giá trị là 0 (chưa được nhận nuôi) hoặc 1 (đã được nhận nuôi). Vậy là mình biết bé nào cần tìm chủ yêu thương.
3. Những câu chuyện hậu trường của CREATE TABLE
Tại sao lại có nhiều kiểu dữ liệu vậy?
Bạn biết đấy, nếu mà SQL chỉ có mỗi một kiểu dữ liệu thì sẽ giống như chúng ta chỉ có một loại quần áo vậy, đâu có đủ để mặc trong mọi tình huống! Bạn không thể mặc áo tắm khi đi làm, đúng không? Vậy nên SQL cần các kiểu dữ liệu như INT cho số, VARCHAR cho chuỗi văn bản, và DATE cho ngày tháng. Nếu bạn dùng sai kiểu dữ liệu, thì đó như mặc đồ trái mùa, không hợp hoàn cảnh và rất dễ gây lỗi.
Các ràng buộc (constraint) có thực sự cần thiết không?
Câu trả lời ngắn gọn: CÓ! Hãy nghĩ về ràng buộc như những luật lệ bạn đặt ra để tránh những sai sót.
Ví dụ, nếu bạn không đặt PRIMARY KEY, bạn có thể lưu trùng lặp nhiều thú cưng có cùng ID, và khi đó, bạn sẽ gặp ác mộng trong việc quản lý chúng. NOT NULL thì giống như việc yêu cầu bạn phải điền đầy đủ tên trước khi tham gia một lớp học - không ai muốn gọi bạn là “người không tên” cả.
Tại sao lại phải phân biệt VARCHAR và CHAR?
Đây là một câu hỏi mà các developer mới hay đặt ra: “Tại sao không dùng hết CHAR hay hết VARCHAR?”.
Câu trả lời nằm ở chỗ tiết kiệm tài nguyên! VARCHAR sẽ chỉ lưu lượng ký tự cần thiết, trong khi CHAR sẽ luôn chiếm đủ khoảng trống đã định.
Ví dụ: nếu bạn dùng CHAR(10) và lưu chữ "Dog", SQL sẽ điền thêm 7 khoảng trắng vào để đủ 10 ký tự. Điều này rất lãng phí nếu bạn không cần đến chúng!
4. Một vài “câu chuyện buồn” với CREATE TABLE
Quên không đặt PRIMARY KEY: Đó là một ngày đẹp trời, bạn tạo một bảng mà quên không đặt khóa chính (PRIMARY KEY). Mọi thứ ban đầu có vẻ ổn, cho đến khi bạn nhận ra bảng của bạn đầy những dòng trùng lặp. Đó là lúc bạn muốn quay lại và trách cứ bản thân vì đã không cẩn thận ngay từ đầu.
Sử dụng kiểu dữ liệu không hợp lý: Một lần, mình đã lỡ tạo một bảng với cân nặng thú cưng là INT. Và rồi mình nhận ra, một con mèo có thể nặng 4.5kg, nhưng với kiểu dữ liệu INT, SQL chỉ chấp nhận số nguyên! Mình phải giải thích với khách hàng tại sao con mèo của họ đột nhiên bị “làm tròn” cân nặng thành 5kg.
Không đặt ràng buộc NOT NULL: Bạn đã bao giờ nhập dữ liệu và bỏ qua cột quan trọng chưa? Mình thì có rồi! Mình quên đặt NOT NULL cho cột tên, và sau đó mình phải nhìn vào hàng loạt thú cưng "vô danh". Khá là rắc rối khi mình muốn tìm xem bé mèo "vô danh" nào đã phá ghế sofa của mình.
Kết luận
Câu lệnh CREATE TABLE có thể trông đơn giản nhưng lại là bước đầu tiên và quan trọng để xây dựng một cơ sở dữ liệu vững chắc. Khi bạn làm đúng ngay từ đầu, tất cả những bước sau đó sẽ dễ dàng hơn rất nhiều.
Hãy nhớ rằng, giống như khi bạn xây một ngôi nhà, bảng của bạn cần có nền móng vững chắc để phát triển. Đừng quên kiểm tra kiểu dữ liệu và ràng buộc để tránh những sai lầm không đáng có. Và nếu có gì sai sót, hãy coi đó là bài học… hoặc là một câu chuyện hài để kể cho đồng nghiệp!
Bài viết mang tính chất “ghi chú, lưu trữ, chia sẻ và phi lợi nhuận”.
Nếu bạn thấy hữu ích, đừng quên chia sẻ với bạn bè và đồng nghiệp của mình nhé!
Happy coding! 😎 👍🏻 🚀 🔥