Bài viết này chứa CREATE TABLE
cơ bản của SQL các câu lệnh mà người mới bắt đầu có thể sử dụng để tạo các bảng cơ bản cho các dự án cơ sở dữ liệu của họ.
Cú pháp cơ bản
Cú pháp cơ bản để tạo bảng trong SQL như sau:
CREATE TABLE TableName (
Column1 datatype optional_constraints,
Column2 datatype optional_constraints,
Column3 datatype optional_constraints,
...
);
Ở đâu:
-
TableName
là tên bạn muốn đặt cho bảng -
Column1
, v.v. là những tên bạn đặt cho các cột của mình -
datatype
là kiểu dữ liệu mà bạn gán cho mỗi cột. Hầu hết các RDBMS đều yêu cầu bạn gán một kiểu dữ liệu cho mỗi cột. Trong SQLite, nó là tùy chọn. -
optional_constraints
là danh sách tùy chọn các ràng buộc mà bạn áp dụng cho một cột.
Lưu ý rằng hầu hết các DBMS sử dụng cú pháp phức tạp hơn cú pháp này (tức là chúng cung cấp nhiều tùy chọn hơn), nhưng đây thường là cú pháp cơ bản cần thiết để tạo bảng. Hầu hết người mới bắt đầu bắt đầu với cú pháp này, sau đó tìm hiểu các tùy chọn nâng cao hơn khi họ tiến bộ.
Ví dụ cơ bản
Đây là một ví dụ cơ bản:
CREATE TABLE Pets
(
PetId int NOT NULL PRIMARY KEY,
PetTypeId int NOT NULL,
OwnerId int NOT NULL,
PetName varchar(60) NOT NULL,
DOB date NULL
);
Dưới đây là một số điểm cần lưu ý:
- Trong mọi trường hợp, tên bảng và cột có thể được đặt trong bất kỳ trường hợp nào. Ví dụ:thay vì
PetId
Tôi có thể gọi nó làpetid
,PETID
hoặcpet_id
. Một số DBMS (ví dụ:Postgres) có phân biệt chữ hoa chữ thường khi bạn truy vấn bảng và tên cột của chúng, trong khi những thứ khác thì không (ví dụ:SQL Server). - Một số DBMS sử dụng các tên khác nhau cho các kiểu dữ liệu của chúng.
-
NOT NULL
là một ràng buộc bảng chỉ định rằng cột này phải chứa một giá trị (tức là nó không được chứaNULL
giá trị). -
NULL
có nghĩa là cột được phép chứaNULL
các giá trị. Một số DBMS (chẳng hạn như DB2) không hỗ trợNULL
từ khóa, và do đó bạn sẽ cần phải loại bỏ nó khi làm việc với các DBMS như vậy. -
PRIMARY KEY
thêm ràng buộc khóa chính vào bảng. Bạn nên chỉ định khóa chính trên tất cả các bảng của mình. - Nếu một bảng có cùng tên đã tồn tại trong cơ sở dữ liệu, bạn sẽ gặp lỗi. Bạn cần phải xóa hoặc thay đổi bảng hiện có (hoặc thay đổi tên của bảng mà bạn đang tạo).
Tạo bảng với các khóa ngoại
Ví dụ sau tạo một bảng có hai khóa ngoại. Khóa ngoại được sử dụng để tạo mối quan hệ giữa hai bảng.
CREATE TABLE Pets
(
PetId int NOT NULL PRIMARY KEY,
PetTypeId int NOT NULL REFERENCES PetTypes (PetTypeId),
OwnerId int NOT NULL REFERENCES Owners (OwnerId),
PetName varchar(60) NOT NULL,
DOB date NULL
);
REFERENCES
mệnh đề được sử dụng để xác định một khóa ngoại đối với hai cột. Trong trường hợp của chúng tôi, các khóa ngoại thực thi những điều sau:
-
Pets.PetTypeId
tham chiếu cộtPetTypes.PetTypeId
(bất kỳ giá trị nào đi vàoPets.PetTypeId
cột phải có giá trị phù hợp trongPetTypes.PetTypeId
cột). -
Pets.OwnerId
tham chiếu cộtOwners.OwnerId
(bất kỳ giá trị nào đi vàoPets.OwnerId
cột phải có giá trị phù hợp trongOwners.OwnerId
cột).
Các khóa ngoại cũng có thể được thêm sau đó, sử dụng ALTER TABLE
tuyên bố nếu được yêu cầu.
Tạo bảng với Ràng buộc DEFAULT
Ví dụ sau tạo một bảng với DEFAULT
ràng buộc.
CREATE TABLE OrderItems
(
OrderId int NOT NULL PRIMARY KEY,
OrderItem int NOT NULL,
ProductId int NOT NULL,
Quantity int NOT NULL DEFAULT 1,
ItemPrice decimal(8,2) NOT NULL
);
Tạo bảng có cột dấu thời gian
Bạn có thể sử dụng DEFAULT
ràng buộc để tự động chèn ngày và giờ hiện tại vào một cột bất cứ khi nào một hàng mới được chèn. Điều này thường được gọi là chèn dấu thời gian.
Các DBMS khác nhau sử dụng các chức năng khác nhau để trả về ngày hiện tại.
Đây là một ví dụ về cách làm điều đó trong SQL Server.
CREATE TABLE Users
(
UserId int NOT NULL PRIMARY KEY,
FirstName varchar(60) NOT NULL,
LastName varchar(60) NOT NULL,
DateInserted datetime DEFAULT CURRENT_TIMESTAMP
);
Trong SQL Server, CURRENT_TIMESTAMP
là ANSI tương đương với GETDATE()
chức năng.
Ngoài ra, bạn có thể sử dụng SYSDATETIME()
để có dấu thời gian chính xác cao hơn:
CREATE TABLE Users
(
UserId int NOT NULL PRIMARY KEY,
FirstName varchar(60) NOT NULL,
LastName varchar(60) NOT NULL,
DateInserted datetime2 DEFAULT SYSDATETIME()
);
Để hỗ trợ độ chính xác cao hơn, loại dữ liệu của cột phải là datetime2 .
SQL Server có khá nhiều kiểu dữ liệu cho các giá trị ngày / giờ. Xem các hàm ngày và giờ của SQL Server để biết danh sách.
Mỗi DBMS có các chức năng riêng để trả về ngày và giờ. Dưới đây là danh sách những cái chính:
DB2 | CURRENT_DATE |
MySQL | CURRENT_DATE hoặc NOW() |
Oracle | SYSDATE |
PostgreSQL | CURRENT_DATE |
Máy chủ SQL | CURRENT_TIMESTAMP , GETDATE() hoặc SYSDATETIME() |
SQLite | datetime('now') |
Cũng xem:
- Hàm Ngày và Giờ của SQL Server
- Hàm Ngày và Giờ trong SQLite
Tạo một cột có giá trị tự động tăng lên
Đôi khi bạn cần tạo một cột tự động tăng giá trị bất cứ khi nào một hàng mới được chèn vào. Những cột này thường được gọi là cột "tự động tăng" hoặc "nhận dạng", tùy thuộc vào DBMS đang được sử dụng.
Trong SQL Server, sử dụng IDENTITY
đối số:
CREATE TABLE Users
(
UserId int NOT NULL IDENTITY(1,1) PRIMARY KEY,
FirstName varchar(60) NOT NULL,
LastName varchar(60) NOT NULL,
DateInserted datetime2 DEFAULT SYSDATETIME()
);
Trong trường hợp này, chúng tôi sử dụng IDENTITY(1,1)
.
-
1
đầu tiên là hạt giống. Điều này chỉ định giá trị nào để bắt đầu đếm (tức là đây là giá trị của hàng đầu tiên được chèn vào bảng). -
1
thứ hai là số gia. Đây là giá trị gia tăng được thêm vào giá trị nhận dạng của hàng trước đó đã tải.
Mỗi DBMS có từ khóa riêng để tạo cột tự động tăng dần.
- Trong MySQL và MariaDb, sử dụng
AUTO_INCREMENT
- Trong SQLite, bạn có một số tùy chọn (bao gồm
AUTOINCREMENT
từ khóa) - Trong PostgreSQL, sử dụng
SERIAL
- Từ Cơ sở dữ liệu Oracle 12 c , bây giờ bạn có thể sử dụng từ khóa IDENTITY để tạo các cột tự động tăng dần. Một ví dụ có thể giống như sau:
UserId NUMBER GENERATED BY DEFAULT ON NULL AS IDENTITY
Tùy chọn nâng cao
Hầu hết các DBMS đều cho phép bạn chỉ định các tùy chọn nâng cao khi tạo bảng. Các tùy chọn có sẵn sẽ phụ thuộc phần lớn vào DBMS của bạn.
Tham khảo tài liệu DBMS của bạn nếu bạn cần các tùy chọn không được chỉ định trong bài viết này.
Nhiều tùy chọn nâng cao có thể được đặt thông qua GUI (tùy thuộc vào công cụ bạn sử dụng để kết nối với cơ sở dữ liệu của mình). Bạn luôn có thể tạo hoặc sửa đổi bảng thông qua GUI, sau đó sử dụng tùy chọn “Tập lệnh khi tạo” (hoặc tương tự) để xem mã SQL mà bạn cần chạy để tạo một bảng như vậy. Bạn có thể lấy mã này và thay đổi tên bảng, tên cột, v.v. để tạo một bảng hoàn toàn mới dựa trên định nghĩa của bảng trước đó.