Ban chỉ ĐẠo công nghệ thông tin của cơ quan đẢng giáo trình thiết kế, XÂy dựng và quản trị CƠ SỞ DỮ liệu hà NỘI, 2004



tải về 1.04 Mb.
trang24/29
Chuyển đổi dữ liệu07.07.2016
Kích1.04 Mb.
1   ...   21   22   23   24   25   26   27   28   29

V.CÁC LỆNH QUẢN LÝ DỮ LIỆU NÂNG CAO


Trong phần 3.2 bạn đã học cách tạo cấu trúc bảng và nhập, sửa, xoá và liệt kê dữ liệu. Trong phần này, bạn sẽ học cách thay đổi cấu trúc bảng bằng cách thay đổi các đặc điểm thuộc tính và bổ sung cột. Sau đó bạn sẽ học cách nhập dữ liệu vào các cột mới vừa sửa. Cuối cùng, bạn sẽ học cách sao chép bảng hoặc một phần bảng, cũng như cách xoá bảng.

Mọi sự thay đổi trong cấu trúc bảng đều sẽ dựa trên lệnh ALTER, kèm theo sau là lệnh tạo ra sự thay đổi bạn mong muốn. Có hai lệnh thường dùng là MODIFY và ADD. Lệnh MODIFY sẽ cho phép bạn thay đổi các đặc điểm cột, còn lệnh ADD sẽ cho phép bạn bổ sung một cột. Phần lớn các RDBMS sẽ không cho phép bạn xoá cột vì thao tác này có thể xoá dữ liệu quan trọng được dùng trong bảng khác.

Cú pháp cơ bản của lệnh ALTER do đó có hai dạng:

ALTER TABLE


MODIFY ( );

hoặc


A
Lưu ý: XDB không dùng cặp cặp dấu ngoặc tròn như trên, do đó các dãy lệnh viết lại tương ứng là

ALTER TABLE


MODIFY ;

hoặc


ALTER TABLE
ADD ;

LTER TABLE
ADD ( );

1.Thay đổi kiểu dữ liệu của cột


Dùng cú pháp MODIFY vừa trình bày, thuộc tính V_CODE của bảng INVENTRY có thể được thay đổi từ kiểu nguyên thành kiểu kí tự với lệnh

ALTER TABLE INVENTRY


MODIFY (V_CODE CHAR(5));

Hoặc, nếu bạn đang dùng SQL XDB, gõ

ALTER TABLE INVENTRY
MODIFY V_CODE CHAR(5);

Một số phiên bản SQL (như ORACLE) sẽ không cho phép bạn thay đổi kiểu dữ liệu trừ khi cột được thay đổi rỗng. Chẳng hạn, nếu bạn muốn thay đổi trường V_CODE từ kiểu nguyên thành kiểu kí tự, lệnh

ALTER TABLE INVENTRY
MODIFY (V_CODE CHAR(5));

sẽ đưa ra thông báo lỗi vì cột V_CODE hiện đang chứa dữ liệu. Nếu cột V_CODE không chứa dữ liệu, dãy lệnh trên có thể tạo ra thay đổi cho cấu trúc bảng mong muốn.


2.Thay đổi đặc điểm thuộc tính


Nếu cột cần thay đổi đang chứa dữ liệu, bạn có thể tạo ra bất cứ sự thay đổi nào trên các đặc điểm cột nếu các thay đổi đó không làm thay đổi kiểu dữ liệu. Chẳng hạn, nếu bạn muốn tăng độ rộng của cột PRICE thành tám chữ số, dùng lệnh

ALTER TABLE INVENTRY


MODIFY (PRICE DECIMAL(8,2));

Nếu bây giờ bạn liệt kê lại nội dung, bạn sẽ thấy rằng độ rộng cột PRICE đã tăng lên một chữ số. Nhớ rằng, phiên bản SQL của bạn có thể không dùng cặp dấu ngoặc tròn:

ALTER TABLE INVENTRY
MODIFY PRICE DECIMAL(8,2);

3.Bổ sung cột cho bảng


Bạn có thể thay đổi bảng hiện tại với việc bổ sung một hoặc nhiều cột. Trong ví dụ dưới đây, chúng ta sẽ bổ sung cột có tên SALE_CODE cho bảng INVENTRY. (Chúng ta sẽ dùng cột này về sau để xác định xem có hay không một sản phẩm có sẵn trong kho ứng với một khoảng thời gian nào đó đã được bán trong một thương vụ cụ thể.)

Giả sử chúng ta muốn các mục SALE_CODE là 1, 2, hoặc 3. Vì chúng ta sẽ không thực hiện các phép toán số học với SALE_CODE nên SALE_CODE sẽ được định kiểu là thuộc tính kí tự đơn. Lưu ý sự bao gồm tất cả thông tin yêu cầu trong lệnh ALTER dưới đây:

ALTER TABLE INVENTRY
ADD (SALE_CODE CHAR(1));

Một số phiến bản SQL (chẳng hạn của XDB) có thể bỏ qua cặp dấu ngoặc tròn:

ALTER TABLE INVENTRY
ADD SALE_CODE CHAR(1);

4.Nhập dữ liệu cho cột mới


Để đưa dữ liệu vào trong một phần của hàng, SQL dùng lệnh UPDATE. Lệnh INSERT chúng ta dùng trước đây không đưa ra cách xác định ví trí các mục dữ liệu cột cụ thể; hoặc một hàng đầy đủ hoặc không có hàng nào được đưa vào. Chẳng hạn, đưa giá trị ‘2’ của thuộc tính SALE_CODE vào hàng bốn, dùng lệnh UPDATE kết hợp với khóa chính P_CODE ‘54778-2T’ để hoàn thành công việc. (Kiểm tra nội dung bảng gốc và lưu ý rằng P_CODE = ‘54778-2T’ định danh hàng bốn!) Nhập giá trị với dãy lệnh

UPDATE INVENTRY


SET SALE_CODE = ‘2’
WHERE P_CODE = ‘54778-2T’;

Lệnh dưới đây với bảng đã thay đổi kiểm tra ảnh hưởng của lệnh nêu trên:

SELECT P_DESCRIPT, STOCK_DATE, SALE_CODE
FROM INVENTRY
WHERE P_CODE = ‘54778-2T’;

đưa ra kết quả



P_DESCRIPT

STOCK_DATE

SALE_CODE

Rat-tail file, 1/8in fine

12/03/90

2

Dãy dữ liệu có thể được nhập vào bởi cùng một cách, xác định từng vị trí mục dữ liệu với khóa chính P_CODE và ví trí cột của nó SALE_CODE. Chẳng hạn, nếu chúng ta muốn nhập giá trị SALE_CODE ‘1’ ứng với các giá trị P_CODE là ‘2232/QWE’ và ‘2232/QTY’, chúng ta dùng

UPDATE INVENTRY


SET SALE_CODE = ‘1’
WHERE P_CODE IN (‘2232/QWE’, ‘2232/QTY’);

Hoặc nếu RDBMS của bạn không hỗ trợ IN, dùng hai lệnh dưới đây:

UPDATE INVENTRY
SET SALE_CODE = ‘1’
WHERE P_CODE = ‘2232/QWE’;

UPDATE INVENTRY


SET SALE_CODE = ‘1’
WHERE P_CODE = ‘2232/QTY’;

Kết quả có thể được kiểm tra với lệnh

SELECT P_DESCRIPT, STOCK_DATE, SALE_CODE
FROM INVENTRY;

để đưa ra kết quả



P_DESCRIPT

STOCK_DATE

SALE_CODE

7.25in, power saw blade
2.5in, wood screw, 100
PVC pipe, 3.5in, 8ft
Rat-tail file, 1/8in fine
Sledge hammer, 12lb
Houselite chain saw, 16in
B&D jigsaw, 8in, blade
Hardware cloth,1/4in,50ft
Claw hammer
B&D jigsaw, 12in, blade

08/12/91
06/25/91
07/02/91
12/03/90
02/15/91
08/11/91
11/26/90
08/14/91
08/12/91
11/26/90

2


1

1


Mặc dù dãy UPDATE vừa chỉ ra cho phép chúng ta bổ sung dữ liệu vào các ô bảng đã chỉ rõ, quá trình rất phức tạp. May mắn là, nếu mối quan hệ có thể được thiết lập giữa các mục dữ liệu và các cột hiện có, mối quan hệ đó có thể được dùng để gán các giá trị vào các ô thích hợp của chúng. Chẳng hạn, giả sử rằng chúng ta muốn đặt mã bán hàng dựa trên STOCK_DATE vào bảng, dùng lịch sau:

STOCK_DATE SALE_CODE

trước 01/01/91 2

trong khoảng 01/01/91 đến 07/01/91 1

Hai dãy lệnh dưới đây sẽ tạo ra các phép gán thích hợp. (Lưu ý: Một số phiên bản SQL yêu cầu không dùng các ngoặc nhọn hoặc dấu nháy cho giá trị ngày!)

UPDATE INVENTRY


SET SALE_CODE = ‘2’
WHERE STOCK_DATE < ‘01/01/91’;

UPDATE INVENTRY


SET SALE_CODE = ‘1’
WHERE STOCK_DATE >= ‘01/01/91’
STOCK_DATE < ‘07/01/91’;

Kiểm tra kết quả gán như dưới đây:

SELECT P_DESCRIPT, STOCK_DATE, SALE_CODE
FROM INVENTRY;

Kết quả đưa ra là



P_DESCRIPT

STOCK_DATE

PRICE

SALE_CODE

7.25in, power saw blade
2.5in, wood screw, 100
PVC pipe, 3.5in, 8ft
Rat-tail file, 1/8in fine
Sledge hammer, 12lb
Houselite chain saw, 16in
B&D jigsaw, 8in, blade
Hardware cloth,1/4in,50ft
Claw hammer
B&D jigsaw, 12in, blade

08/12/91
06/25/91
07/02/91
12/03/90
02/15/91
08/11/91
11/26/90
08/14/91
08/12/91
11/26/90

14.99
8.45
5.87
4.99
14.40
256.99
99.87
39.95
5.95
109.92

1

2


1

2


2

(Lưu các thay đổi bởi lệnh COMMIT.)
1   ...   21   22   23   24   25   26   27   28   29


Cơ sở dữ liệu được bảo vệ bởi bản quyền ©hocday.com 2016
được sử dụng cho việc quản lý

    Quê hương