Giá trị NULL dùng để chỉ các giá trị chưa biết, không thể dùng được, hay sẽ được bổ sung sau.. Mặc định các cột hay kiểu dữ liệu của người dùng thường không có gía trị NULL... Tạo
Trang 1Chương 3
1
Trang 2 Nhận biết được các đối tượng
trong 1 CSDL của SQL Server
Chọn kiểu dữ liệu SQL Server thích
hợp cho yêu cầu lưu trữ dữ liệu, và
tạo kiểu dữ liệu theo nhu cầu
Trang 5Mở Folder chưa đối tương cần xem
Trang 7 Giá trị NULL dùng để chỉ các giá trị chưa biết, không thể dùng được, hay sẽ được bổ sung sau Nó khác với giá trị rỗng (empty) hay zero Hai giá trị null không được xem
là bằng nhau Khi so sánh hai giá trị null, hay 1 giá trị null với 1 giá trị khác thì kết quả trả về sẽ là unknown.
Ví dụ: số phone của khách hàng hiện tại chưa có, nhưng
có thể sẽ được bổ sung này Số phone sẽ có giá trị là
null.
Để kiểm tra giá trị null trong lệnh truy vấn, phải dùng toán tử IS NULL hay IS NOT NULL trong mệnh đề
WHERE.
Mặc định các cột hay kiểu dữ liệu của người dùng
thường không có gía trị NULL.
7
Trang 8 Tạo kiểu dữ liệu người dùng là để bảo đảm tính thống nhất của dữ liệu ( data
consistency) khi m à nhiều bảng phải lưu
trữ cùng 1 loại dữ liệu trong 1 cột
Kiểu dữ liệu của người dùng được tạo dựa
vào các kiểu dữ liệu hệ thống.
Chỉ có tác dụng trong CSDL mà nó được
tạo ra ngoại trừ trường hợp nó được tạo ra trong CSDL hệ thống model
8
Trang 10Dùng Enterprise Manager để tạo
Nhấp phải tại folder
User Defined Data Type ,
chọn lệnh
New User Defined Data Type
Trang 11 Bảng là một đối tượng của CSDL được
dùng để lưu trữ dữ liệu
Dữ liệu trong bảng được tổ chức thành các
hàng (rows) và cột (columns)
Mỗi hàng trong bảng biểu diễn một bản ghi
(record) duy nhất Mỗi cột biểu diễn một thuộc tính (attribute).
Tên cột trong 1 bảng không được trùng nhau
nhưng cho phép tên cột có thể trùng nhau trong
những bảng khác nhau của cùng 1 CSDL.
SQL Server cho phép:
Tối đa 2 triệu bảng trong 1 CSDL.
Tối đa 1024 cột trong 1 bảng
Tối đa 8060 bytes trong 1 hàng
11
Trang 12 Phải có quyền tạo và thay đổi cấu
trúc bảng, nếu không sẽ sinh ra lỗi
Tên bảng phải là từ định danh hợp lệ
Với phiên bản SQL Server 6.5 hoặc
các phiên bản trước nữa thì sẽ không thay đổi được kiểu dữ liệu cột hoặc
thêm cột cho một bảng dữ liệu
12
continued
Trang 13 Không thể thay đổi dữ liệu cột hoặc
huỷ cột mà có tham chiếu chỉ mục
Không thể xóa 1 bảng nếu có bất kỳ phụ thuộc giữa bảng đó với các đối
tượng khác của SQL Server
13
continued
Trang 16 Cú pháp:
column_name AS computed_column_expression
Là một cột ảo không được lưu trữ vật lý trong
bảng Nó được tính toán dựa vào các cột khác
trong cùng bảng thông qua 1 biểu thức
Ví dụ : cost AS price * qty.
Có thể được dùng trong mệnh đề SELECT,
WHERE, hay ORDER BY
Không thể dùng trong lệnh INSERT hay UPDATE
Có thể được dùng như giá trị khóa trong chỉ
mục hay 1 phần của các ràng buộc PRIMARY
KEY hay UNIQUE nếu gía trị của nó được định
nghĩa bởi 1 biêu thức xác định và kiểu dữ liệu của giá trị trả về hợp lệ.
Ví dụ: Cột tính toán a+b c ó thể được dùng làm chỉ mục
nhưng a+DATEPART(dd, GETDATE()) kh ông thể dùng làm chỉ mục
16
Trang 17CREATE TABLE cthoadon
( sohd int NOT NULL,
MaHang char(4) NOT NULL,
SoLuong int NOT NULL,
DonGia money,
ThanhTien AS SoLuong*DonGia
)
17
Trang 18 Tạo giá trị gia tăng duy nhất cho 1 cột, và cột này thường được dùng khoá chính cho bảng Giá trị được gán thường là các kiểu
dữ liệu sau: tinyint, smallint, int, bigint,
decimal(p,0), hay numeric(p,0).
Trong mỗi bảng chỉ cho phép 1 cột là
identity mà thôi.
tiếp.
Giá trị mặc định thường là (1,1).
18
Trang 19CREATE TABLE jobs
(
job_id smallint IDENTITY(1,1) ,
job_desc varchar(50) NOT NULL
)
19
Trang 20 Để bảo đảm chất lượng (quality)
của dữ liệu trong 1 CSDL.
Domain integrity (bảo toàn miền)
Entity integrity (bảo toàn thực thể)
Referential integrity (bảo toàn tham chiếu)
User-defined integrity (bảo toàn do
người dùng quy định)
20
Trang 21 Ví dụ: trường phone phải có dạng ‘0914-071569’
Dãy giá trị cho phép :
Ví dụ: trường tuổi chỉ trong khoảng 1-100, trường
lương trong khoảng từ 0-10.000.000
21
Trang 22 Entity integrity — xác định mỗi hàng như 1 thực thể
duy nhất trong bảng
Referential integrity — bảo toàn mối quan hệ giữa
hai bảng, bảo đảm các giá trị khoá được thống nhất giữa các bảng có quan hệ nhau Không có tham chiếu khi không tồn tại giá trị khoá trong bảng chính, và nếu giá trị khoá thay đổi thì tất cả các tham chiếu đến nó cũng thay đổi thống nhất theo Khi áp dụng quy luật bảo toàn tham chiếu, người dùng không thể:
Thêm các bản ghi vào bảng được quan hệ (related table) nếu không có bản ghi tương ứng trong bảng chính (primary table).
Thay đổi giá trị trong bảng chính làm cho các bản ghi trong bảng được quan hệ bị mất mối liên kết ( orphaned record)
Xoá các bản ghi trong bảng chính nếu tồn tại 1 số bản ghi
trong bảng được quan hệ.
22
Trang 23 SQL server 2000 hỗ trợ các loại constraint sau :
Các ràng buộc dùng để bảo đảm các giá trị
của dữ liệu không vi phạm quy luật bảo toàn
Trang 24 C ú pháp: DEFAULT constant_expression
Default dùng để xác định giá trị “sẵn trước” được gán cho 1 cột khi thêm 1 bản ghi mới vào bảng.
DEFAULT có thể áp dụng cho bất kỳ cột nào trong bảng ngoại trừ cột có kiểu timestamp
hay có thuộc tính IDENTITY.
chuỗi ký tự, hàm hệ thống, hay giá trị NULL.
24
Trang 25CREATE TABLE jobs
(
job_id smallint IDENTITY(1,1) ,
job_desc varchar(50) NOT NULL
DEFAULT 'New Position - title not
formalized yet'
)
25
Trang 26< column_constraint > ::=
[ CONSTRAINT constraint_name ]
{ [ NULL | NOT NULL ]
| [ { PRIMARY KEY | UNIQUE } ]
Trang 27 Là loại ràng buộc để thực thi quy luật bảo toàn thực thể cho 1 cột hay 1 nhóm cột thông qua 1 chỉ mục (index)
Mỗi bảng chỉ có thể có duy nhất 1 ràng buộc
primary key nhưng có thể có nhiều ràng
Trang 28 Ràng buộc UNIQUE được dùng cho các cột không phải là primary key
ràng buộc unique.
KEY nhưng nó cho phép 1 hàng được
quyền có giá trị NULL
unique nhưng chỉ có 1 ràng buộc primary key mà thôi.
28
Trang 29CREATE TABLE jobs
(
job_id smallint PRIMARY KEY
job_desc varchar(50) NOT NULL
DEFAULT 'New Position - title not
formalized yet' )
29
Trang 30(telephone directory) trong đó dữ liệu được sắp xếp bởi tên thuê bao
30
Trang 31 Chỉ mục nonclustered: là chỉ mục có cấu trúc riêng biệt độc lập với thứ tự vật lý
của bảng dữ liệu.
Thứ tự vật lý của chỉ mục nonclustered không trùng với thứ tự các bản ghi trong bảng dữ liệu
Tương tự như chỉ mục trong textbook
chỉ mục nonclustered để chỉ mục
nonclustered không cần phải tạo lại.
mục nonclustered
31
Trang 32 Quan hệ chỉ có thể được tạo ra giữa các bảng trong cùng 1 CSDL và trên cùng 1
có thể tham chiếu đến 253 bảng khác nhau
32
Trang 33[FOREIGN KEY ]
REFERENCES ref_table [ ( ref_column ) ]
[ ON DELETE { CASCADE | NO ACTION } ]
ON UPDATE { CASCADE | NO ACTION } ]
33
Trang 34 ON DELETE {CASCADE | NO ACTION}
Xác định hành động cần phải thực hiện cho 1 hàng trong bảng đang tạo nếu hàng đó có
quan hệ tham chiếu và hàng tham chiếu bị
xoá khỏi bảng chính Mặc định là NO ACTION
CASCADE: dùng để xác định là hàng sẽ bị xoá khỏi bảng tham chiếu nếu hàng đó bị xoz1 khỏi bảng chính
NO ACTION: SQL Server sẽ đưa ra thông báo lỗi và việc xoá hàng trên bảng chính sẽ bị từ chối.
34
Trang 35CREATE TABLE Employee
( EmpID int primary key NOT NULL,
LastName varchar(20) NOT NULL,
FirstName varchar(10) NOT NULL,
job_id smallint NOT NULL DEFAULT 1
REFERENCES jobs(job_id)
)
35
Trang 36CONSTRAINT constraint_name CHECK (check_logic)
Check_logic: biểu thức với các
toán tử số học, toán tử quan hệ
'[0-9][0-9][0-9][0-9]')
50000)
('Berkeley', 'Boston', 'Chicago', ' Dallas‘))
36
Trang 37 C ó th ể tạo ràng buộc theo 2 mức :
{ ( column [ ASC | DESC ] [ , n ] ) } ]
| FOREIGN KEY [ ( column [ , n ] ) ]
EFERENCES ref_table [ ( ref_column [ , n ] ) ]
[ ON DELETE { CASCADE | NO ACTION } ]
[ ON UPDATE { CASCADE | NO ACTION } ]
[ NOT FOR REPLICATION ]
| CHECK [ NOT FOR REPLICATION ]
( search_conditions )
}
37
Trang 38 Tạo 1 ràng buộc khoá chính ở mức
bảng
CREATE TABLE cthoadon
( sohd int NOT NULL,
MaHang char(4) NOT NULL,
SoLuong int NOT NULL,
Trang 39 Để kiểm tra xem bảng đã được tạo
hay chưa?
sp_help table_name
Để kiểm tra xem kiểu dữ liệu của
người dùng đã được tạo hay chưa?
sp_help datatype_name
39
Trang 40Không thể sửa đổi một cột nếu:
Nó là 1 cột tính toán hay được dùng
để định nghĩa cột tính toán
Nó được dùng làm chỉ mục
Được dùng trong các ràng buộc
(constraint) loại check hay unique
Nó được dùng làm khoá chính hay
khoá ngoại
40
Trang 41 Để sửa đổi cấu trúc 1 cột:
ALTER TABLE table_name
NULL]
ALTER TABLE table_name
ADD { [ < column_definition > ]
| column_name AS computed_column_expression } [ , n ]
ALTER TABLE table_name
DROP COLUMN column_name
41
Trang 42 Thêm cột address vào bảng Employee
Alter table Employee
Add column address varchar(30)
42
Trang 44 [WITH CHECK | WITH NOCHECK] được dùng để xác định xem dữ liệu đang có trong bảng có bị kiểm tra hay không khi 1 ràng buộc mới vừa được thêm vào hay khi 1 ràng buộc cũ hoạt động trở lại.
nó vi phạm ràng buộc, vì vậy để tránh việc kiểm tra dữ liệu và cho phép thêm ràng buộc này dùng tuỳ chọn WITH NOCHECK
CREATE TABLE doc_exd ( column_a INT)
INSERT INTO doc_exd VALUES (-1)
ALTER TABLE doc_exd WITH NOCHECK
ADD CONSTRAINT exd_check
CHECK (column_a > 1)
44
Trang 45 { CHECK | NOCHECK } CONSTRAINT
{ ALL | constraint_name [ , n ] }
Để cho phép ràng buộc constraint_name
được hoạt động (enabled) hay bị cấm
(disabled)
Tuỳ chọn này chỉ dùng cho các ràng buộc FOREIGN KEY và CHECK
45
Trang 46Tạo bảng
CREATE TABLE cnst_example
(id INT NOT NULL, name VARCHAR(10) NOT
NULL,
salary MONEY NOT NULL CONSTRAINT
salary_cap CHECK (salary < 100000) )
Báo lỗi khi thêm bản ghi mới vi phạm ràng
buộc
INSERT INTO cnst_example VALUES (3,"Pat
Jones",105000) bị báo lỗi
Cấm ràng buộc hoạt động
ALTER TABLE cnst_example
NOCHECK CONSTRAINT salary_cap
Lệnh thêm bản ghi mới thành công
INSERT INTO cnst_example VALUES (3,"Pat
Jones",105000)
Cho ràng buộc hoạt động trở lại
ALTER TABLE cnst_example
CHECK CONSTRAINT salary_cap 46