logo xDuLieu.com

Trang trướcCác phát biểu SQL để định nghĩa dữ liệuTrang sau

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ỏ).

Bảng trong SQL

 

Trong SQL, ta có ba loại bảng :

  • Bảng cơ bản (base) hay còn được gọi là bảng thường trực (persistent): là bảng dùng để chứa dữ liệu, được duy trì thường xuyên trong bộ nhớ (nếu không bị xóa đi) và được truy cập rộng rãi nhất.
  • Bảng tạm thời (temporary) : chỉ được tạo ra trong một phiên làm việc cụ thể, dùng để chứa tạm dữ liệu theo yêu cầu của chương trình hay của người dùng và mất đi ngay sau khi phiên làm việc chấm dứt. Tùy theo mức độ truy cập mà bảng tạm thời có thể là toàn cục (global) hay cục bộ (local).
  • Hiển thị (view) : Được dùng để hiển thị ra giao diện các dữ liệu hay thông tin cần thiết, tương ứng với từng nhóm người dùng cụ thể hay theo từng yêu cầu cụ thể. Cũng như bảng tạm thời, hiển thị chỉ tồn tại trong phiên làm việc.

Tạo bảng cơ bản

 

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.


Ràng buộc cho các cột

 

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.

NOT NULL

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 ,

    . . . . .

) ;


UNIQUE

Đố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.


CHECK

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.


Giá trị mặc định cho cột

 

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).


Tạo miền xác định cho cột

 

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 ) ,

    . . . . .

) ;


Tạo liên kết giữa hai bảng

 

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.


Xóa bỏ bảng

 

Để 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 :

  • RESTRICT : HQTCSDL sẽ đi tìm các bảng có liên kết với bảng cần xóa. Nếu có thì nó sẽ không thực hiện lệnh xóa và hiện thông báo.
  • CASCADE : HQTCSDL sẽ đi tìm các bảng có liên kết với bảng cần xóa. Nếu có thì nó sẽ xóa luôn các bảng có liên kết. Vì thế cần phải cẩn thận khi sử dụng tùy chọn này.

Để 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 bảng

 

Để 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 trướcVề đầu chươngTrang sau


Trang web này được cập nhật lần cuối ngày 25/11/2018