Cập nhật, bổ sung và xoỏ dữ liệu thụng qua khung nhỡn

Một phần của tài liệu Bài giảng SQL (Trang 86 - 89)

Đối với một số khung nhỡn, ta cú thể tiến hành thực hiện cỏc thao tỏc cập nhập, bổ sung và xoỏ dữ liệu. Thực chất, những thao tỏc này sẽ được chuyển thành những thao tỏc tương tự trờn cỏc bảng cơ sở và cú tỏc động đến những bảng cơ sở.

Về mặt lý thuyết, để cú thể thực hiện thao tỏc bổ sung, cập nhật và xoỏ, một khung nhỡn trước tiờn phải thoả món cỏc điều kiện sau đõy:

• Trong cõu lệnh SELECT định nghĩa khung nhỡn khụng được sử dụng từ khoỏ DISTINCT, TOP, GROUP BY và UNION.

• Cỏc thành phần xuất hiện trong danh sỏch chọn của cõu lệnh SELECT phải là cỏc cột trong cỏc bảng cơ sở. Trong danh sỏch chọn khụng được chứa cỏc biểu thức tớnh toỏn, cỏc hàm gộp.

Ngoài những điều kiện trờn, cỏc thao tỏc thay đổi đến dữ liệu thụng qua khung nhỡn cũn phải đảm bảo thoả món cỏc ràng buộc trờn cỏc bảng cơ sở, tức là vẫn đảm bảo tớnh toàn vẹn dữ liệu. Vớ dụ dưới đõy sẽ minh hoạ cho ta thấy việc thực hiện cỏc thao tỏc bổ sung, cập nhật và xoỏ dữ liệu thụng qua khung nhỡn.

Vớ dụ 3.14: Xột định nghĩa hai bảng DONVI và NHANVIEN như sau:

CREATE TABLE donvi (

madv INT PRIMARY KEY, tendv NVARCHAR(30) NOT NULL, dienthoai NVARCHAR(10) NULL, )

CREATE TABLE nhanvien (

manv NVARCHAR(10) PRIMARY KEY, hoten NVARCHAR(30) NOT NULL, ngaysinh DATETIME NULL, diachi NVARCHAR(50) NULL, madv INT FOREIGN KEY

REFERENCES donvi(madv) ON DELETE CASCADE

ON UPDATE CASCADE )

Giả sử trong hai bảng này đó cú dữ liệu như sau:

Bảng DONVI

Bảng NHANVIEN

Cõu lệnh dưới đõy định nghĩa khung nhỡn NV1 cung cấp cỏc thụng tin về mó nhõn viờn, họ tờn và mó đơn vị nhõn viờn làm việc:

CREATE VIEW nv1 AS

SELECT manv,hoten,madv FROM nhanvien

Nếu ta thực hiện cõu lệnh

INSERT INTO nv1 VALUES('NV04','Le Thi D',1)

Một bản ghi mới sẽ được bổ sung vào bảng NHANVIEN và dữ liệu trong bảng này sẽ là:

Thụng qua khung nhỡn này, ta cũng cú thể thực hiện thao tỏc cập nhật và xoỏ dữ liệu. Chẳng hạn, nếu ta thực hiện cõu lệnh:

DELETE FROM nv1 WHERE manv='NV04'

Thỡ bản ghi tương ứng với nhõn viờn cú mó NV04 sẽ bị xoỏ khỏi bảng NHANVIEN Nếu trong danh sỏch chọn của cõu lệnh SELECT cú sự xuất hiện của biểu thức tớnh toỏn đơn giản, thao tỏc bổ sung dữ liệu thụng qua khung nhỡn khụng thể thực hiện được. Tuy nhiờn, trong trường hợp này thao tỏc cập nhật và xoỏ dữ liệu vấn cú thể cú khả năng thực hiện được (hiển nhiờn khụng thể cập nhật dữ liệu đối với một cột cú được từ một biểu thức tớnh toỏn).

Vớ dụ 3.15: Xột khung nhỡn NV2 được định nghĩa như sau:

CREATE VIEW nv2 AS

SELECT manv,hoten,YEAR(ngaysinh) AS namsinh,madv FROM nhanvien

Đối với khung nhỡn NV2, ta khụng thể thực hiện thao tỏc bổ sung dữ liệu nhưng cú thể cập nhật hoặc xoỏ dữ liệu trờn bảng thụng qua khung nhỡn này. Cõu lệnh dưới đõy là khụng thể thực hiện được trờn khung nhỡn NV2

INSERT INTO nv2(manv,hoten,madv) VALUES('NV05','Le Van E',1)

Nhưng cõu lệnh:

UPDATE nv2 SET hoten='Le Thi X' WHERE manv='NV04' (adsbygoogle = window.adsbygoogle || []).push({});

hoặc cõu lệnh

DELETE FROM nv2 WHERE manv='NV04'

lại cú thể thực hiện được và cú tỏc động đối với dữ liệu trong bảng NHANVIEN.

Trong trường hợp khung nhỡn được tạo ra từ một phộp nối (trong hoặc ngoài) trờn nhiều bảng, ta cú thể thực hiện được thao tỏc bổ sung hoặc cập nhật dữ liệu nếu thao tỏc này chỉ cú tỏc động đến đỳng một bảng cơ sở (cõu lệnh DELETE khụng thể thực hiện được trong trường hợp này).

Vớ dụ 3.16: Với khung nhỡn được định nghĩa như sau:

CREATE VIEW nv3 AS

SELECT manv,hoten,ngaysinh,

diachi,nhanvien.madv AS noilamviec, donvi.madv,tendv,dienthoai

FROM nhanvien FULL OUTER JOIN donvi ON nhanvien.madv=donvi.madv

Cõu lệnh:

INSERT INTO nv3(manv,hoten,noilamviec) VALUES('NV05','Le Van E',1)

sẽ bổ sung thờm vào bảng NHANVIEN một bản ghi mới. Hoặc cõu lệnh:

INSERT INTO nv3(madv,tendv) VALUES(3,'P. Ke toan')

bổ sung thờm vào bảng DONVI một bản ghi do cả hai cõu lệnh này chỉ cú tỏc động đến đỳng một bảng cơ sở.

Cõu lệnh dưới đõy khụng thể thực hiện được do cú tỏc động một lỳc đến hai bảng cơ sở.

INSERT INTO nv3(manv,hoten,noilamviec,madv,tendv) VALUES('NV05','Le Van E',1,3,'P. Ke toan')

Một phần của tài liệu Bài giảng SQL (Trang 86 - 89)