09 March 2015

Những kiến thức cơ bản về MS SQL - Phần 3

Xem tiếp phần 4 tại đây.
Xem lại phần 2 tại đây.


NHỮNG THAO TÁC DLL

DDL bao gồm một số lệnh bạn có thể dùng để tạo bảng và chỉ mục, và sửa đổi các bảng bằng cách thêm hoặc loại bỏ các cột hoặc chỉ mục. Những câu lệnh định nghĩa dữ liệu có thể chỉ được dùng với Jet database; Chúng không được hỗ trợ cho bất cứ CSDL định dạng ngoài.

Chú ý: Để dùng câu lệnh DDL, hoặc bất cứ truy vấn nào không trả lại tập bản ghi, hãy đóng ngoặc kép và sử dụng chúng như là đối số của các phương thức thi hành của CSDL hay đối tượng truy vấn (QueryDef object) như trong ví dụ sau:

MyDB.Execute “CREATE TABLE Employees ([First Name] TEXT, [Last_ Name] TEXT)”;

Để dùng bất cứ một câu lệnh nào trả lại các bản ghi (như SELECT), dùng biểu thức như là đối số nguồn của phương thức mở tập bản ghi (OpenRecordset method), như trong ví dụ sau:

MyDB.OpenRecordset (“SELECT * FROM Titles WHERE Au_ID = 5”, _ dbOpenDynaset);


1.Tạo một bảng:

Để tạo một bảng trong CSDL, dùng câu lệnh CREATE TABLE. Một câu lệnh hoàn chỉnh nhận các đối số là tên bảng, tên các trường, kiểu dữ liệu của các trường và độ rộng của các trường.

Ví dụ sau tạo một bảng có tên là “Employees”, có hai trường kiểu TEXT với độ rộng là 25:

CREATE TABLE Employees ([First Name] TEXT(25), [Last Name] TEXT(25));

Thêm và xoá cột:

Bạn có thể thêm, sửa đổi hoặc xoá các cột với câu lệnh ALTER TABLE. Ví dụ, câu lệnh sau thêm một trường kiểu TEXT có độ rộng 25 và tên là “Notes” vào bảng Employees:

ALTER TABLE Employees ADD COLUMN Notes TEXT(25);

Để loại bỏ một cột, dùng từ khoá DROP. Ví dụ này loại bỏ cột có tên là “Notes” mới vừa được thêm lúc nãy:

ALTER TABLE Employees DROP COLUMN Notes;

Để sửa đổi một trường, trước tiên bạn phải xoá nó, và sau đó là thêm trường mới với tên như cũ. Ví dụ sau tăng độ rộng của trường “Notes”:

ALTER TABLE Employees DROP COLUMN Notes;

ALTER TABLE Employees ADD COLUMN Notes TEXT(30);

Chú ý: Dùng ALTER TABLE, bạn chỉ có thể thêm hoặc xoá một trường tại mỗi thời điểm.

2.Tạo và xoá chỉ mục:

Có ba cách khác nhau để tạo chỉ mục:

- Lúc bắt đầu tạo bảng với câu lệnh CREATE TABLE

- Với câu lệnh CREATE INDEX.

- Với câu lệnh ALTER TABLE

Mặc dầu cả ba cách này đều cho kết quả tương tự, nhưng vẫn có những khác điểm khác nhau. Nếu bạn muốn thêm một khoá ngoại (foreign key) và ép buộc toàn vẹn tham chiếu (enfore referential integrity), bạn phải dùng một mệnh đề ràng buộc (CONSTRAINT clause) trong các câu lệnh CREATE TABLE hoặc ALTER TABLE.

Đôi khi người ta muốn tạo một bảng ban đầu không có chỉ mục, và tiếp đó là thiết kế các tham số chỉ mục sau khi dùng mẫu bảng. Với tình huống này, bạn nên dùng CREATE TABLE để tạo mẫu bảng không có chỉ mục, và sau đó thêm các chỉ mục với câu lệnh CREATE INDEX hoặc ALTER TABLE.

Tạo một chỉ mục với câu lệnh CREATE TABLE.

Khi bạn tạo một bảng, bạn có thể tạo một chỉ mục cho từng cột riêng rẽ, hoặc hai hoặc nhiều hơn các cột, dùng mệnh đề SQL CONSTRAINT (từ khoá CONSTRAINT bắt đầu định nghĩa một chỉ số). Ví dụ sau đây minh hoạ cách tạo ra một bảng với ba trường có chỉ mục:

CREATE TABLE Employees ([First Name] TEXT(25), [Last Name] TEXT(25), _ [Date of Birth] DATETIME, CONSTRAINT EmployeesIndex UNIQUE _ ([First Name], [Last Name], [Date of Birth]));

Để đánh chỉ mục với một cột, bạn đặt mệnh đề CONSTRAINT vào một trong những mô tả cột. Ví dụ, để đánh chỉ mục trường “Date of Birth”, bạn dùng câu lệnh CREATE TABLE sau đây:

CREATE TABLE Employees ([First Name] TEXT(25), [Last Name] TEXT(25), _ [Date of Birth] DATETIME CONSTRAINT EmployeesIndex PRIMARY);

Sự khác nhau giữa đánh chỉ mục cho nhiều trường và cho một trường là: cho một trường đơn, từ khoá CONSTRAINT bắt đầu định nghĩa chỉ mục không bị tách biệt với trường cuối cùng bởi dấu phẩy mà đi sát ngay sau kiểu dữ liệu của trường được đánh chỉ mục đó.

Tạo chỉ mục với câu lệnh CREATE INDEX.

Bạn cũng có thể dùng mệnh đề CREATE INDEX để thêm một chỉ mục. Ví dụ sau đây đưa ra cùng một kết quả với ví dụ trước, ngoại trừ việc dùng CREATE TABLE thay thế cho ALTER TABLE.

CREATE UNIQUE INDEX MyIndex ON Employees ([Date of Birth]);

Trong mệnh đề tuỳ chọn WITH, bạn có thể ép buộc dữ liệu với ràng buộc PRIMARY, có nghĩa đây là trường chỉ mục chính; DISALLOW NUL, nghĩa là trường này không bị bỏ trống; IGNORE NULL, có nghĩa bản ghi đó sẽ không được đánh chỉ mục nếu trường đó để trống.

Ví dụ sau thêm mệnh đề WITH vào ví dụ trước, để cho không bản ghi nào có thể được thêm vào bảng mà cột số bảo hiểm xã hội bị bỏ trống:

CREATE UNIQUE INDEX MyIndex ON Employees (SSN) _ WITH DISALLOW NULL;

Chú ý: Không dùng từ khoá PRIMARY khi bạn tạo ra một chỉ mục mới trong bảng mà bảng đó đã tồn tại khoá chính (Primary key); Nếu bạn vi phạm điều này thì hệ thống sẽ báo lỗi.

Bạn đang dùng CREATE INDEX để tạo một đặc tả chỉ mục trên một bảng mà chưa tồn tại chỉ mục nào. Để tạo một chỉ mục như thế; bạn không cần sự cho phép hoặc truy cập tới một máy chủ ở xa, và CSDL ở xa không nhận biết được hay không hề ảnh hưởng bới chỉ mục đó. Bạn dùng cùng một cú pháp cho bảng kết nối và bảng gốc. Điều này đặc hữu dụng khi tạo một chỉ mục trên một bảng thường là chỉ đọc (read only) bởi vì nó thiếu một chỉ mục.

Tạo một chỉ mục với câu lệnh ALTER TABLE

Bạn cũng có thể thêm một chỉ mục cho một bảng đã tồn tại bằng cách dùng câu lệnh ALTER TABLE, dùng cú pháp ADD CONSTRAINT. Ví dụ sau thêm một chỉ mục cho trường “SSN”:

ALTER TABLE Employees ADD CONSTRAINT MyIndex _ PRIMARY (SSN);

Bạn cũng có thể thêm chỉ mục cho nhiều trường và một bảng bằng cách dùng câu lệnh ALTER TABLE giống như sau:

ALTER TABLE Employees ADD CONSTRAINT NameIndex _ UNIQUE ([Last Name], [First Name], SSN);

Mệnh đề CONSTRAINT và toàn vẹn tham chiếu (Referential Integrity).

Một ràng buộc là một chỉ mục. Bạn dùng mệnh đề CONSTRAINT để tạo hoặc xoá các chỉ mục với các câu lệnh CREATE TABLE và ALTER TABLE, như đã chỉ ra ở phần trước.

Mệnh đề CONSTRAINT cũng cho phép bạn định nghĩa khoá chính và khoá ngoại, định nghĩa các quan hệ và ép buộc toàn vẹn tham chiếu.

Để biết thêm thông tin về quan hệ và toàn vẹn tham chiếu, hãy xem cuốn “Tạo và sửa đổi CSDL” (“Creating and Modifying Databases”).

Có hai loại mệnh đề CONSTRAINT: Một để tạo chỉ mục cho từng trường đơn và một để tạo chỉ mục cho nhiều hơn một trường.

Cú pháp của chỉ mục trên một trường là:

CONSTRAINT name {PRIMARY KEY | UNIQUE | REFERENCES foreigntable [(foreginfield1, foreignfield2)]}

Cú pháp cho chỉ mục trên nhiều trường là:

CONSTRAINT name {PRIMARY KEY (primary1[,primary2[,...]]) | UNIQUE (unique1[,unique2[,...]]) | FOREIGN KEY (ref1[,ref2[,...]]) REFERENCES foreigntable [(foreignfield1[,foreignfield2[,...]])};

Sau đây là các đối số áp dụng cho hai loại trên:

name : Tên của chỉ mục được tạo.

primary1, primary2 : Tên của trương hay các trường được chỉ định làm khoá chính.

unique1, unique2 : Tên của trường hay các trường được chỉ định làm khoá không lặp.

ref1, ref2 : Tên của trường hoặc các trường khoá ngoài tham chiếu tới một trường, một số trường ở bảng khác.

foreigntable Tên của bảng ngoài chứa một hoặc một số trường được xác định bởi foreignfield.

foreignfield1, foreignfield2: Tên của trường hoặc một số trường trong bảng ngoài được xác định bởi ref1, ref2.

Dùng CONSTRAINT, bạn có thể gán cho một trường như một trong những loại chỉ mục sau:

- UNIQUE – Chỉ định trường một trường có giá trị không lặp. Điều này có nghĩa là hai bản ghi bất kỳ trong bảng không có cùng giá trị trong trường này. Bạn có thể ràng buộc bất kỳ trường nào hoặc một danh sách các trường là duy duy nhất (unique). Nếu nhiều trường được chỉ định là không lặp, bộ giá trị kết hợp của các trường đó phải là duy nhất, dầu là hai hoặc một số bản ghi có cùng giá trị trong một trường của nhóm các trường đó.

- PRIMARY KEY – Chỉ định một hoặc một tập các trường trong bảng tạo thành khoá chính. Tất cả giá trị trong khoá chính phải duy nhất, và có một khoá chính duy nhất cho một bảng. Nếu bạn thiết lập một khoá chính cho một bảng đã tồn tại khoá chính thì hệ thống sẽ báo lỗi.

- FOREIGN KEY – Xác định một trường như một khoá ngoài. Nếu khoá chính của bảng ngoài có nhiều hơn một trường, bạn phải dùng một định nghĩa cho chỉ mục nhiều trường, liệt kê tất cả các trường tham chiếu, tên của các bảng, tên của bảng ngoài, và tên của các trường được tham chiếu trong bảng ngoài theo cùng một thứ tự như đã liệt kê danh sách các trường tham chiếu. Nếu trường được tham chiếu là khoá chính của bảng ngoài, bạn không cần chỉ định trường được tham chiếu mà Jet engine đã ngầm định khoá chính của bảng ngoài là trường được tham chiếu.

Ví dụ, để thêm một chỉ mục cho bảng Titles trong CSDL Biblio.mdb, bạn có thể dùng câu lệnh sau đây:

ALTER TABLE Titles ADD CONSTRAINT MyIndex _ FOREIGN KEY (PubID) REFERENCES Publishers (PubID);

Nhớ rằng, bằng cách dùng từ khoá FOREIGN KEY, Chúng ta đang thiết lập một quan hệ giữa trường PubID của bảng Titles (khoá ngoài) và trường PubID trong bảng Publishers (khoá chính). Mối quan hệ này sẽ được ràng buộc bởi Jet engine, như thể bạn đang dùng phương thức CreateRelation được mô tả trong "Tạo và sửa đổi CSDL"
NGUYỄN THIÊN TỨ
Nguồn: Sưu tầm

Related Posts

Những kiến thức cơ bản về MS SQL - Phần 3
4/ 5
Oleh