Ch nh s a d li u b ng các l nh INSERT, UPDATE, ỉ ử ữ ệ ằ ệ
DELETE, và TRUNCATE TABLE.
Th c thi Viewự
!"
#
Vi c b o trì 1 database liên quan đ n vi c b sung ệ ả ế ệ ổ
thông tin m i, s a l i d li u không chính xác và xóa ớ ử ạ ữ ệ
đi d li u cũ.ữ ệ
Nhóm l nh ệ Data Manipulation Language (DML) c a T–ủ
SQL đ c dùng đ b o trì d li u, bao g m 3 l nh ượ ể ả ữ ệ ồ ệ
sau:
$%&'()**+,
-
L nh dùng đ thêm các hàng vào 1 b ng hay view.ệ ể ả
Cú pháp:
INSERT [INTO]
table_name| view_name[(column_list)]
VALUES (values_list)|select_statement
| DEFAULT VALUES
./
0
Giá tr có th đ c phát t đ ng cho các c t sau:ị ể ượ ự ộ ộ
Khi dùng giá tr DEFAULT :ị
!
"
#
$$
+1
2
Hãy xem c u trúc c a b ng ấ ủ ả Sales:
Create table Sales
(
ItemCode char(6) not null,
ItemName char(40) null,
QtySold int not null,
SaleDate datetime not null default getdate()
)
+1
3
INSERT Sales
VALUES ('I005', 'Printer', 100, '05/12/01')
INSERT Sales (ItemCode, ItemName, QtySold, SaleDate)
VALUES ('I005', 'Printer', 100, '05/12/01')
INSERT Sales (ItemName, ItemCode, QtySold, SaleDate)
VALUES ('Printer', 'I005', 100, '05/12/01')
INSERT Sales
VALUES ('I005', NULL, 100, '05/12/01')
INSERT Sales
VALUES ('I005', 'Printer', 100, Default)
Các l nh trên có cho cùng k t qu khôngệ ế ả ??
+1
4
CREATE TABLE T1
( column_1 int IDENTITY,
column_2 varchar(30))
INSERT T1 VALUES ('Row #1')
INSERT T1 (column_2) VALUES ('Row #2')
CREATE TABLE T1
( column_1 int identity,
column_2 varchar(30)
DEFAULT ('column default'),
column_3 timestamp,
column_4 int NULL)
INSERT INTO T1 DEFAULT VALUES
%&'()**&'$'.)
5
Truy v n con SELECT trong l nh INSERT đ c dùng ấ ệ ượ
đ thêm giá tr vào b ng t 1 hay nhi u b ng/view ể ị ả ừ ề ả
khác.
M t hay nhi u hàng đ c thêm vào cùng 1 lúc.ộ ề ượ
Ví d :ụ
USE pubs
INSERT INTO MyBooks
SELECT title_id, title, type FROM titles
WHERE type = 'mod_cook'
$678)'
9
L nh update dùng đ thay đ i giá tr hi n có trong ệ ể ổ ị ệ
1 b ngả .
Cú pháp:
UPDATE table_name| view_name
SET
column_name = expression | DEFAULT |
NULL
| @variable_name = expression
| @variable_name = column = expression
[FROM table_name]
[WHERE search_conditions]
$678)'
Expression: giá tr đu c tr v t bi u th c s thay ị ợ ả ề ừ ể ứ ẽ
th giá tr hi n có trong c t ế ị ệ ộ column_name hay bi n ế
@variable
Ví d : ụ
declare @newprice as money
update dbo.Products
set @newprice = UnitPrice= UnitPrice*1.1
where ProductID= 14
print str(@newprice,8,2)
$678)'
Ví d : đ c p nh t nh ng phi u bán hàng m i nh t t ụ ể ậ ậ ữ ế ớ ấ ừ
b ng ả sales vào b ngả titles
UPDATE titles
SET ytd_sales = titles.ytd_sales + sales.qty
FROM titles, sales
WHERE titles.title_id = sales.title_id
AND sales.ord_date = (SELECT
MAX(sales.ord_date) FROM sales)
L nh có th c hi n đúng yêu c u không???ệ ự ệ ầ
678)',,
#
M t l nh UPDATE không bao gi c p nh t cùng 1 dòng ộ ệ ờ ậ ậ
t i l n th haiớ ầ ứ
UPDATE titles
SET ytd_sales = ytd_sales +(SELECT SUM(qty)
FROM sales
WHERE sales.title_id = titles.title_id
AND sales.ord_date IN (SELECT
MAX(ord_date) FROM sales))
FROM titles, sales
$'$')'
-
L nh DELETE dùng đ xoá các hàng ra kh i 1 b ng.ệ ể ỏ ả
Cú pháp:
DELETE [FROM] table_name|view_name
[FROM table_source]
WHERE search_conditions
Ví d : Xóa các ng viên đã tham d kỳ thi đ u vào h n ụ ứ ự ầ ơ
hai năm tr c trong c s d li u HeadHunt?ướ ơ ở ữ ệ
$'$')'
0
Use Headhunt
DELETE FROM ExternalCandidate
WHERE dTestDate < dateadd(yy,-2,getdate())
Ví d 2:ụ
USE pubs
DELETE titleauthor FROM titleauthor
INNER JOIN titles
ON titleauthor.title_id = titles.title_id
WHERE titles.title LIKE '%computers%'
Xoá các hàng trong b ng titleauthor d a vào các tiêu ả ự
đ sách trong b ng title có tên v i t computersề ả ớ ừ
$)(6.8)')8$'
2
Dùng đ xoá t t c các hàng kh i 1 b ng mà không ghi nh t ký ể ấ ả ỏ ả ậ
l i. ạ
L nh TRUNCATE TABLE và l nh DELETE TABLE không có ệ ệ
m nh đ WHERE t ng t nhau nh ng l nh TRUNCATE ệ ề ươ ự ư ệ
TABLE th c hi n nhanh h n.ự ệ ơ
Không th dùng l nh TRUNCATE TABLE cho các b ng đ c ể ệ ả ượ
tham chi u nh ng có th dùng thay th b ng l nh DELETE vì ế ư ể ế ằ ệ
l nh TRUNCATE TABLE không ghi nh t ký, nó không kích h at ệ ậ ọ
đ c triggerượ
Cú pháp:
TRUNCATE TABLE
[[database.]owner.]table_name
:;<;=+,>
3
View là 1 b ng o (ả ả virtual table) cho phép truy xu t vào ấ
1 t p con các c t t 1 hay nhi u b ngậ ộ ừ ề ả
View b o đ m ả ả đ c ượ tính b o m t cho d li u nh ả ậ ữ ệ ờ
vào vi c h n ch truy xu t (ệ ạ ế ấ restricting access), ch ỉ
cho phép hi n th :ể ị
%& '
%& '
% & '
%( ! &)"& ! & )"
'
%* !&' !+
:;<;=+,>
4
Khi 1 view đã đ c đ nh nghĩa, thì nó có th đ c ượ ị ể ượ
dùng nh b t kỳ b ng nào khác trong c s d li u.ư ấ ả ơ ở ữ ệ
M c dù view t ng t nh b ng, nh ng nó không ặ ươ ự ư ả ư
đ c l u tr th c s trong c s d li u. Nó ch suy ượ ư ữ ự ự ơ ở ữ ệ ỉ
d n các giá tr t nh ng b ng d li u g c.ẫ ị ừ ữ ả ữ ệ ố
$.('8)'+%'?
5
CREATE VIEW
[ < database_name >.] [ < owner > . ] view_name
[ ( column [ , n ] ) ]
[ WITH SCHEMABINDING]
AS
select_statement
[ WITH CHECK OPTION ]
Column: là tên c t đ c dùng trong view. Ch nên đ t ộ ượ ỉ ặ
tên c t cho view khi:ộ
" &' ,-!.
"& ,!./
01" 2
N u không đ t tên cho c t c a view thì nó s có cùng ế ặ ộ ủ ẽ
tên v i các c t trong m nh đ SELECTớ ộ ệ ề .
$.('8)'+%'?
9
[ WITH CHECK OPTION ]: b t bu c t t c các l nh ắ ộ ấ ả ệ
ch nh s a d li u liên quan đ n view đ u ph i tuân ỉ ử ữ ệ ế ề ả
theo đi u ki n l c trong m nh đ select. Khi 1 hàng b ề ệ ọ ệ ề ị
s a đ i thông qua view, tuỳ ch n WITH CHECK OPTION ử ổ ọ
này b o đ m là d li u v n còn nhìn th y đ c thông ả ả ữ ệ ẫ ấ ượ
qua view sau khi vi c s a đ i này đ c th c hi n.ệ ử ổ ượ ự ệ
$.('8)'+%'?
Ví dụ:
3) ! 4 ! ' &'
56789/999+
5: 781/999/;"
) 4< ; "5 "
N u m nh đ ế ệ ề WITH CHECK OPTION đ c dùng khi ượ
đ nh nghĩa view, thì các hàng s không th b ch nh ị ẽ ể ị ỉ
s a theo cách mà làm cho chúng b bi n m t kh i ử ị ế ấ ỏ
view. B t kỳ l nh s a đ i nào mà gây ra v n đ này s ấ ệ ử ổ ấ ề ẽ
b lo i tr và hi n th thông báo l i. ị ạ ừ ể ị ỗ
+1
CREATE VIEW CAonly
AS SELECT au_lname, au_fname, city, state
FROM authors
WHERE state = 'CA' WITH CHECK OPTION
UPDATE CAOnly
Set state = ‘KS’ WHERE state =‘CA’ and au_fname ='Ann'
L nh update này có th c hi n đ c không?ệ ự ệ ượ
)@AB&.C'8%%D
Dùng đ gán view vào l c đ . Khi đó, m nh đ select ể ượ ồ ệ ề
b t bu c ph i dùng tên 2 thành ph n (owner.object) cho ắ ộ ả ầ
các b ng, hàm c a ng i dùng.ả ủ ườ
View và table tham gia vào view có m nh đ schema ệ ề
binding không th xóa (drop) đ c n u view không b ể ượ ế ị
xóa hay đ c thay đ i đ không còn schema binding ượ ổ ể
n a. L nh ALTER TABLE dùng cho các b ng có tham gia ữ ệ ả
vào view có schema binding cũng s b l i n u các l nh ẽ ị ỗ ế ệ
này có nh h ng đ n vi c đ nh nghĩa view ả ưở ế ệ ị
#
+1=,E"
T o view có schemabindingạ
CREATE VIEW test_schemabinding
WITH SCHEMABINDING
AS
SELECT CompanyName, Address, City
FROM dbo.Customers
Xóa c t CompanyName b báo l i vì nó có liên quan đ n ộ ị ỗ ế
đ nh nghĩa viewị
ALTER TABLE Customers
DROP COLUMN CompanyName
-
Sửa đổi, xoá và đặt tên lại
view
0
S a đ i Viewử ổ
=$>3?)@A,!@.B
=*@
A?CC0DEDB
Xoá View
>DE3?)@
Đ t l i tên Viewặ ạ
@!@)/)@)