Trong SQL có một nhóm các phát biểu dùng để định nghĩa dữ liệu. Các phát biểu này dùng để tạo ra các bảng mới, hiệu chỉnh cấu trúc hay xóa bỏ các bảng đã có. Các phát biểu này cũng có thể dùng để tạo mới, hiệu chỉnh hay xóa bỏ các thành phần khác của bảng hay dùng để quy định hoặc ràng buộc cho các thành phần ấy. Ba từ khóa quan trọng của nhóm các phát biểu này là CREATE (tạo mới), ALTER (thay đổi), DROP (loại bỏ).
Trong SQL, ta có ba loại bảng :
Cú pháp cơ bản để tạo bảng cơ bản là :
CREATE TABLE <tên bảng> (
<tên cột> <kiểu dữ liệu của cột>
) ;
Trong cú pháp này, phần < xxx > là các tên cụ thể. Giữa khai báo các cột có dấu phẩy (,) để ngăn cách.
Thí dụ bảng Sinh_Vien được tạo ra bằng cú pháp sau :
CREATE TABLE Sinh_Vien (
MaSoSV INTEGER PRIMARY KEY ,
HoTen VARCHAR(40) ,
NgaySinh DATE ,
Nganh VARCHAR(20)
) ;
Trong phát biểu trên, chúng ta đã tạo ra một bảng tên là Sinh_Vien với 4 cột là MaSoSV, HoTen, NgaySinh, Nganh để lưu trữ các dữ liệu mã số sinh viên, họ tên, ngày sinh, và ngành đào tạo cùng với các kiểu dữ liệu tương ứng cho từng cột. Cột MaSoSV được chọn làm khóa chính.
Bên cạnh kiểu dữ liệu, cột còn có thể có thêm một số ràng buộc khác như ta sẽ xem xét sau đây.
Khi tạo cột, nếu ta không ghi gì thêm ngoài kiểu dữ liệu, cột sẽ có giá trị mặc định là NULL (hay NOT NULL tùy theo HQTCSDL). Trong một số trường hợp, giá trị NULL này sẽ gây ra một số phiền toái nhất định. Khi ấy ta cần đưa ràng buộc NOT NULL khi tạo cột như thí dụ sau:
CREATE TABLE Sinh_Vien (
. . . . . ,
HoTen VARCHAR(40) NOT NULL ,
. . . . .
) ;
Đối với một số cột, ta không muốn bất cứ hai dòng nào có giá trị giống nhau, khi đó ta sử dụng từ khóa UNIQUE khi tạo cột. Thí dụ trong một siêu thị, người ta không muốn tên của các sản phẩm trùng nhau. Khi đó, ta tạo cột TenSanPham trong bảng San_Pham như cú pháp sau:
CREATE TABLE San_Pham (
. . . . . ,
TenSanPham VARCHAR(20) UNIQUE ,
. . . . .
) ;
Trong trường hợp ta muốn sự duy nhất xẩy ra khi có sự phối hợp của hai hay nhiều cột. Thí dụ siêu thị có sản phẩm ký hiệu MiTom có thể do một số công ty sản xuất. Khi đó ta muốn sự các phối hợp giữa hai thuộc tính này là duy nhất thì ta sử dụng cú pháp sau:
CREATE TABLE San_Pham (
. . . . . ,
TenSanPham VARCHAR(20) NOT NULL ,
CTySanXuat VARCHAR(15) NOT NULL ,
. . . . . ,
CONSTRAINT rb_Unique UNIQUE( TenSanPham, CTySanXuat )
) ;
Trong mệnh đề trên rb_Unique là tên của ràng buộc.
Khi ta muốn giá trị của cột phải thỏa mãn một số điều kiện nào đó, ta sử dụng từ khóa CHECK trong khai báo cột và đưa các điều kiện vào làm đối số của CHECK như cú pháp sau :
<tên cột> <kiểu dữ liệu của cột> CHECK( các điều kiện )
Thí dụ ta muốn ngày sinh của sinh viên phải bé hơn ngày hiện hành thì ta khai báo như sau :
CREATE TABLE Sinh_Vien (
. . . . . ,
NgaySinh DATE CHECK( NgaySinh < CURRENT_DATE ) ,
. . . . .
) ;
Ghi chú : trong khai báo trên, CURRENT_DATE là một hàm có sẵn trong SQL dùng để xác định ngày hiện hành.
Trong một số trường hợp, ta muốn rằng nếu người nhập dữ liệu không nhập giá trị cho một cột nào đấy, cột sẽ lấy giá trị mặc định được ta chọn lựa trước. Khi ấy ta sử dụng từ khóa DEFAULT khi khai báo cột theo cú pháp :
<tên cột> <kiểu dữ liệu của cột> DEFAULT <giá trị mặc định>
như thí dụ sau :
CREATE TABLE Sinh_Vien (
. . . . . ,
NamBatDau INTEGER DEFAULT YEAR(CURRENT_DATE) ,
. . . . .
) ;
Trong thí dụ trên, trong bảng Sinh_Vien có cột NamBatDau để lưu trữ năm bắt đầu theo học của sinh viên. Nếu người nhập dữ liệu không nhập giá trị cho cột này thì chương trình tự động lấy năm hiện hành điền vào (bằng cách dùng hàm YEAR có sẵn trong SQL để lấy phần chỉ năm của đối số CURRENT_DATE).
Ta có thể dùng phát biểu CREATE DOMAIN để tạo ra miền xác định (domain) bằng cách kết hợp kiểu dữ liệu và một số ràng buộc, sau đó đưa miền xác định này vào phát biểu tạo bảng.
Thí dụ ta tạo ra miền xác định cho đơn giá của sản phẩm : giá đó là một số nguyên và có giá trị lớn hơn hay bằng 500, sau đó đưa miền xác định này phát biểu tạo bảng. Ta trình bày như sau :
CREATE DOMAIN mxd_DonGia AS INT CHECK(VALUE >= 500) ; (
CREATE TABLE San_Pham (
. . . . . ,
DonGia mxd_DonGia ,
. . . . .
) ;
Trong phát biểu CREATE DOMAIN ở trên, mxd_DonGia là tên của miền xác định, AS là từ khóa để khai báo kiểu dữ liệu.
Ta cũng có thể thu được kết quả tương tự bằng cách khai báo ràng buộc cho biến DonGia bằng phát biểu sau :
CREATE TABLE San_Pham (
. . . . . ,
DonGia INT ,
. . . . . ,
CONSTRAINT rb_DonGia CHECK( DonGia >= 500 )
) ;
hay đưa thẳng điều kiện ràng buộc trong khai báo cột như sau :
CREATE TABLE San_Pham (
. . . . . ,
DonGia INT CHECK( DonGia >= 500 ) ,
. . . . .
) ;
Ta muốn tạo liên kết giữa hai bảng A và B theo mối liên kết một:nhiều, giả sử bảng B ở phía nhiều. Khi ấy ta đưa khóa chính của bảng A vào làm thuộc tính của bảng B và cho nó giữ vai trò khóa ngoại (foreign key) trong bảng này. Khi định nghĩa bảng, ta phải khai báo sự ràng buộc này trong bảng B.
Thí dụ trong cơ sở dữ liệu của một trường đại học, ta có hai bảng Khoa và Sinh_Vien. Ta muốn tạo liên kết một-nhiều giữa hai bảng này với phía nhiều ở bảng Sinh_Vien. Khi tạo bảng Khoa, ta chọn thuộc tính MaSoKhoa làm khóa chính với phát biểu như sau :
CREATE TABLE Khoa (
MaSoKhoa INT PRIMARY KEY ,
. . . . .
) ;
Khi tạo bảng Sinh_Vien, ta đưa MaSoKhoa vào làm một thuộc tính và cho nó làm khóa ngoại trong một khai báo ràng buộc theo phát biểu như sau:
CREATE TABLE Sinh_Vien (
MaSoSV INT PRIMARY KEY ,
. . . . . ,
MaSoKhoa INT ,
. . . . .
CONSTRAINT rb_SV_K FOREIGN KEY( MaSoKhoa )
REFERENCES KHOA( MaSoKhoa )
) ;
Trong phát biểu trên, ràng buộc được đặt tên là rb_SV_K , trong đó ta khai báo MaSoKhoa là khóa ngoại bằng từ khóa FOREIGN KEY, có tham chiếu (REFERENCES) đến thuộc tính MaSoKhoa trong bảng Khoa.
Nếu liên kết giữa hai bảng thuộc loại một-một, việc đặt khóa ngoại ở bảng nào không có nhiều ý nghĩa.
Để loại bỏ một bảng khỏi cơ sở dữ liệu, ta dùng phát biểu DROP TABLE như trong thí dụ sau:
DROP TABLE San_Pham ;
Việc xóa bỏ một bảng sẽ có thể gây ra một số ảnh hưởng đáng kể nếu bảng này được liên kết đến một số bảng khác. Một số hệ quản trị cơ sở dữ liệu cung cấp cho ta hai tùy chọn :
Để an toàn, ta nên xóa bỏ các liên kết của bảng trước khi xóa bảng. Nếu không nên sử dụng tùy chọn RESTRICT.
Để hiệu chỉnh cấu trúc của một bảng trong cơ sở dữ liệu, ta sử dụng cụm từ khóa ALTER TABLE. Các thao tác hiệu chỉnh bảng phổ biến nhất là thêm hoặc bớt cột, hiệu chính các thành phần của bảng.
Thí dụ ta muốn bỏ bớt cột NangKhieu khỏi bảng Sinh_Vien ta dùng từ khóa DROP theo cú pháp như sau:
ALTER TABLE Sinh_Vien
DROP NangKhieu ;
Nếu ta muốn thêm hai cột TonDauKy và Nhap vào bảng San_Pham để chỉ lượng sản phẩm tồn kho vào đầu của kỳ kiểm kê và lượng hàng hóa nhập thêm giữa hai kỳ kiểm kê, ta sử dụng từ khóa ADD và khai báo các cột này theo cú pháp sau:
ALTER TABLE San_Pham (
ADD ( TonDauKy INT CHECK( TonDauKy >= 0) ,
Nhap INT CHECK( Nhap >= 0) ) ;
Nếu ta muốn loại bỏ ràng buộc về giá rb_DonGia trong bảng SAN_PHAM, ta sử dụng từ khóa DROP CONSTRAINT theo cú pháp sau:
ALTER TABLE San_Pham
DROP CONSTRAINT rb_DonGia ;
Trang web này được cập nhật lần cuối ngày 25/11/2018
Cơ sở dữ liệu
Các chuyên đề
Xử lý dữ liệu
Ma trận
R