SlideShare a Scribd company logo
1 of 115
Download to read offline
TRƯỜNG ĐẠI HỌC ĐÀ LẠT
        KHOA TOÁN - TIN HỌC




HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU
     (Baøi giaûng toùm taét)




        NGƯỜI BIÊN SOẠN
      TẠ THỊ THU PHƯỢNG




            Ñaø Laït 2009
M CL C
Chương 1: T ng quan v H qu n tr cơ s d li u .....................................Trang 1
I.     Gi i thi u................................................................................................................1
II.    C u trúc và thành ph n c a h qu n tr cơ s d li u ............................................2
Chương 2: Xây d ng, qu n lý và khai thác cơ s d li u.........................................5
I.     Khái ni m cơ s d li u .........................................................................................5
II.    T o cơ s d li u. ...................................................................................................5
III. Ki u d li u. ...........................................................................................................6
IV. T o và qu n lý b ng. .............................................................................................7
V.     Các thao tác trên d li u.......................................................................................11
VI. Truy v n d li u ...................................................................................................12
VII. T o và s d ng khung nhìn (View)......................................................................14
VIII. T o và s d ng ch m c (Index)...........................................................................14
IX. Chuy n              i d li u v i các ng d ng khác..........................................................18
Chương 3: T-SQL nâng cao ......................................................................................19
I.     Khai báo và s d ng bi n .....................................................................................19
II.    C u trúc i u khi n...............................................................................................20
III. Th t c thư ng trú (Stored Procedures)...............................................................22
IV. Ki u d li u cursor ...............................................................................................26
V.     Hàm ngư i dùng (User Defined Functions).........................................................32
VI. Triggers và cài                t ràng bu c d li u ...................................................................35
Chương 4: B o m t và an toàn d li u .....................................................................40
I.     B o m t trong h qu n tr cơ s d li u ..............................................................40
II.    B n sao d li u .....................................................................................................46
III. Sao lưu và khôi ph c d li u ...............................................................................59
IV. Qu n lý giao d ch .................................................................................................61
Chương 5: L p trình cơ s d li u............................................................................92
I.     L p trình ADO.NET.............................................................................................92
II.    Thi t k ch c năng                 c/ ghi d li u .....................................................................95
III. T o báo bi u v i Crystal Report ..........................................................................98
Bài t p ........................................................................................................................105
Bài gi ng tóm t t H qu n tr cơ s d li u                                                 1

                                          Chương 1
           T NG QUAN V H QU N TR CƠ S                              D     LI U
I. Gi i thi u
   Thông tin là ngu n tài nguyên quý giá c a m t t ch c. Các ph n m m máy tính là
nh ng công c hi u qu         x lý thông tin và h qu n tr cơ s d li u là công c ph
bi n cho phép lưu tr và rút trích thông tin m t cách hi u qu .
   H qu n tr cơ s d li u quan h là h qu n tr cơ s d li u ph bi n nh t hi n nay
và ư c h tr b i nhi u nhà cung c p ph n m m. Tính hi u qu c a các ng d ng ph
thu c vào ch t lư ng c a vi c t ch c d li u. Nh ng c i ti n trong k thu t và x lý cơ
s d li u ưa n các cơ h i s d ng thông tin m t cách linh ho t và hi u qu khi d li u
 ư c t ch c và lưu tr trong các c u trúc quan h . H qu n tr cơ s d li u là m t thành
công trong lĩnh v c thương m i.
M c tiêu c a h qu n tr cơ s d li u.
    H qu n tr cơ s d li u ph i m b o các m c tiêu sau: d li u s n dùng (data
availability), tính toàn v n d li u (data integrity), an toàn d li u (data secutity), và c
l p d li u (data independency).
   o D li u s n dùng (data availability): d li u ư c t ch c sao cho m i ngư i dùng
     có th truy c p d dàng theo ch c năng và nhi m v c a h .
   o Tính toàn v n d li u (data integrity): d li u lưu tr trong cơ s d li u là úng
       n, áng tin c y.
   o An toàn d li u (data secutity): Ch nh ng ngư i dùng ư c phép m i có th truy
     c p d li u. N u nhi u ngư i dùng truy c p chung m t m c d li u cùng lúc thì h
     qu n tr cơ s d li u không cho phép h th c hi n nh ng thay i gây mâu thu n
     d li u.
   o      c l p d li u (data independency): h qu n tr cơ s d li u ph i cho phép t t c
       m i ngư i dùng ư c phép lưu tr , c p nh t và rút trích d li u hi u qu mà không
       c n n m chi ti t v c u trúc c a cơ s d li u ư c bi u di n và cài t.
Quá trình phát tri n c a h qu n tr cơ s d li u.
   Quá trình phát tri n c a DBMS như sau:
   − Flat files: 1960s – 1980s
   − Hierarchical: 1970s –1990s
   − Network : 1970s – 1990s
   − Relational: 1980s – n nay
   − Object-oriented: 1990s – n nay
Bài gi ng tóm t t H qu n tr cơ s d li u                                                       2
   − Object-relational: 1990s – n nay
   − Data warehousing: 1980s – n nay
   − Web-enabled: 1990s – n nay
II. C u trúc và thành ph n c a h qu n tr cơ s d li u.


                     Forms                Application            SQL Interface
                                          Front ends

                                        SQL Commands


                                                                           Query
                                 Parser                 Plan Executor      Execution
                                                                           Engine
                               Optimizer             Operator Evaluator
         Concurrency
         Control
                                        File and Access
             Transaction                    Methods
              Manager
                                                                        Recovery
                                       Buffer Manager
               Lock                                                     Manager
              Manager
                                      Disk Space Manager                               DBMS




                             Index                          System        DATABASE
                              Files          Data           catalog
                                             Files

                                      Hình 1.1 Ki n trúc c a DBMS
Ki n trúc c a h qu n tr cơ s d li u g m 2 thành ph n ch c năng:
   o B qu n lý lưu tr (Storage manager).
   o B X lý truy v n (Query Processor).
1. B qu n lý lưu tr
B qu n lý lưu tr có nhi m v lưu tr , rút trích và c p nh t d li u vào cơ s d li u. B
qu n lý lưu tr g m có các ơn v sau:
   − Ki m tra ch ng th c và toàn v n.
   − Qu n lý giao d ch .
   − Qu n lý file.
Bài gi ng tóm t t H qu n tr cơ s d li u                                             3
   − Qu n lý vùng      m.
Qu n lý giao d ch (Transaction management)
    Thông thư ng, m t s thao tác trên cơ s d li u t o thành m t ơn v logic công vi c.
Ta hãy xét ví d chuy n kho n, trong ó m t s ti n x ư c chuy n t tài kho n A
(A:=A-x) sang m t tài kho n B (B:=B+x). M t y u t c n thi t là c hai thao tác này ho c
cùng x y ra ho c không ho t ng nào x y ra c . Vi c chuy n kho n ph i x y ra trong
tính toàn th c a nó ho c không. Yêu c u toàn th -ho c-không này ư c g i là tính
nguyên t (atomicity). M t y u t c n thi t khác là s th c hi n vi c chuy n kho n b o
toàn tính nh t quán c a cơ s d li u: giá tr c a t ng A + B ph i ư c b o toàn. Yêu c u
v tính chính xác này ư c g i là tính nh t quán (consistency). Cu i cùng, sau khi th c
hi n thành công ho t ng chuy n kho n, các giá tr c a các tài kho n A và B ph i b n
v ng cho dù có th có s c h th ng. Yêu c u v tính b n v ng này ư c g i là tính lâu
b n (durability).
    M t giao d ch là m t t p các ho t ng th c hi n ch m t ch c năng logic trong m t
  ng d ng cơ s d li u. M i giao d ch là m t ơn v mang c tính nguyên t l n tính nh t
quán. Như v y, các giao d ch ph i không ư c vi ph m b t kỳ ràng bu c nh t quán nào:
N u cơ s d li u là nh t quán khi m t giao d ch kh i ng thì nó cũng ph i là nh t
quán khi giao d ch k t thúc thành công. Tuy nhiên, trong khi ang th c hi n giao d ch,
ph i cho phép s không nh t quán t m th i. S không nh t quán t m th i này tuy là c n
thi t nhưng l i có th d n n các khó khăn n u x y ra s c .
    Trách nhi m c a ngư i l p trình là xác   nh úng   n các giao d ch sao cho b o toàn
tính nh t quán c a cơ s d li u.
       m b o tính nguyên t và tính lâu b n là trách nhi m c a h cơ s d li u nói chung
và c a thành ph n qu n tr giao d ch (transaction-management component ) nói riêng.
N u không có s c , t t c giao d ch hoàn t t thành công và tính nguyên t ư c hoàn
thành d dàng. Tuy nhiên, do s hi n di n c a các s c , m t giao d ch có th không hoàn
t t thành công s th c hi n c a nó. N u tính nguyên t ư c m b o, m t giao d ch th t
b i không gây nh hư ng n tr ng thái c a cơ s d li u. Như v y, cơ s d li u ph i
 ư c hoàn l i tr ng thái c a nó trư c khi giao d ch b t u. H qu n tr cơ s d li u ph i
có trách nhi m phát hi n s c h th ng và tr l i cơ s d li u v tr ng thái trư c khi x y
ra s c .
   Khi m t s giao d ch tương tranh c p nh t cơ s d li u, tính nh t quán c a d li u có
th không ư c b o toàn, ngay c khi m i giao d ch là chính xác. B qu n tr i u khi n
tương tranh (concurency-control manager) có trách nhi m i u khi n các tương tác gi a
các giao d ch ng th i      m b o tính th ng nh t c a CSDL.
Bài gi ng tóm t t H qu n tr cơ s d li u                                                4
Thành ph n Ki m tra ch ng th c và toàn v n (Authorization and Integrity Manager)
Ki m tra ràng bu c toàn v n và quy n truy c p d li u c a ngư i dùng cơ s d li u.
Thành ph n qu n lý giao d ch (Transaction manager)
Thành ph n này m b o r ng cơ s d li u luôn tr ng thái nh t quán. Nó qu n lý vi c
th c thi các yêu c u thao tác d li u và m b o các truy c p d li u ng th i không d n
  n mâu thu n.
Thành ph n qu n lý file (File manager): qu n lý vi c c p phát không gian trên ĩa. Các
file ư c dùng ch a t p các d li u tương t nhau. H qu n lý file qu n lý các file c
l p, giúp    nh p và l y các m u tin. Thành ph n qu n lý file thi t l p và duy trì danh
sách các c u trúc và ch m c ư c nh nghĩa trong lư c         trong. Thành ph n qu n lý
file có th :
   o T o file.
   o Xóa file.
   o C p nh t m u tin trong file.
   o L y m t m u tin t m t file.
Thành ph n qu n lý vùng m (Buffer Manager): có trách nhi m chuy n d li u t             ĩa
lưu tr vào b nh chính theo yêu c u c a chương trình.
2. B x lý truy v n (Query Processor)
Th c hi n câu truy v n nh n ư c t ngư i dùng qua các giai o n phân tích (parser), t i
ưu hóa câu h i (query optimizer), l p k ho ch th c hi n (plan executor) và th c hi n tính
toán (operator evaluator).
Bài gi ng tóm t t H qu n tr cơ s d li u                                                    5

                                               Chương 2
              XÂY D NG, QU N LÝ VÀ KHAI THÁC CƠ S                                D    LI U

 I.         Khái ni m cơ s d li u
      •       m c logic, m t cơ s d li u (CSDL) g m:
            − Các b ng (tables) ch a d li u có c u trúc và các ràng bu c (constraint)     nh nghĩa
              trên các b ng.
            − Các khung nhìn (view).
            − Các th t c/ hàm.
            − Các vai trò (role) và ngư i dùng (user).
            − …
      •      m c lưu tr v t lý, m t database c a SQL Server ư c lưu tr b i 3 lo i t p tin:
            − T p tin d li u (data file) g m có:
                  1 t p tin d li u chính (primary data file), thư ng có ph n m r ng “mdf”: ch a
                  các d li u kh i u c a database.
                   0-n t p tin d li u th c p (secondary data file), thư ng có ph n m r ng
                  “ndf”: ch a các d li u không lưu tr h t trong t p tin d li u chính.
            − T p tin nh t ký giao tác (transaction log file) g m có 1-n t p tin nh t ký, thư ng có
              ph n m r ng “ldf”: ch a các thông tin v nh t ký giao tác, dùng               ph c h i
              database sau khi x y ra s c .
II.         T o cơ s d li u
      1. Cú pháp l nh t o CSDL
          Create Database database_name
              [ On [Primary]
                     { file_spec [,…n] }
              ]
              [ Log on
                     { file_spec [,…n] }
              ]

      v i

                 file_spec :: = ( Name = logical_file_name,
                            Filename = 'os_file_name '
Bài gi ng tóm t t H qu n tr cơ s d li u                                            6
                       [ , Size = size ]
                       [ , Maxsize = { max_size | Unlimited } ]
                       [ , Filegrowth = growth_increment ] )
       M c nh, các t p tin d li u và log ư c lưu trong thư m c MSSQL Data c a thư m c
       cài t SQL Server.
       Ví d
       • Ví d 1: t o CSDL QLSinhVien theo các quy nh m c nh c a SQL Server

             Create Database QLSinhVien
       • Ví d 2: t o CSDL QLSinhVien v i khai báo tên file logic, thư m c lưu t p tin d li u
         chính, kích thư c, …
             Create Database QLSinhVien
             On
             (      Name = QLSV_Data
                    Filename = ‘C: ... QLSV_Data.mdf ’,
                    Size = 1,
                    Filegrowth = 10% )
       • Ví d 3
             Create Database QLSinhVien
             On
             (      Name = QLSV_Data1,
                    Filename = ‘C: ... QLSV_Data.mdf ’,
                    Size = 1,
                    Maxsize = 10 MB,
                    Filegrowth = 1 MB ) ,
             (      Name = QLSV_Data2 ,
                    Filename = ‘C:...QLSV_Data1.ndf’ )
             Log on
             (      Name = QLSV_Log,
                    Filename = ‘D:...QLSV_Log.ldf’)
       2. Xoá m t CSDL ã t n t i

                Drop Database database_name
       3. Thay      i m t CSDL

             Alter Database database_name ….
          Dùng :
          – Thêm/xoá/thay i các t p tin.
          – Thay i các tùy ch n cho CSDL.
III.      Ki u d li u
              SQL Server cung c p các ki u d li u:
       1. S
          – S nguyên: bit, tinyint, smallint, int, bigint.
Bài gi ng tóm t t H qu n tr cơ s d li u                                              7
    – S th c
        Floating point:
          o float(n)
          o real = float(24)
        Fixed point
          o Decimal(p,s)
          o Numeric(p,s)
 2. Chu i
         char(n): chu i có      dài c    nh.
          nchar(n): chu i (theo mã Unicode) có            dài c   nh.
         varchar(n): chu i có      dài thay       i.
         nvarchar(n): chu i (theo mã Unicode) có            dài thay    i.
         text: ki u d li u cho phép ch a chu i có kích thư c hơn 8KB.
         ntext: ki u d li u cho phép ch a chu i (theo mã Unicode) có kích thư c hơn
         8KB.
 3. Ngày gi
         Datetime.
         Smalldatetime

 4. Ki u ngư i dùng t        nh nghĩa
   a.    nh nghĩa m t ki u d li u:
                 sp_addtype type_name, system_type [, ‘null_type’][, ‘owner’]
        Ví d :    nh nghĩa ki u d li u Code là ki u chu i g m 10 ký t cho phép   tr ng
                 Exec sp_addtype Code, char(10), ‘NULL’
  b. Xóa m t ki u d li u ngư i dùng           nh nghĩa:

                 sp_droptype ‘type_name’
IV. T o và qu n lý b ng
 1. T o b ng
    – Xác     nh các c t (các thu c tính) c a b ng.
    – Xác     nh khóa chính.
    – Xác     nh các thu c tính null/ not null.
    – Xác     nh thu c tính identity (n u có) (ph i là ki u s nguyên).
   Lưu ý:
    – Luôn t o khóa chính cho m t b ng.
    – Ràng bu c khóa ngo i nên ư c t o sau khi ã t o xong t t c các b ng liên quan.
    a. Cú pháp l nh t o b ng
Bài gi ng tóm t t H qu n tr cơ s d li u                                          8
      Create table Table_name
      (
             { Column_name          Data_type [null | not null]
                                    [default default_value ]
                                    [identity [( seed, increment)] ]
                } [,…n]
          [, constraint constraint_name primary key ( Column_name [,…n] ) ]
      )

Ví d : T o b ng h c sinh có khóa chính là (STT, Lop)
       Create table HOCSINH
       (     STT          tinyint not null,
             Lop          char(5) not null default ‘11A1’ ,
             HoTen        nvarchar(30) not null,
             NgaySinh     datetime not null,
             DiaChi       nvarchar(100),
             constraint   pk_HS primary key (STT, Lop)
       )
   b. Thay      i c u trúc b ng / xóa b ng
      Thay      i c u trúc b ng là th c hi n:
      –     Thêm/ xoá/ c p nh t ki u d li u c a m t c t (column).
      –     Thêm/ xoá/ ki m tra/ không ki m tra ràng bu c (constraint).
      –     Cho phép/ không cho phép trigger ho t      ng.
      Cú pháp: Alter table <tên_b ng>
                      …
      Xóa b ng: xoá d li u và c u trúc c a b ng
      Cú pháp: Drop table <tên_b ng>

Ví d
   − Thêm thu c tính DanToc vào b ng HOCSINH:

      Alter table HOCSINH

               Add DanToc nvarchar(20) null default ‘Kinh’
   − S a ki u d li u c a thu c tính NgaySinh thành ki u SmallDatetime:

      Alter table HOCSINH
               Alter column NgaySinh SmallDatetime not null
2. Qu n lý b ng
   − Các tên b ng, tên ràng bu c không ư c trùng nhau trong cùng m t database.
Bài gi ng tóm t t H qu n tr cơ s d li u                                                    9
   − Tên các c t trong cùng m t b ng không ư c trùng nhau.
   − Thông tin v các b ng, các ràng bu c ư c lưu trong b ng h th ng sysobjects
      Ví d :     c thông tin v các b ng trong database hi n hành:
               Select * from sysobjects where type = ‘U’
   − M t s th t c SQL Server cung c p             qu n lý b ng và c u trúc b ng:
      o sp_databases
      o sp_tables [‘table_name’] [, ‘owner’][,‘database_name’][, “ ‘type’ ”]
          Ví d : Exec sp_tables null, null, null, “ ‘TABLE’ ”
      o sp_help [object_name]
               sp_help cho bi t các thông tin v     i tư ng b t kỳ trong database (   i tư ng
               có ch a trong sysobjects).
               Ví d : Exec sp_help HOCSINH
      o sp_columns object [, owner] [, database] [,column]
      o sp_helpconstraint ‘table_name’
      o …
3. Cài    t ràng bu c toàn v n ơn gi n
  SQL Server cung c p s n cơ ch         ki m tra các lo i ràng bu c toàn v n (RBTV) sau:
      o Khóa chính (primary key constraint).
      o Khóa ngo i (foreign key constraint).
      o Giá tr duy nh t (unique constraint).
      o Check constraint (Ki m tra ràng bu c mi n giá tr ).
  Có th khai báo ràng bu c trong lúc t o b ng ho c khi b ng ã t n t i. Thông thư ng
  nên khai báo ràng bu c toàn v n trư c khi nh p d li u.
   a. Khai báo ràng bu c trong lúc t o b ng
      Cú pháp:

      Create table Table_name
      ( …
              [, constraint Constraint_name
                            { primary key (Column_name [,…n])
                             | unique ( Column_name [,…n])
                               | check ( logical_expression ) }
              ] […n]
      )

      Ví d
Bài gi ng tóm t t H qu n tr cơ s d li u                                            10
      Create table SinhVien
      (
             MaSV           char(10) not null,
             HoTen          nvarchar(30) not null,
             Nam            tinyint,
             CMND           char(10),
             Khoa            char(5),
             constraint pk_SV primary key (MaSV),
             constraint u_CMND unique (CMND),
             constraint chk_Nam check (Nam > 0 and Nam <= 4)
      )
   b. Khai báo ràng bu c trên b ng ã t n t i
   Cú pháp:
      Alter table table_name
              [with check| with nocheck] Add
                     { constraint constraint_name
                            { primary key ( column_name [,…n] )
                              | unique ( column_name [,…n] )
                              | check ( logical_expression )
                              | foreign key ( column_name [,…n] )
                                   references ref_table ( ref_column [,…n] )
                                            [ on delete {cascade| no action} ]
                                            [ on update {cascade| no action} ]
                     } [,…n]
      Ví d

      /* gi s ã t n t i b ng KHOA( MaKhoa, …) */
      Alter table SINHVIEN
             with check add
               constraint u_CMND unique (CMND),
               constraint chk_Nam check (Nam in (1, 2, 3, 4) ),
               constraint fk_SV_maKhoa foreign key (Khoa),
                    references KHOA(MaKhoa)
   c. Ki m tra / không ki m tra ràng bu c
      Cú pháp:
               Alter table Table_name
                     {Check| Nocheck} constraint { All | constraint_name [,…n] }
      Ví d :
               alter table SINHVIEN
                  nocheck constraint u_CMND, chk_Nam
   d. Xoá ràng bu c
      Cú pháp:
Bài gi ng tóm t t H qu n tr cơ s d li u                                              11
                  Alter table table_name
                        Drop { [constraint ] constraint_name } [,…n]
         Ví d :
                  Alter table SINHVIEN
                        drop constraint u_CMND, chk_Nam
     e. Rule
     − Rule là m t qui nh chung ư c t o ra trong m t CSDL.
     − M t rule có th ư c áp d ng cho nhi u thu c tính c a nhi u b ng khác nhau, ho c
        cho các ki u d li u ngư i dùng nh nghĩa trong database.
    T o rule
        Cú pháp:
               Create rule rule_name
               as logical_expression
 (trong ó “logical_expression” ph i ch a m t bi n. Bi n này tương ng v i i tư ng s
   ư c áp d ng rule).
        Ví d :
        create rule r_SoDuong
        as @value >0

 K t bu c/ g k t bu c rule
   K t bu c rule: dùng th t c:
                        sp_bindrule ‘rule_name’, ‘object’, [ ‘futureonly’ ]
         trong ó:
            Tùy ch n futureonly ch dùng khi k t bu c rule v i ki u d li u ngư i dùng
              nh nghĩa, có nghĩa các c t thu c ki u d li u này trư c ó không b nh
            hư ng b i rule.
         Ví d :         sp_bindrule ‘r_SoDuong’, ‘SinhVien.Nam’
            Rule m i k t bu c s ng m g rule cũ trên         i tư ng.
     G k t bu c
                                 sp_unbindrule ‘object’, [ ‘futureonly’ ]

            Ví d : sp_unbindrule ‘SinhVien.Nam’
 Xoá rule
       Cú pháp: Drop rule {rule_name} [,…n]

         Lưu ý: Ch xóa ư c rule khi nó không còn k t bu c v i          i tư ng nào.

V.   Các thao tác trên d li u
     Chú ý khi thêm/ xóa/ c p nh t d li u:
Bài gi ng tóm t t H qu n tr cơ s d li u                                             12
      – D li u nh p ph i phù h p v i ki u d li u.
      –    m b o các ràng bu c toàn v n.
      –    nh d ng giá tr ki u chu i unicode, ki u datetime.
      – Nh p giá tr r ng (Null).
1. Các d ng l nh insert
   − Thêm t ng dòng d li u vào b ng
            Insert [into] Table_name[ (column_name[,…n] )]
                   values ( value [,…n] )
      − Thêm 0-n dòng d li u t b ng khác/ t k t qu c a m t câu truy v n
              Insert [into] Table_name
                      Select_statement
        Lưu ý: trong câu select, ta có th    c d li u t các b ng trong database khác.
        Khi ó, tên b ng ư c vi t y        như sau:

                               Database_name.Owner.Table_name
          Ví d :         select * from QLSinhVien.dbo.SinhVien
      2. L nh c p nh t d li u
           update table_name
           set column_name_1= value1,…, column_name_m= value_m
           [where conditional_expression]
      3. L nh xoá d li u
           delete [from] table_name
            [where conditional_expression]
VI.       Truy v n d li u
1. Câu truy v n t ng quát
      Cú pháp t ng quát c a câu truy v n d li u:
                   SELECT [tính ch t] <danh sách các thu c tính_1>
                   FROM <danh sách các table ho c query/view [as alias] >
                   [WHERE < i u ki n_1>]
                   [GROUP BY <danh sách các thu c tính_2>]
                   [HAVING < i u ki n_2>]
                   [ORDER BY <danh sách các thu c tính_3> [ASC | DESC]]
          trong ó:
          − Tính ch t là m t trong các t khóa: ALL (ch n ra t t c các dòng trong b ng),
            DISTINCT (lo i b các dòng trùng l p thông tin), TOP <n> (ch n n dòng u
             tiên th a mãn i u ki n).
Bài gi ng tóm t t H qu n tr cơ s d li u                                                  13
      − Danh sách các thu c tính_1: tên các thu c tính cho bi t thông tin c n l y.
     Chú ý:
              Các thu c tính cách nhau b i d u ‘,’.
              N u l y t t c các thu c tính c a 1 b ng R thì dùng: R.*
              N u sau FROM ch có 1 b ng và l y t t c các c t c a b ng ó thì dùng
              select *.
              N u t n t i 1 thu c tính sau select xu t hi n   2 b ng sau FROM thì ph i
              ch   nh rõ thu c tính ó thu c b ng nào.
      − Danh sách các table/query/view: các b ng, câu truy v n, ho c khung nhìn ch a
          thông tin c n l y. Khi tìm ki m thông tin trên nhi u hơn 2 b ng/truy v n thì
          ph i k t các b ng l i v i nhau (có th  t i u ki n k t t sau where ho c t
          trong m nh     From… join/ left join/ right join/full join … on …).
      − Alias: bí danh (tên t t) c a b ng dùng cho các b ng có tên quá dài, ho c m t
          b ng ư c dùng nhi u l n trong m nh         from c a câu truy v n.
      −     i u ki n_1: là i u ki n    l c d li u (ch n các b tho       i u ki n).
      − danh sách các thu c tính_2: d li u s          ư c gom nhóm theo các c t này,
        ưu tiên tính t trái sang.
      −     i u ki n_2: i u ki n l c các nhóm theo m t tiêu chí     i di n cho c nhóm.
      − danh sách các thu c tính_3:s p x p d li u theo c t nào, th t là tăng (ASC)
          ho c gi m (DESC). M c        nh là d li u ư c s p theo th t tăng d n. Vi c
          s p x p ư c th c hi n theo th t ưu tiên t trái qua ph i.
   Lưu ý:
            N u câu truy v n không có m nh         Group By thì cũng không có m nh
            Having.
            N u câu truy v n có ch a m nh       Group By thì Danh sách các thu c tính_1
            ch ch a các thu c tính ho c bi u th c liên quan n các thu c tính trong
            danh sách các thu c tính_2 và các hàm g p (max, min, avg, sum, count).
2. Các hàm thư ng dùng
   − Các hàm g p (Aggregate functions): max, min, sum, avg, count
   − Các hàm th i gian.
   − Các hàm toán h c.
   − Các hàm x lý chu i.
   − ….
   (Sinh viên có th tra c u theo t khóa trong Books Online).
Bài gi ng tóm t t H qu n tr cơ s d li u                                             14
VII.       T o và s d ng khung nhìn (View)
  1. Khái ni m khung nhìn:
           Khung nhìn (View) là m t b ng o, có c u trúc như m t b ng, khung nhìn không
        lưu tr d li u mà d li u c a nó ư c t o ra khi s d ng, khung nhìn là i tư ng
        thu c CSDL. Khung nhìn ư c t o ra t câu l nh truy v n d li u (l nh Select), truy
        v n t m t ho c nhi u b ng d li u.
  2. S d ng khung nhìn
        o Khung nhìn ư c s d ng khai thác d li u như m t b ng d li u, có th      ư c chia
          s b i nhi u ngư i dùng, an toàn trong khai thác.
        o Có th th c hi n truy v n d li u trên c u trúc c a khung nhìn.
        o Các khung nhìn ư c t o t nhi u b ng ho c trong khung nhìn có ch a t khóa
          DISTINCT, hàm g p, m nh        group by u không cho phép c p nh t d li u t
          khung nhìn vào các b ng g c trong cơ s d li u.
              Cú pháp t o khung nhìn:
              Create View view_name
              As Select_statement
VIII.      T o và s d ng ch m c (Index)
     Ch m c (Index) là m t ph n quan tr ng i v i CSDL, c bi t là cơ s d li u l n.
  Ch m c ư c thi t l p t m t ho c nhi u c t d li u c a b ng d li u. Các giá tr c a Ch
  m c s ư c s p x p và lưu tr theo m t danh sách (b ng khác). M i giá tr ch m c là
  duy nh t trong danh sách và nó s liên k t n giá tr trong b ng d li u (liên k t d ng con
  tr ). Vi c lưu tr d li u c a b ng có khóa ch m c ư c th c hi n theo c u trúc B-Cây
  nh m tăng t c truy xu t d li u i v i       ĩa (thi t b th c p).
     Khi tìm ki m m t giá tr trong c t d li u, mà c t này tham gia t o Ch m c, u tiên
  câu l nh xác nh v trí c a giá tr n m trong Ch m c b ng phép duy t cây, sau ó th c
  hi n tìm theo liên k t n b n ghi ch a giá tr tương ng v i khóa trong b ng.
  1. L a ch n ch m c
  • Không có ch m c, h qu n tr CSDL th c hi n truy v n b ng cách duy t qua t ng
        dòng trong b ng.
  • Cài       t các ch m c cho b ng giúp truy v n thông tin nhanh hơn (tìm ki m trên
        B-Cây).
  • Khóa chính và các ràng bu c unique hi n nhiên là các ch m c c a b ng.
  • Cơ s        ch n cài    t ch m c: d a vào các nhu c u truy v n th c hi n thư ng xuyên
        trên CSDL.
Bài gi ng tóm t t H qu n tr cơ s d li u                                            15
• Nên cài     t ch m c cho các trư ng h p sau:
   – Trư ng h p 1: Có nhu c u truy v n thư ng xuyên các b c a b ng Q theo m t s
     (t p) thu c tính nào ó.
      Ví d : GiaoDich(MãGD, …,NgàyGD): Có nhu c u truy xu t thư ng xuyên các b
      c a giao d ch trong m t ngày ho c trong m t kho ng th i gian nh t nh: cài t
      ch m c trên thu c tính NgayGD c a quan h GiaoDich.
   – Trư ng h p 2: t p thu c tính tham gia vào phép k t c a m t câu truy v n x y ra
     thư ng xuyên.
      Ví d : cho 2 lư c    quan h :
                                HocSinh(STT, Lop, HoTen,…)
                                KetQua(STT, Lop, Mon, Diem)
        Thư ng xuyên có nhu c u truy v n: cho bi t k t qu h c t p c a m t h c sinh.
        Câu l nh truy v n như sau:
             select hs.STT, hs.Lop, hs.HoTen, kq.Mon, kq.Diem
             from HocSinh hs join KetQua kq on hs.STT = kq.STT
                   and hs.Lop = kq.Lop
            Cài    t ch m c (STT, Lop) cho quan h KetQua
        T ng quát: trên mô hình quan h , xác      nh các con ư ng truy xu t thư ng
        xuyên:




           T m t b c a Q1(m t giá tr c th a c a A) có nhu c u truy xu t thư ng
        xuyên các b c a Q2 tương ng (tìm ki m các b c a Q2 v i A = a): khai báo ch
        m c (A) cho Q2.

   Lưu ý: m t ch m c (AB) khác v i hai ch m c (A) và (B).
2. Các lo i ch m c
  Có hai lo i ch m c:
   – Clustered index
   – Nonclustered index
Clustered index:
• D li u th t s    ư c s p x p v t lý theo ch m c (th t s n m   nút lá c a cây).
• M i b ng ch có th có m t clustered ch m c, thư ng là khóa chính.
Bài gi ng tóm t t H qu n tr cơ s d li u                                           16
Nonclustered index:
• Ch m c logic, d li u th t s không ư c s p x p v t lý theo ch m c.
• Nút lá là con tr tr   n v trí c a b d li u, ho c tr   n giá tr c a clustered ch m c
  (trong trư ng h p b ng có clustered index).




   – Không có clustered index:




   – Có clustered index
Bài gi ng tóm t t H qu n tr cơ s d li u                                            17




• M t s cân nh c khi ch n ch m c:
   – S d ng nhi u ch m c tăng t c      truy v n, nhưng làm gi m hi u qu c a các thao
     tác thêm/xoá/c p nh t d li u.
   – Không nên t o ch m c trên các b ng quá nh (vài trăm dòng).
   – Ch nên ch n ch m c mà m i giá tr c a nó tương ng v i m t s ít b . N u m i
     giá tr ch m c ng v i trên 20% s lư ng b trong b ng, th c hi n truy v n bình
     thư ng b ng cách duy t qua các dòng trong b ng s hi u qu hơn.
   – Các giá tr ch m c ph i phân b     u các b trong b ng.
   – C g ng dùng các ch m c v i s thu c tính ít (chi m ít không gian và c n ít chi phí
     duy trì hơn ch m c v i s thu c tính l n).
   – Clustered index ph i nh (s thu c tính ít, kích thư c nh ), vì các ch m c
     nonclustered u ph i g n k t t i nó.
3. Cài    t ch m c v i SQL Server
   M t s qui    nh:
   1. M t b ng có t i a 249 nonclustered ch m c (bao g m c nh ng ch m c ng m
       nh khi khai báo khóa chính và ch m c).
   2. Kích thư c t i a c a m t ch m c (t ng kích thư c các thu c tính tham gia vào
      ch m c) không quá 900 bytes.
   3. M c nh: ch m c clustered ư c khai báo ng m nh cùng v i khai báo khóa
      chính, các trư ng h p khác là nonclustered (t t nhiên có th ch nh khác i).

   Cú pháp khai báo ch m c:
      Create [ Unique ][ Cluster| Nonclustered] Ch m c ch m c_name
Bài gi ng tóm t t H qu n tr cơ s d li u                         18
      On {table | view } (column [ Asc | Desc] [ ,...n ])
   Ví d :
      Create nonclustered ch m c idx_STTHS_Lop
      On KETQUA (STTHS, Lop)
  Cú pháp xóa ch m c:
      Drop Ch m c table_name (ch m c_name)
   Ví d :
      Drop Ch m c KETQUA(idx_STTHS_Lop)


IX.   Chuy n      i d li u v i các ng d ng khác
   (xem các tài li u hư ng d n th c hành SQL Server kèm theo)
Bài gi ng tóm t t H qu n tr cơ s d li u                                              19

                                      Chương 3
                                T-SQL NÂNG CAO
I. Khai báo và s d ng bi n
1. Bi n c c b
   − Là m t i tư ng có th ch a giá tr thu c m t ki u d li u nh t nh, tên bi n b t
         u b ng m t ký t @.
   – Bi n c c b có giá tr trong m t query batch ho c trong m t th t c thư ng trú
      (stored procedure) ho c hàm (function).
   – Khai báo bi n c c b b ng l nh declare: cung c p tên bi n và ki u d li u:

                            Declare tên_bi n Ki u_d _li u
        Ví d :
           Declare @MaSinhVien char(10)
           Declare @HoTen nvarchar(30)
           Declare @Sum float, @Count int
   –       gán giá tr cho m t bi n c c b dùng l nh set. Giá tr gán cho bi n ph i phù h p
       v i ki u d li u c a bi n.
            Set tên_bi n = giá_tr
            Set tên_bi n = tên_bi n
            Set tên_bi n = bi u_th c
            Set tên_bi n = k t_qu _truy_v n
        Ví d :
           Set @MaLop = ‘TH2001’
           Set @SoSV = (select count (*) from SinhVien)
           Set @MaLop = ‘TH’+Year(@NgayTuyenSinh)
         ưa k t qu truy v n vào bi n:
            SV(MaSV: int; HoTen: nvarchar(30), Tuoi int)
            Select @Var1 = HoTen, @Var1 = Tuoi from SV
              where MaSV = 1
Lưu ý: n u câu truy v n tr v nhi u dòng, các bi n ch nh n giá tr tương      ng c a dòng
  u tiên.
2. Bi n toàn c c
   – Là các bi n h th ng do SQL Server cung c p, tên bi n b t      u b ng 2 ký t @
   – SQL t c p nh t giá tr cho các bi n này, ngư i s d ng không th gán giá tr tr c
     ti p.
   − M t s bi n h th ng thu ng dùng
        o @@error: thông báo mã l i, n u @@error = 0: thao tác th c hi n thành công.
Bài gi ng tóm t t H qu n tr cơ s d li u                                                 20
      o @@rowcount: cho bi t s dòng b            nh hư ng b i l nh cu i (insert, update,
        delete).
      o @@trancount: cho bi t s giao d ch ang ho t          ng trên k t n i hi n t i.
      o @fetch_status: cho bi t thao tác l y d li u t cursor có thành công không.
II. C u trúc i u khi n
1. L nh If…else
   − Ch c năng: xét i u ki n      quy t     nh nh ng l nh T-SQL nào s     ư c th c hi n
   − Cú pháp:

             If bi u_th c_ i u ki n

                    L nh| Kh i_l nh

             [Else L nh| Kh i_l nh]

      Kh i l nh là m t ho c nhi u l nh n m trong c p t khóa begin…end
   Ví d : xét 2 lư c quan h (L QH)
                                HocPhan(MaHP, TenHP, SiSo)
                                   DangKy(MaSV, MaHP)
      Vi t l nh thêm m t ăng ký m i cho sinh viên có mã s 001 vào h c ph n HP01
      (gi s h c ph n này ã t n t i trong b ng HocPhan). L i gi i như sau:
          Declare @SiSo int
          select @SiSo = SiSo from HocPhan where MaHP= ‘HP01’
          if @SiSo < 50
          Begin
             insert into DANG_KY(MaSV, MaHP)
                    values(‘001’, ’HP01’)
             print N’ ăng ký thành công’
          End
          Else
             print N’H c ph n ã       SV’

2. L nh While
   − Ch c năng: th c hi n l p l i m t o n l nh T-SQL khi i u ki n còn úng.
   − Cú pháp:
Bài gi ng tóm t t H qu n tr cơ s d li u                                          21
                                While bi u_th c_ i u_ki n
                                       L nh| Kh i l nh
   – Có th s d ng Break và Continue trong kh i l nh c a while
          Break: thoát kh i vòng while hi n hành.
          Continue : tr l i     u vòng while, b qua các l nh sau ó.
   Ví d : xét lư c    quan h SinhVien(MaSV: int, HoTen: nvarchar(30))
       Vi t l nh xác nh m t mã sinh viên m i theo qui nh: mã sinh viên tăng d n, n u
       có ch tr ng thì mã m i xác nh s chèn vào ch tr ng ó. Ch ng h n, n u trong
       b ng sinhvien ã có các mã sinh viên 1, 2, 3, 7 mã sinh viên m i là 4.
      Gi i:
          Declare @STT int
          Set @STT = 1
          While exists(select * from SV where MaSV = @STT)
                              set @STT = @STT+1
          Insert into SV(MaSV, HoTen) values(@STT, ‘Nguyen Van A’)
3. L nh Case
   − Ch c năng: ki m tra m t dãy các i u ki n và tr v k t qu phù h p v i i u ki n
      úng. L nh case ư c s d ng như m t hàm trong câu select.
   − Cú pháp: Có hai d ng:
          D ng 1 (simple case):
                     Case Bi u_th c_         u_vào
                                    When Giá_tr then k t_qu
                                    [...n]
                                    [ Else k t_qu _khác]
                     End

          D ng 2 (searched case):
                    Case
                                    When bi u_th c_ i u ki n then k t_qu
                                    [...n]
                                    [ Else k t_qu _khác]
                     End

   Ví d : xét L QH NHAN_VIEN(MaNV, HoTen, NgaySinh, CapBac,Phai)
Bài gi ng tóm t t H qu n tr cơ s d li u                                             22
   Cho bi t nh ng nhân viên     n tu i ngh hưu bi t r ng tu i v hưu c a nam là 60, c a
   n là 55).
       Gi i:
               select * from NHAN_VIEN
                           where datediff(yy, NgaySinh, getdate()) > =
                                 Case Phai
                                          when ‘Nam’ then 60
                                          when ‘Nu’ then 55
                                 End

   Cho bi t mã NV, h tên và lo i nhân viên (c p b c <=3:bình thư ng, c p b c = null:
   chưa x p lo i, còn l i: c p cao).
   Gi i:
               Select MaNV, HoTen, ‘Loai’ = Case
                           when CapBac<=3 then ‘Binh Thuong’
                           when CapBac is null then ‘Chua xep loai’
                           else ‘Cap Cao’ End
               From NhanVien
III.   Th t c thư ng trú (Stored Procedures)
1. Khái ni m
    Th t c thư ng trú (Stored Procedures - SP) ch a các l nh T_SQL. Tương t như m t
th t c trong các ngôn ng l p trình, SP trong SQL Server có th truy n tham s , có tính
tái s d ng. Các th t c này ư c d ch và lưu tr thành m t i tư ng trong CSDL.
Ý nghĩa:
   − Tính tái s d ng, tính uy n chuy n nh h th ng tham s .
   − Khi biên d ch SP, các l nh trong c a nó ư c t i ưu hóa nó sao cho th c thi hi u
     qu nh t. K t qu t i ưu hóa ư c lưu b n v ng. Khi g i th c thi th t c không c n
     biên d ch và t i ưu hóa l i   l i g i th t c ti t ki m th i gian và tài nguyên hơn
     kh i l nh tương ương thân th t c.
   − Trong ng d ng tri n khai theo môi trư ng client/server, client g i l i g i SP lên
     server thì chi m ư ng truy n ít hơn r t nhi u l n so v i vi c g i kh i l nh tương
       ương trong thân th t c    Gi m kh i lư ng thông tin trao i khi ng d ng g i
     yêu c u th c hi n công vi c v cho server do ó tránh ngh n ư ng truy n, gi m
     trì tr .
Bài gi ng tóm t t H qu n tr cơ s d li u                                           23
   −      óng gói ch các thao tác cho phép trên CSDL vào các SP và quy nh truy xu t
         d li u ph i thông qua SP. Ngoài ra còn có th phân quy n trên SP H tr t t
         hơn cho vi c m b o an toàn (security) cho CSDL.
   − SP giúp cho vi c k t xu t báo bi u b ng Crystal Report tr nên ơn gi n và hi u
     qu hơn r t nhi u so v i vi c k t xu t d li u tr c ti p t các b ng và khung nhìn.
2. Khai báo và s d ng th t c

Cú pháp khai báo:
         Create {proc | procedure} procedure_name
         {Parameter_name DataType [=default] [output] }[,…n]
         As
         { kh i l nh }
         Go
Lưu ý:
              Tên tham s    t theo qui t c như tên bi n c c b .
              Giá tr tr v c a SP dùng m t (hay m t s ) tham s output.
Ví d :
   − Xây d ng SP cho bi t danh sách sinh viên c a m t l p có mã cho trư c
              Create proc DS_Lop @MaLop varchar(10)
              As
                    Select SV.MaSV, SV.HoVaTen, SV.NgaySinh
                    From SinhVien SV where SV.Lop = @MaLop
              Go
   − Xây d ng SP tính toán giá tr cho ơn hàng có mã cho trư c v i quan h
     DonHang như sau:
             DonHang(Ma, SoLuong, DonGia, ThueSuat, ChietKhau, ThanhTien)
              Create proc TongTien @MaDH varchar(10)
              As
              Declare @ThanhTien float
              Declare @TienThue float
              Declare @TienChietKhau float
              Declare @DonGia float,@SoLuong int
              Set @SoLuong = (select SoLuong from DonHang where Ma = @MaDH)
Bài gi ng tóm t t H qu n tr cơ s d li u                                           24
            Set @DonGia = (select DonGia from DonHang where Ma = @MaDH)
            Set @TienThue = (select ThueSuat from DonHang where Ma = @MaDH)
            Set @TienChietKhau = (select ChietKhau from DonHang
                                   where Ma = @MaDH)
            Set @ThanhTien = @DonGia*@SoLuong
            Set @TienThue = @ThanhTien*@TienThue/100
            Set @ThanhTien = @ThanhTien + @TienThue
            Set @TienChietKhau = @ThanhTien*@TienChietKhau/100
            Set @ThanhTien = @ThanhTien - @TienChietKhau
            Update DonHang set ThanhTien = @ThanhTien where Ma = @MaDH
            Go
   − Vi t th t c thêm m t ăng ký c a sinh viên vào m t h c ph n (t ng quát ví d
     trong ph n If …else)
       Create procedure usp_ThemDangKy
            @MaSV char(5), @MaHP char(5),
            @SiSo int = 0 output
       As
       select @SiSo = SiSo from HocPhan where MaHP= @MaHP
       if @SiSo < 50
        Begin
                 insert into DANG_KY(MaSV, MaHP)
                        values(@MaSV, @MaHP)
                 set @SiSo = @SiSo+1
                 return 1
            End
        return 0
       Go
   -   Xây d ng SP tính i m trung bình và x p lo i cho sinh viên thu c l p cho trư c.
       Gi s có các quan h như sau:
            SinhVien (MaSV, HoTen, DTB, XepLoai, Lop)
            MonHoc (MaMH, TenMH)
            KetQua (MaMH, MaSV, LanThi, Diem)
       trong ó:
Bài gi ng tóm t t H qu n tr cơ s d li u                                               25
       − i m thi ch tính l n thi sau cùng.
       − X p lo i: Xu t s c [9, 10], Gi i [8, 8.9], Khá [7, 7.9], Trung bình [5.0, 6.9],
         Y u [0,4.9].
       − K t qu xu t d ng tham s output, không ghi xu ng CSDL.
Gi i
Create proc XepLoaiSV @MaSV varchar(10), @DTB float out put,
                           @XL nvarchar(20) out put
As
       Set @DTB = (Select avg(Diem) from KetQua Kq
                     Where MaSV = @MaSV
                           and not exists (select * from KetQua Kq1
                                          where Kq1.MaSV = @MaSV
                                                   and Kq1.MaMH=Kq.MaMH
                                                  and Kq1.LanThi > Kq.LanThi))
       If @DTB >= 9
               Set @XL = N’Xu t s c’
       Else if @DTB >= 8
               Set @XL = N’Gi i’
       Else if @DTB >= 7
               Set @XL = N’Khá’
       Else if @DTB >= 5
               Set @XL = N’Trung bình’
       Else
               Set @XL = N’Y u’
Go

Cú pháp g i th c hi n th t c:

    EXEC| EXECUTE

    { [ @return_status = ] procedure_name

            { [ @parameter _name = ] value [ OUTPUT ] } [ ,...n ]

Lưu ý:
   o Khi g i th c hi n SP, dùng t khóa Exec và c n truy n tham s v i ki u d li u
     phù h p và th t chính xác như khai báo trong nh nghĩa SP.
   o Có th truy n giá tr cho tham s      u vào (input) là m t h ng ho c m t bi n ã
     gán giá tr , không truy n ư c m t bi u th c.
   o       nh n ư c giá tr k t qu (thông qua tham s        u ra), c n truy n vào m t bi n
       và có t khóa output.
   Ví d :
       o G i th t c usp_ThemDangKy:
Bài gi ng tóm t t H qu n tr cơ s d li u                                              26
              Exec usp_ThemDangKy ‘001’, ’HP01’
       ho c
              Exec usp_ThemDangKy @MaHP = ‘HP01’, @MaSV = ‘001’

       o G i th t c usp_ThemDangKy có nh n k t qu          u ra:
            Declare @SiSo int
            Exec usp_ThemDangKy ‘001’,’HP01’, @SiSo output
            Print @SiSo
       o G i th t c usp_ThemDangKy có nh n k t qu    u ra và k t qu tr v t th
         t c:
              Declare @SiSo int, @KetQua int
              Exec @KetQua = usp_ThemDangKy ‘001’,’HP01’, @SiSo output
       o G i th c hi n th t c x p lo i sinh viên:
              Declare@MaSinhVien varchar(10)
              Declare@DiemTB varchar(10)
              Declare@XepLoai varchar(10)
              Set@MaSinhVien = ‘0712345’
              Exec XepLoaiSV @MaSinhVien,@DiemTB out put,@XepLoai out put
              Exec XepLoaiSV ‘0713478’, @DiemTB out put,@XepLoai out put

S a th t c
              Thay t khóa Create trong l nh t o th t c b ng t khóa Alter.
Xóa th t c
              Drop {procedure|proc} procedure_name
   Ví d :           Drop procedure usp_ThemDangKy
3. Stored procedure h th ng
   − Là nh ng th t c do SQL Server cung c p s n         th c hi n các công vi c: qu n lý
     CSDL, qu n lý ngư i dùng, c u hình CSDL,…
   − Các th t c này có tên b t      u b ng “sp_”     Khi xây d ng th t c, tránh    t tên
     th t c b t u v i “sp_”.
IV.    Ki u d li u cursor
1. Khái ni m Cursor
   -   Là m t c u trúc d li u ánh x       n m t t p các dòng d li u k t qu c a m t câu
       truy v n (select).
Bài gi ng tóm t t H qu n tr cơ s d li u                                                27
   -   Cho phép duy t tu n t qua t p các dòng d li u và    c giá tr t ng dòng.
   -   Th hi n c a cursor là 1 bi n, nhưng tên bi n này không b t    u b ng ’@’.
   -   V trí hi n hành c a cursor có th ư c dùng như i u ki n trong m nh        where
       c a l nh update ho c delete: cho phép c p nh t/xoá d li u (d li u th t s trong
       CSDL) tương ng v i v trí hi n hành c a cursor.
2. Khai báo và s d ng Cursor
   Khai báo Cursor
   Có th s d ng cú pháp chu n SQL 92 ho c cú pháp T_SQL m r ng.
   − Cú pháp SQL 92 chu n:
             Declare cursor_name [Insensitive] [Scroll] Cursor
             For select_statement
             [ For {Read only| Update [of column_name [,…n] ] }]
   − Cú pháp T_SQL m r ng
             Declare cursor_name Cursor
             [ Local | Global ]
             [ Forward_only| Scroll]
             [ Static| Dynamic]
             [ Read_only]
             For select_statement
             [ For Update [ of column_name [,…n] ] ]

Lưu ý: Tên cursor trong các cách khai báo không b t    u b ng ký t “@”.
   Ý nghĩa các tham s tùy ch n trong khai báo:
   o Insensitive/ static: n i dung c a cursor không thay   i trong su t th i gian t n t i,
     trong trư ng h p này cursor ch là read only.
   o Dynamic: trong th i gian t n t i, n i dung c a cursor có th thay       i n u d li u
     trong các b ng liên quan có thay i.
   o Local: cursor c c b , ch có th s d ng trong ph m vi m t kh i (query batch)
     ho c m t th t c/ hàm.
   o Global: cursor toàn c c, có th s d ng trong m t th t c/hàm hay m t query
     batch b t kỳ ho c n khi b h y m t cách tư ng minh.
   o Forward_only: cursor ch có th duy t m t chi u t        u    n cu i.
   o Scroll: có th duy t lên xu ng cursor tùy ý (duy t theo a chi u).
Bài gi ng tóm t t H qu n tr cơ s d li u                                                   28
   o Read only: ch có th      c t cursor, không th s d ng cursor             update d li u
     trong các b ng liên quan (ngư c l i v i “for update…” ).
  M c    nh khi khai báo cursor n u không ch ra các tùy ch n thì cursor có các tính ch t:
   -   Global
   -   Forward_only
   -   Read only hay “for update” tùy thu c vào câu truy v n
   -   Dynamic
Duy t cursor
  Dùng l nh Fetch       duy t tu n t qua cursor theo cú pháp:

                      Fetch

                      [ [Next| Prior| First| Last| Absolute n| Relative n]

                              From ] Tên_cursor

                      [Into Tên_bi n [,…n] ]
   −M c     nh: fetch next.
   −    i v i cursor d ng forward_only, ch có th fetch next.
   − Bi n h th ng @@fetch_status cho bi t l nh fetch v a th c hi n có thành công hay
     không, giá tr c a bi n này cơ s bi t ã duy t n cu i cursor hay chưa.

Quy trình s d ng Cursor
   − Khai báo cursor.
   − “M ” cursor b ng l nh Open
                Open tên_cursor
   − Khai báo các bi n t m        ch a ph n t hi n hành ( ang ư c x lý) c a cursor:
          Các bi n t m ph i cùng ki u d li u v i các trư ng tương ng c a ph n t
          trong cursor.
          Có n trư ng trong ph n t c a cursor thì ph i có         n bi n t m tương ng.
   − Fetch (next,…) cursor        chuy n    n v trí phù h p:
          Có th ưa các giá tr c a dòng hi n hành vào các bi n thông qua m nh             into
          c a l nh fetch.
          N u không có m nh      into, các giá tr c a dòng hi n hành s       ư c hi n th ra
          c a s k t qu (result pane) sau l nh fetch.
          Có th s d ng v trí hi n t i như là i u ki n cho m nh               where c a câu
          delete/ update (n u cursor không là read_only).
Bài gi ng tóm t t H qu n tr cơ s d li u                                                29
   − L p l i vi c duy t và s d ng cursor, có th s d ng bi n @@fetch_status bi t ã
     duy t qua h t cursor hay chưa. @@FETCH_STATUS = 0 : l y d li u thành công,
       @@FETCH_STATUS < 0 : không l y ư c d li u.

   −    óng cursor b ng l nh Close
                Close Tên_cursor
       Lưu ý: Sau khi óng, v n có th m l i n u cursor chưa b h y.
   − H y cursor b ng l nh deallocate

             Deallocate Tên_cursor
Ví d : xét hai L QH
                SINHVIEN (MaSV, HoTen, MaKhoa)
                KHOA(MaKhoa, TenKhoa)
        Duy t và     c giá tr t cursor

   C p nh t l i giá tr MaSV = Vi t t t tên Khoa + MaSV hi n t i cho t t c sinh viên:
        declare cur_DSKhoa cursor
        for select MaKhoa, TenKhoa from Khoa
        open cur_DSKhoa
        declare @MaKhoa int,
                 @TenKhoa varchar(30), @TenTat varchar(5)
        fetch next from cur_DSKhoa into @MaKhoa, @TenKhoa
        while @@fetch_status = 0
        begin
                -- xác    nh tên t t c a Khoa d a vào @TenKhoa…
                update SinhVien set MaSV = @TenTat+MaSV
                         Where MaKhoa = @MaKhoa
                fetch next from cur_DSKhoa into @MaKhoa, @TenKhoa
        end
        Close cur_DSKhoa
        Deallocate cur_DSKhoa

        Dùng cursor       xác   nh dòng c p nh t
Bài gi ng tóm t t H qu n tr cơ s d li u                                               30
      declare cur_DSKhoa cursor scroll
      for select MaKhoa, TenKhoa from Khoa
      open cur_DSKhoa
      fetch absolute 2 from cur_DSKhoa
      if (@@fetch_status = 0)
              update Khoa
                     set TenKhoa = ‘aaa’
                     where current of cur_DSKhoa
      Close cur_DSKhoa
      Deallocate cur_DSKhoa
3. Bi n cursor
      − Ta có th khai báo m t bi n ki u cursor và gán cho nó tham chi u n m t
         cursor ang t n t i.
      − Bi n cursor có th ư c xem như là con tr cursor.
      − Bi n cursor là m t bi n c c b .
      − Bi n cursor sau khi gán giá tr ư c s d ng như m t cursor thông thư ng.
   Ví d :
      Declare @cur_var cursor
      set @cur_var = my_cur      -- my_cur là m t cursor ang t n t i

      ho c:
      Declare @cur_var cursor
      set @cur_var = cursor for select_statement
K t h p cursor v i stored procedure
Xây d ng SP tính i m trung bình và x p lo i cho sinh viên thu c l p cho trư c. Gi s
có các quan h như sau:
      SinhVien (MaSV, HoTen, DTB, XepLoai, Lop)
      MonHoc (MaMH, TenMH)
      KetQua (MaMH, MaSV, LanThi, Diem)
   Bi t r ng
         i m thi ch tính l n thi sau cùng
      X p lo i: Xu t s c [9, 10], Gi i [8, 8.9], Khá [7, 7.9], Trung bình [5.0, 6.9], Y u
      [0, 4.9].
      K t qu ghi xu ng CSDL, ng th i xu t ra t ng s sinh viên x p lo i gi i c a l p
        ó.
• Phân tích ví d :
Bài gi ng tóm t t H qu n tr cơ s d li u                                              31
   o L p c n xét có nhi u sinh viên, t ng sinh viên c n ư c x lý thông qua 3 bư c:
           Tính i m trung bình cho sinh viên, i m trung bình ph i là i m c a l n thi
           sau cùng. Có th tái s d ng th t c XepLoaiSVLop.
           D a vào i m trung bình c a sinh viên     xác   nh x p lo i.
           C p nh t i m và x p lo i vào b ng sinh viên.
   o M i sinh viên      u l p l i 3 bư c trên.
T phân tích trên ta th y:
           C n x lý nhi u ph n t (các sinh viên).
           M i ph n t x lý tương i ph c t p (truy v n, tính toán, g i th t c khác,
            i u ki n r nhánh, c p nh t d li u, …).
           Cách x lý các ph n t là như nhau.
        ⇒ S d ng cursor là thích h p
           Cursor ch a các sinh viên c a l p c n xét, ch c n ch a mã sinh viên là ư c.
• Xây d ng th t c
   Create procedure XepLoaiSVLop
        @Lop nvarchar(10), @SoSVGioi int out
   As
        Declare @DTB float
        Declare @XepLoai nvarchar(20)
        Declare @MaSV nvarchar(10)
        Declare cur_SV cursor
        For (select MaSV from SinhVien where Lop=@Lop)
        Open cur_SV
        Fetch Next from cur_SV into @MaSV
        While @@FETCH_STATUS = 0
        Begin
                Exec XepLoaiSV @MaSV, @DTB output, @XepLoai output
                Update SinhVien set DTB = @DTB, XepLoai=@XepLoai
                Where MaSV = @MaSV
                Fetch Next from cur_SV into @MaSV
        End
        Close cur_SV
        Deallocate cur_SV
Bài gi ng tóm t t H qu n tr cơ s d li u                                      32
      Set @SoSVGioi = (select count(*) from sinhvien
                           where lop = @Lop and XepLoai = N’Gi i’)
      Go
V. Hàm ngư i dùng (User Defined Functions)
1. Khái ni m hàm ngư i dùng
   • Gi ng stored procedure:
      − mã l nh có th tái s d ng.
      − Ch p nh n các tham s input.
      − Biên d ch m t l n và t     ó có th g i khi c n.
   • Khác stored procedure:
      − Ch p nh n nhi u ki u giá tr tr v (ch m t giá tr tr v ).
      − Không ch p nh n tham s output.
      − Khác v cách g i th c hi n.
   • Có th xem hàm ngư i dùng thu c v 3 lo i tùy theo giá tr tr v c a nó:
      − Giá tr tr v là ki u d li u cơ s (int, varchar, float, datetime…).
      − Giá tr tr v là Table có ư c t m t câu truy v n.
      − Giá tr tr v là table mà d li u có ư c nh tích lũy d n sau m t chu i thao
        tác x lý và insert.
2. Khai báo và s d ng
   Khai báo hàm ngư i dùng
   Lo i 1: Giá tr tr v là ki u d li u cơ s
             Create function func_name
             ( {parameter_name DataType [= default ] } [,…n])
             returns DataType
             As
             Begin
             …
             Return {value | variable | expression}
             End
   Ví d :
Bài gi ng tóm t t H qu n tr cơ s d li u                                        33
             Create function SoLonNhat
             (@a int,@b int,@c int) return int
             As
             Begin
                     declare @max int
                     set @max = @a
                     if @b > max set @max = @b
                     if @c > max set @max = @c
                     return @max
             End
   Lo i 2: Giá tr tr v là m t b ng có ư c t m t câu truy v n
             Create function func_name
                     ( {parameter_name DataType [= default ] } [,…n])
                     returns Table
             As
             Return [ ( ]select_statement [ ) ]
             Go
      Ví d : Vi t hàm in danh sách các m t hàng c a m t mã ơn hàng cho trư c
                     Create function DanhSachMatHang
                     ( @MaDonHang varchar(10) ) returns Table
                     As
                     Return
                     (Select MH.TenHang,MH.DonGia
                     From ChiTietDH CT, MatHang MH
                     Where CT.MaDH = @MaDonHang
                     and CT.MaMH = MH.MaMH)
                     Go
   Lo i 3: Giá tr tr v là m t b ng mà d li u có ư c nh tích lũy d n sau m t chu i
           thao tác x lý và insert.
Bài gi ng tóm t t H qu n tr cơ s d li u                                          34
             Create function func_name
             ( {parameter_name DataType [= default ] } [,…n])
             returns TempTab_name Table(Table_definition)
             As
             Begin
             …
             Return
             End
             Go
Ví d :
             Create function DanhSachLop ()
             returns @DS Table(@MaLop varchar(10),@SoSV int)
             As
             --các x lý insert d li u vào b ng DS
             return
             Go
Lưu ý: Trong thân hàm không ư c s           d ng các hàm h th ng b t    nh (Built-in
  nondeterministic functions ), bao g m :
   − GETDATE
   − GETUTCDATE
   − NEWID
   − RAND
   − TEXTPTR
   − @@TOTAL_ERRORS, @@CPU_BUSY, @@TOTAL_READ,                           @@IDLE,
     @@TOTAL_WRITE, @@CONNECTIONS …
S d ng hàm ngư i dùng
   Các hàm ngư i dùng ư c s d ng trong câu truy v n, trong bi u th c… phù h p ki u
   d li u tr v c a nó.
   Ví d :
   − Select dbo.SoLonNhat(3,5,7)
   − Select * from DanhSachLop()
   Lưu ý:
   − N u dùng giá tr m c    nh c a tham s , ph i dùng t khóa default.
Bài gi ng tóm t t H qu n tr cơ s d li u                                                35
    − Khi g i hàm lo i 1 (tr v giá tr cơ b n), ph i có tên owner c a hàm i kèm (ví d
      dbo.SoLonNhat(5,8,-10)).
Thay    i hàm ngư i dùng
       Thay t khóa create trong các l nh t o hàm b ng t khóa alter
Xóa hàm ngư i dùng
                Drop function tên_hàm_c n _xóa
       Ví d :
                Drop function DanhSachMatHang
3. Các hàm h th ng
    Ngoài các hàm do ngư i dùng nh nghĩa, SQL Server còn cung c p các hàm xây
    d ng s n c a h th ng. Các hàm này cung c p ti n ích như x lý chu i, x lý th i
    gian, x lý s h c…
    Sinh viên tìm hi u thêm v các hàm này trong Books on-line và các tài li u tham kh o.

•      t o hàm h th ng c n ti n hành theo các bư c sau:
       T o hàm trong cơ s d li u Master
       Tên hàm b t      u b i fn_functionName
       Thay      i ch nhân c a hàm b ng th t c sp_changeobjectowner như sau:
       EXEC sp_changeobjectowner ‘fn_ functionName’ , ‘system_function_schema’
    Ví d : T o hàm h th ng th c chuy n       i m t bi n ki u ngày tháng sang ki u chu i.
       --T o hàm fn_doingay
              create function fn_doingay(@ngay datetime)
              returns char(10)
              as
              begin
                     return convert(nchar(10),@ngay,103)
              end
       --Thay i ch nhân c a hàm
                EXEC sp_changeobjectowner 'fn_doingay' , 'system_function_schema'
    Sau l nh này hàm fn_doingay có th dùng ư c cho CSDL b t kỳ.
                Select manv, hoten, fn_doingay(ngaysinh)
                From nhanvien
VI.    Triggers và cài       t ràng bu c d li u
1. Gi i thi u
    • Trigger là m t lo i stored procedure    c bi t có các   c i m sau:
Bài gi ng tóm t t H qu n tr cơ s d li u                                                     36
      − T          ng th c hi n khi có thao tác insert, delete ho c update trên d li u.
      − Thư ng dùng             ki m tra các ràng bu c toàn v n c a CSDL ho c các qui t c
        nghi p v .
      − M t trigger ư c nh nghĩa trên m t b ng, nhưng các x lý trong trigger có
        th s d ng nhi u b ng khác.
   • X lý c a trigger thư ng c n s d ng                n hai b ng t m:
      − Inserted: ch a các dòng v a m i ư c thao tác insert/ update thêm vào b ng.
      − Deleted: ch a các dòng v a m i b xóa kh i b ng b i thao tác update/delete.
      Lưu ý: update = delete dòng ch a giá tr cũ + insert dòng ch a giá tr m i
      − Inserted và deleted là các b ng trong b nh chính:
                      C c b cho m i trigger.
                      Có c u trúc gi ng như b ng (table) mà trigger      nh nghĩa trên ó
                      Ch t n t i trong th i gian trigger ang x lý.
      − N u thao tác insert/ delete/ update th c hi n trên nhi u dòng, trigger cũng ch
         ư c g i m t l n B ng inserted/ deleted có th ch a nhi u dòng.
2. S d ng Trigger
Khai báo trigger
   − Cú pháp:
                 Create trigger tên_trigger
                 On {tên_b ng|tên_view}
                 {For| After| Instead of } { [delete] [,] [insert] [,] [update] }
                 As
                                  { các l nh T-sql }
           Go
      rong ó:
  For | After:
   − Trigger ư c g i th c hi n sau khi thao tác delete/ insert/ update tương ng ã ư c
     th c hi n thành công:
          Các dòng m i ư c thêm ch a              ng th i trong b ng d li u và b ng inserted.
          Các dòng b xoá ch n m trong b ng deleted ( ã b xoá kh i b ng d li u).
   − Có th x lý quay lui thao tác ã th c hi n b ng l nh rollback transaction.
  Instead of:
   − Trigger ư c g i th c hi n thay cho thao tác delete/ insert/ update tương ng:
Bài gi ng tóm t t H qu n tr cơ s d li u                                                 37
          Các dòng m i ư c thêm ch ch a trong b ng inserted.
          Các dòng b ch nh xoá n m          ng th i trong b ng deleted và b ng d li u (d
          li u không b xoá).
   − Trigger Instead of thư ng ư c dùng       x lý c p nh t trên khung nhìn.
Lưu ý:
   − L nh t o trigger ph i là l nh    u tiên trong m t query batch.
   − Trên m t b ng có th nh nghĩa nhi u trigger for/after cho m i thao tác nhưng ch
     có th nh nghĩa m t trigger instead of cho m i thao tác.
   − Không th     nh nghĩa trigger instead of update/ delete trên b ng có cài        t khóa
     ngo i d ng update cascade/ delete cascade.
   − Trong thân trigger, có th s d ng hàm Update(tên_c t)             ki m tra xem vi c c p
     nh t ư c th c hi n trên c t nào.
                 Update(tên_c t) = true : có th c hi n c p nh t trên c t tên_c t

S d ng trigger cài    t m t s lo i ràng bu c
Ví d 1- Ràng bu c liên thu c tính – liên quan h
   Cho CSDL:

       DatHang(MaPDH, NgayDH,…)

       GiaoHang(MaPGH, MaPDH, NgayGH,…)

      Ràng bu c: Ngày giao hàng không th nh hơn ngày          t hàng tương     ng
   B ng t m nh hư ng:
                      Thêm           Xóa      S a
             DatHang     -             -      + (NgayDH)
             GiaoHang   +               -     + (NgayGH, MaPDH)

  C n cài     t trigger cho thao tác s a trên b ng DatHang, và thêm/s a trên b ng
Giaohang
  Trigger cho thao tác thêm và s a trên giao hàng:
  Create trigger tr_GH_ins_upd_NgayGH
  On GIAOHANG for insert, update
  As
  if update(MaPDH) or update (NgayGH)
         if exists(select * from inserted i, DatHang d
                     where i.MaPDH = d.MaPDH
Bài gi ng tóm t t H qu n tr cơ s d li u                                                    38
                             and i.NgayGH<d.NgayDH)
           begin
                   raiserror (N‘Ngày GH không th nh hơn ngày H’,0,1)
                   rollback tran
           end
go

Bài t p: Trigger cho thao tác s a trên    t hàng.

Ví d 2 – Ràng bu c toàn v n liên b
     Xét L QH:        KetQua(MASV, MAMH, LANTHI, DIEM)
     T o trigger ki m tra RBTV: “Sinh viên ch       ư c thi t i a 2 l n cho m t môn h c”
     • Xác    nh b ng t m nh hư ng:
                         Insert Delete       Update
                KetQua +        -            + (MASV, MAMH)
     • Cài t trigger d a trên b ng t m nh hư ng:
          -- Tao trigger ung voi thao tac insert tren bang KetQua
          Create trigger trg_KetQua_insert
          on KetQua
          for insert
          as
              declare @SoLanThi int
              select @SoLanThi=count(*)
              from KetQua K, inserted I
              where I.MaSV=K.MaSV and I.MaMH = K.MaMH
              if @SoLanThi > 2
              begin
                     raiserror('So lan thi phai <= 2', 0,1)
                     rollback transaction
              end

Bài t p: T o trigger ng v i thao tac Update trên b ng KetQua.
Ví d 3: Trigger cho vi c th c hi n m t thao tác c p nh t d li u nào ó.
Cho quan h
CHI_TIET_HOA_DON(MaHD,STT, MaMH, SoLuong, DonGia, ThanhTien).
Bài gi ng tóm t t H qu n tr cơ s d li u                                            39


   • Vi t trigger th c hi n c p nh t giá tr c a ThanhTien khi thêm m t chi ti t hóa ơn
Bài gi ng tóm t t H qu n tr cơ s d li u                                              40

                                     Chương 4
                      B O M T VÀ AN TOÀN D                     LI U
I. B o m t trong h qu n tr cơ s d li u
1. Khái ni m cơ b n v b o m t
    Nh m b o v h th ng CSDL không b xâm nh p, ngư i qu n tr cơ s d li u ph i
quy t nh cho phép hay không cho phép ngư i dùng truy c p và thao tác trên cơ s d
li u d a vào nhi m v c a ngư i dùng trên h CSDL. Ngư i qu n tr thư ng d a trên n n
t ng lý thuy t b o m t c a h cơ s d li u a ngư i dùng, nh m tìm ra phương pháp b o
m t theo úng v i nhu c u c a b o m t d li u.
   V i m c ích tăng tính b o m t d li u, SQL Server h tr các tính năng cho phép
ngư i qu n tr thi t l p cơ ch b o v cơ s d li u trong môi trư ng a ngư i dùng, bao
g m các y u t chính sau:
   o Vai trò c a ngư i dùng trong h th ng và cơ s d li u.
   o Quy n s d ng các ng d ng cơ s d li u trong SQL Server.
   o Quy n t o và s a     i c u trúc các   i tư ng CSDL.
   o Quy n truy c p, x lý d li u.
   Khi ăng nh p vào m t h th ng CSDL a ngư i dùng, ngư i s d ng c n ph i cung
c p UserID (tài kho n) và Password (m t kh u). D a trên UserID h th ng có kh năng
ki m soát t t c các hành vi c a ngư i s d ng trên CSDL SQL Server.
      th c hi n ư c ch c năng này, ngư i qu n tr CSDL c n ph i thi t l p các quy n
x lý và truy c p vào CSDL khi t o ra UserID, ngoài ra còn có m t s thu c tính khác c a
SQL Server như quy n backup d li u, trao i d li u v i các ng d ng CSDL khác, …
   Khi nói    n b o m t, ngư i qu n tr c n quan tâm        n các thông tin sau c a ngư i
dùng:
   o M t ngư i dùng ch có m t UserID và m t m t kh u.
   o Th i gian có hi u l c c a m t kh u.
   o Gi i h n chi u dài c a m t kh u.
   o Gi i h n ngư i s d ng theo license hay m r ng.
   o Thông tin v ngư i s d ng.
   Khi t o ngư i s d ng, tên tài kho n c n rõ ràng, d hi u d g i nh , và không cho
phép các ký t   c bi t, không nên có kho ng tr ng.
2. L a ch n b o m t
Bài gi ng tóm t t H qu n tr cơ s d li u                                           41
   Khi t o ra m t ngư i dùng (login user) trong SQL Server, có 3 cách   tăng tính b o
m t cho ngư i s d ng ó:
o Giao ti p v i h i u hành: s d ng UserID và Password c a h i u hành Windows
      ăng nh p SQL Server. V i lo i b o m t này, ngư i dùng truy c p vào m ng và có
  th s d ng CSDL SQL Server, ng th i m t ngư i dùng có UserID và Password có
  th s d ng tài nguyên trên m ng.
o B o m t chu n: v i lo i này, ngư i s d ng có UserID và Password tách r i v i h
   i u hành m ng, ng v i lo i b o m t này ngư i s d ng ch có hi u l c trong CSDL
  SQL Server, không th s d ng tài nguyên trên m ng.
o T ng h p c hai trư ng h p trên: m t s ngư i dùng s d ng quy n s d ng trên h
   i u hành và SQL Server, m t s khác ch s d ng quy n truy c p vào SQL Server.
Lưu ý: Tài kho n ngư i dùng có giá tr trên SQL Server hi n hành, khi sang m t SQL
Server khác ph i t o ra tài kho n ngư i dùng trên server ó.
o SQL Server cung c p các ch c năng hay các th t c t o m i và qu n tr ngư i dùng
  CSDL SQL Server như sau:
      S d ng th t c sp_addlogin.
      S d ng công c Enterprise Manager.
• S d ng th t c sp_addlogin
   Cú pháp

             sp_addlogin [ @loginame = ] 'login'
               [ , [ @passwd = ] 'password' ]
               [ , [ @defdb = ] 'database' ]
               [ , [ @deflanguage = ] 'language' ]
               [ , [ @sid = ] sid ]
               [ , [ @encryptopt = ] 'encryption_option' ]

trong ó các tham s có ý nghĩa như sau:

      @loginame: tên tài kho n s t o.
      @passwd: m t kh u cho ngư i dùng có tài kho n trên.
      @defdb: cơ s d li u m c       nh khi ngư i dùng ăng nh p vào SQL Server.
      @deflanguage: ngôn ng m c nhiên cho ngư i dùng SQL Server.
      @sid: s nh n d ng h th ng khi ngư i dùng ăng nh p vào.
      @encryptopt: khi t o tài kho n ngư i dùng trong CSDL, các thông tin v tài
      kho n, m t kh u ư c lưu tr trong b ng sysusers c a CSDL Master, n u b n cung
      c p tham s skip_enctription thì không mã hoá m t kh u trư c khi lưu vào b ng
      sysusers, n u không cung c p tham s hay     tr ng, SQL Server s mã hoá m t
      kh u trư c khi lưu tr .
Bài gi ng tóm t t H qu n tr cơ s d li u                                          42
Ví d : t o ngư i dùng có tên ‘nam’, m t kh u ‘123’, cơ s d li u m c   nh ‘QLKyNang’

                      Exec sp_addlogin ‘nam’, ‘123’, ‘QLKyNang’

   -   Thay    i m t kh u

              sp_password [[ @old = ] 'old_password' ,]
                { [ @new =] 'new_password' }
                [ , [ @loginame = ] 'login' ]

3. Quy n ngư i dùng và qu n tr quy n ngư i dùng
   Quy n c a ngư i dùng ư c nh nghĩa như m c          ngư i dùng có th hay không th
th c thi trên CSDL, quy n ư c chia thành 4 lo i như sau:
   o Quy n truy c p vào SQL Server.
   o Quy n truy xu t vào CSDL.
   o Quy n th c hi n trên các     i tư ng c a CSDL.
   o Quy n x lý d li u.
C p phát quy n truy c p vào CSDL
Cú pháp:
      Use db_name
      Go
      sp_grantdbaccess [@loginame =] 'login'
         [,[@name_in_db =] 'name_in_db' [OUTPUT]]
       Các tham s :
          @loginame: tài kho n c a ngư i s d ng ăng nh p vào SQL Server
          @name_in_db: t o bí danh (tên khác) c a tài kho n ngư i dùng khi truy c p
          vào CSDL db_name ư c ch nh, n u không ch rõ CSDL mu n cho phép
          ngư i dùng truy c p thì ngư i dùng ư c c p quy n trên CSDL hi n hành.
Lo i b quy n truy c p vào CSDL db_name c a ngư i dùng
       Use db_name
       Go
       sp_revokedbaccess [@loginame =] 'login'

C p phát quy n th c thi trên cơ s d li u
    Sau khi c p phát quy n cho ngư i dùng truy c p vào CSDL, k ti p cho phép ngư i
dùng ó có quy n truy c p và x lý các i tư ng trong CSDL cũng như x lý d li u
trên các i tư ng ó.
Các quy n truy c p trên các   i tư ng trong m t CSDL:
Bài gi ng tóm t t H qu n tr cơ s d li u                                             43


   Quy n                                     Di n gi i
SELECT          Cho phép ngư i s d ng nhìn th y d li u, n u ngư i s d ng có quy n
                này thì h ch có th th c thi nh ng phát bi u select truy v n d li u
                trên các b ng hay các view ư c cho phép.
INSERT          Cho phép ngư i s d ng thêm d li u, n u ngư i s d ng có quy n này,
                h có th th c hi n phát bi u Insert, i v i m t s h th ng CSDL
                khác, mu n th c thi phát bi u Insert, ngư i s d ng ph i có quy n
                Select, trong SQL Server quy n Insert không liên quan n quy n truy
                v n Select.
UPDATE          Quy n này cho phép ngư i s d ng ch nh s a d li u b ng phát bi u
                Update.
DELETE          Quy n này cho phép ngư i s d ng xóa d li u b ng phát bi u Delete.
REFERENCE Cho phép ngư i s d ng thêm d li u vào b ng có khóa ngo i b ng
          phát bi u Insert, trong SQL Server quy n Insert không liên quan n
          quy n truy v n Select.
EXECUTE         Quy n này cho phép ngư i s d ng th c thi các th t c (SP) trong
                CSDL.
Th t c c p quy n GRANT
      GRANT ALL | < PERMISSION> [, …n]
      ON
             <table ho c view name> [(<column name> [, … n])]
              | <stored ho c extension procedure name>
      TO
             <login or role name> [, … n]
             [WITH GRANT OPTION]
             [AS <role name>]
Trong ó: t khóa ALL cho phép ngư i s d ng có t t c các quy n. PERMISSION là
m t trong các quy n: SELECT, INSERT, UPDATE, DELETE, REFERENCE,
EXECUTE. Ch rõ nh ng b ng d li u, view ho c th t c nào cho phép ngư i dùng truy
c p và x lý.
T ch i quy n truy v n và x lý d li u
      DENY ALL | < PERMISSION> [, …n]
      ON
             <table ho c view name> [(<column name> [, … n])]
              | <stored ho c extension procedure name>
Bài gi ng tóm t t H qu n tr cơ s d li u                                       44
      TO
             <login or role name> [, … n]
             [Cascade]
Lo i b quy n truy v n và x lý d li u

      REVOKE [ GRANT OPTION FOR ]
         { ALL [ PRIVILEGES ] | permission [ ,...n ] }
         {
           [ ( column [ ,...n ] ) ] ON { table | view }
           | ON { table | view } [ ( column [ ,...n ] ) ]
           | ON { stored_procedure | extended_procedure }
           | ON { user_defined_function }
         }
      { TO | FROM }
         security_account [ ,...n ]
      [ CASCADE ]
      [ AS { group | role } ]

Quy n t o    i tư ng trong CSDL
      Trong CSDL có m t s      i tư ng và các ch c năng như sao lưu d li u mà m i
ngư i s d ng trên CSDL tùy theo ch c năng và nhi m v c th ư c phép hay không
 ư c phép t o các i tư ng như table, view, stored procedure, … và t o CSDL.
Các quy n t o các     i tư ng như sau:
      Create Database.
      Create Table.
      Create View.
      Create Procedure.
      Create Rule.
      Create Default.
      Backup Database.
      Backup Log.
     phân quy n t o i tư ng trong CSDL cho ngư i dùng, trong SQL Server có th
s d ng th t c GRANT như sau:
              GRANT < ALL | Statement [, … n]> TO <login ID> [, … n]
Bài gi ng tóm t t H qu n tr cơ s d li u                                             45
4. Vai trò c a ngư i s d ng trong SQL Server và cơ s d li u
Vai trò trên SQL Server:
    Vai trò (Role)                                Di n gi i
   sysadmin           Có các quy n tương ương v i sa.
   serveradmin        C u hình m t s tham s và t t server.
   setupadmin         B gi i h n b t m t s ch c năng liên k t server và kh i ng
                      m t s th t c.
   securityadmin      Qu n lý ngư i dùng và t o CSDL.
   processadmin        ư c phép d ng các giao tác ang th c hi n trên CSDL và m t
                      s quá trình th c hi n khác c a SQL Server.
   dbcreator           ư c phép t o CSDL.
   Diskadmin          Qu n lý các t p tin liên quan n CSDL SQL Server.
Vai trò trên CSDL:

   Vai trò               Di n gi i
                         V i vai trò này, ngư i s d ng (NSD) thu c nhóm s h u
   db_owner
                         CSDL m i có th truy c p vào CSDL.
   db_accessadmin        Th c hi n các ch c năng gi ng như securityadmin.
                         NSD ư c phép select trên các b ng d li u c a các ngư i
   db_datareader
                         dùng khác trong CSDL.
                         NSD ư c phép insert, update, delete trên các b ng d li u
   db_datawriter
                         c a các ngư i dùng khác trong CSDL.
   db_ddladmin           NSD có th thêm hay ch nh s a các    i tư ng c a CSDL.
   db_securityadmin      NSD có quy n tương ương v i quy n c a securityadmin.
   db_backupoperator     NSD có th th c hi n ch c năng backup d li u.
   db_denydareader       Không cho phép s d ng phát bi u SELECT trên t t c các
                         b ng d li u c a CSDL.
   db_denydawriter       Không cho phép s d ng phát bi u INSERT, UPDATE,
                         DELETE trên t t c các b ng d li u c a CSDL.
S d ng các th t c h th ng      t o m t role m i, thêm m t ngư i dùng vào m t role,
lo i b ngư i s d ng ra kh i m t role.
   o T o m t role
              sp_addrole [ @rolename = ] 'role_name'
                [ , [ @ownername = ] 'owner' ]

      Trong ó:
Bài gi ng tóm t t H qu n tr cơ s d li u                                            46
      @rolename: tên role m i
      @ownername: ch s h u c a role m i, m c         nh là dbo
      Sau khi t o role m i c n ph i gán m t s quy n truy c p và x lý trên các b ng d
      li u nào ó trong CSDL cho role m i ó.
   o Thêm ngư i s d ng vào Role
             sp_addrolemember [ @rolename = ] 'role_name' ,
               [ @membername = ] ‘login_ID'

   o Lo i b ngư i s d ng ra kh i m t role
             sp_droprolemember [ @rolename = ] 'role_name' ,
               [ @membername = ] 'login_ID '

II. B n sao d li u
   Ph n này s gi i thi u k thu t làm gi m lưu lư ng d li u giao d ch v i SQL Server
khi ã c u hình nhi u Server trên m ng.
1. Gi i thi u v nhân b n d li u
   Nhân b n d li u (Replication) là công c ư c s d ng          sao chép m t ho c nhi u
CSDL n m t ho c nhi u server (SQL Server) khác. Các Server ư c t trong m ng
máy tính n i b (LAN). Ngư i khai thác có th th c hi n truy c p n CSDL có trong
Server ch a d li u ư c nhân b n. D li u gi a các máy ư c th c hi n ng b v i
nhau theo l ch ho c theo s ki n, khi có yêu c u. Nhân b n d li u có nh ng ưu i m sau:
   − D li u ư c lưu tr       nhi u nơi, hi u qu trong vi c có nhi u ng d ng cùng truy
     c p, khai thác.
   − Thích h p v i các ng d ng phân tích d li u c a h th ng x lý giao d ch tr c
     tuy n (OLTP) trong kho d li u (Data warehouse).
   − Có th khai thác d li u khi không k t n i     n Server.
   − Gi m thi u xung      t do s lư ng l n các giao d ch trên m ng.
   − Là m t gi i pháp an toàn khi Server b l i ho c b o dư ng.
Mô hình nhân b n.
D ch v nhân b n d li u g m các thành ph n cơ b n sau: Publisher, Distributor,
Subscribers, Publications, Articles, Subscriptions.
− Publisher: là server cung c p d li u nhân b n cho các server khác. M t publisher có
  th thi t l p nhi u b d li u nhân b n (g i là publication).
Bài gi ng tóm t t H qu n tr cơ s d li u                                            47
− Distributor: là server qu n lý các thông tin nhân b n, lưu tr d li u trong các giao
  d ch th c hi n nh n và chuy n d li u t Publisher n các Subscriber. Remote
  distributor là server tách r i kh i publisher và ư c c u hình là distributor. Local
  distributor là m t server ư c c u hình là Publisher và Distributor.
− Subscriber: Là server nh n d li u nhân b n. Subscriber g n li n v i publication (là
  máy ch nh n d li u nhân b n c a m t b d li u c u hình nhân b n).
− Article: Là m t b ng, t p d li u ho c    i tư ng c a CSDL c u hình   nhân b n.
−   Publication: Là m t t p g m m t ho c nhi u article.
− Subscription: Là m t giao d ch yêu c u b n sao b d li u ho c các i tư ng c a
  CSDL th c hi n nhân b n. Trong m i giao d ch publisher th c hi n y (push
  subscription) d li u, subscriber th c hi n kéo (pull subscription).




Nhân b n d li u ư c th c hi n theo nh ng mô hình cơ b n sau:
− Central Publisher: Là mô hình Publisher và Distributor thi t l p trên m t máy. G m
  các mô hình sau:
      M t Publisher và m t Subscriber:
Bài gi ng tóm t t H qu n tr cơ s d li u                                        48



      M t Publisher và nhi u Subscriber.




      Publisher và Subscriber ư c thi t l p trên m t máy:




−   Publisher và Distributor không thi t l p trên m t máy:




− Republisher: Là mô hình Publisher xu t b n d li u n Subscriber, sau ó Subscriber
   ư c thi t l p là Publisher xu t b n d li u n Subscriber khác.
Bài gi ng tóm t t H qu n tr cơ s d li u                                              49




      ư ng truy n gi a hai máy ư c thi t l p là Publisher có th t c   th p, phù h p v i
v trí xa nhau. Ví d mô hình gi a các vùng cách xa nhau:




+ Central Subscriber: Là mô hình Subscriber thi t l p nh n d li u xu t b n t nhi u
Publisher.
Bài gi ng tóm t t H qu n tr cơ s d li u                                            50




Nh ng ki u nhân b n d li u.
Có 3 ki u nhân b n d li u: Snaphot, Transaction, Merge.
Snapshot replication: là ki u nhân b n th c hi n sao chép, phân tán d li u ho c các i
tư ng c a CSDL t i m t th i i m. Snapshot thư ng ư c s d ng cho nh ng tình hu ng
sau:
      D li u thư ng là tĩnh, ít thay   i.
      Nhân b n s lư ng d li u nh .




Transaction replication: là ki u nhân b n mà b t u b ng nhân b n Snapshot, sau ó s
th c hi n nhân giao d ch d li u theo các s ki n insert, update, delete và nh ng thay i
liên quan n th c hi n th t c, khung nhìn ch m c. Nhân b n ki u này cho phép th c
hi n l c d li u t i Publisher, cho phép ngư i s d ng s a i d li u nhân b n t i
Bài gi ng tóm t t H qu n tr cơ s d li u                                              51
subscriber và chuy n d li u ã s a i n Publisher ho c Subscriber khác, d li u s a
  i này có th coi là d li u ư c xu t b n. Nhân b n ki u này ư c th c hi n khi:
      Mu n s a i d li u ư c xu t b n chuy n            n Subscriber, th i gian th c hi n
      theo giây, ho c t c th i.
      C n giao d ch trên toàn b h th ng nhân b n d li u (d li u có th chuy n       nt t
      c các Subscriber ho c không chuy n n Subscriber nào).
      Subscriber thư ng xuyên k t n i v i Publisher.




Merge replication: là ki u nhân b n d li u cho phép th c hi n nhân b n s a i d li u
trên nhi u Subscriber, có th k t n i (online) ho c không k t n i (offline) n Publisher.
D li u s ư c ng b theo l ch ho c theo yêu c u, d li u c p nh t có th i i m sau s
  ư c ch p nh n. Ki u nhân b n này th c hi n khi:
      Nhi u Subscriber có nhu c u c p nh t d li u và chuy n d li u c p nh t           n
      Publisher ho c Subscriber khác.
      Subscriber yêu c u nh n ho c chuy n d li u khi offline,     ng b d li u v i các
      Subscriber và Publisher sau.
Bài gi ng tóm t t H qu n tr cơ s d li u                                            52




2. C u hình Publisher và Distributor.
Trư c khi th c hi n c u hình các máy thành Publisher hay Distributor ta ph i th c hi n
ch y d ch v SQL Server Agent trong ch c năng Service manager. Các bư c c u hình
như sau:
- Ch n Server c n c u hình -> Replication
- Nh p ph i chu t -> Configure Publishing Subscription and Distribution...




- Th c hi n theo các bư c:
 + Ch n thư m c Snapshot
Bài gi ng tóm t t H qu n tr cơ s d li u   53




-   t tên CSDL c a Distribution.




- Ch n Server c u hình thành Publisher.
Bài gi ng tóm t t H qu n tr cơ s d li u                                 54




- Ch n CSDL tham gia nhân b n, ki u nhân b n.




- Ch n Server ư c c u hình là Subscriber c a Publisher ang thi t l p.
- K t thúc.
T o Publication
Bư c này s th c hi n t o Publication, cách th c hi n như sau:
+ Ch n Publication trong Replication c a Publisher.
+ Nh n ph i chu t → ch n New Publication...
Bài gi ng tóm t t H qu n tr cơ s d li u                              55
+ Th c hi n theo các bư c:
       - Ch n CSDL c n xu t b n d li u ho c     i tư ng.
       - Ch n ki u nhân b n (trong ví d này th c hi n ki u Merge).




- Ch n phiên b n SQL Server c a Subscriber.




- Ch n Article tham gia Publication.
Bài gi ng tóm t t H qu n tr cơ s d li u                                      56




-   t tên cho Publication.




- K t thúc.


T o Push Subscription.
     Bư c này th c hi n t o th t c y (push) t Publisher (Distributor trong ví d
này) n Subscriber, ư c th c hi n trên Publisher. Các bư c th c hi n như sau:
Bài gi ng tóm t t H qu n tr cơ s d li u                                           57
- Ch n Publication c a Publisher -> Nh n ph i chu t -> Push new Subscription...
- Ch n Subscriber.
- Ch n CSDL trên Subscriber n u ã có, n u chưa có th c hi n ch n ch c năng t o m i.




  - Ch n l ch th c hi n ng b d li u.
  - K t thúc. Sau khi thi t l p xong trên Subscriber s có CSDL theo tên ã t o.




T o Pull Subscription
Bài gi ng tóm t t H qu n tr cơ s d li u                                          58
Bư c này th c hi n t o công c kéo d li u nhân b n t Publisher v Subscriber, ư c
th c hi n trên Subscriber.
- Ch n Subscription c a Subscriber → Nh n ph i chu t → New Pull Supcription...
- Th c hi n theo các bư c:
 + Ch n Publication.
 + Ch n Agent tham gia k t n i Publisher.




- Ch n CSDL ích.
Bài gi ng tóm t t H qu n tr cơ s d li u                                                    59
- Th c hi n ti p các bư c và k t thúc. N u ã t o Push Subscription v i m t CSDL s
 không ư c t o Pull Subscription v i CSDL ó.
Th c hi n     ng b d li u
Sau khi thi t l p theo các mô hình nhân b n xong, có th th c hi n         ng b d li u b ng
cách:
- Th c hi n theo l ch.
- Theo yêu c u: Ch n Subscription (Push ho c Pull) → Nh n ph i chu t → Start
Synchronizing.
Sau khi th c hi n xong d li u s ư c ng b gi a Publisher và Subscriber. Ngoài th c
hi n theo công c ta có th tìm hi u th c hi n nhân b n theo câu l nh T-SQL ho c Stored
Procedure.

III.   Sao lưu và khôi ph c d li u
1. Lý do ph i sao lưu và khôi ph c d li u
 Trong quá trình th c hi n qu n tr CSDL SQL Server thì m t s nguyên nhân sau ây b t
bu c b n ph i xem xét n k thu t sao lưu và khôi ph c d li u:
          ĩa b h ng (ch a các t p tin CSDL).
       Server b h ng.
       Nguyên nhân bên ngoài (thiên nhiên, h a ho n, m t c p,...).
       User vô tình xóa d li u.
       B vô tình hay c ý làm thông tin sai l ch.
     B hack.
2. Các lo i sao lưu d li u
   Sao lưu (Backup) d li u trong SQL Server g m các lo i sau:
       Full Database Backups: sao chép toàn b CSDL (các t p tin bao g m các b ng,
       khung nhìn, các i tư ng khác).
       Differential Database Backups: sao chép nh ng d li u thay          i trong Data file k
       t l n full backup g n nh t.
       File or file group backups: sao chép m t file ơn hay file group.
       Differential File or File Group Backups: th c hi n như Differential Database
       nhưng copy ph n d li u thay i c a file ơn ho c file group.
       Transaction log backups: Ghi nh n t t c các transaction ch a trong transaction log
       file k t l n transaction log backup g n nh t. V i lo i sao lưu này ta có th khôi
       ph c d li u t i m t th i i m.
3. Các mô hình khôi ph c d li u
Bài gi ng tóm t t H qu n tr cơ s d li u                                              60
      Full Recovery model: Là mô hình ph c h i toàn b ho t ng giao d ch c a d li u
      (Insert, Update, Delete, ho t ng b i l nh bcp, bulk insert). V i mô hình này ta có
      th ph c h i d li u t i m t th i i m trong quá kh ã ư c lưu trong transaction
      log file.
      Bulk-Logged Recovery Model: Mô hình này ư c th c thi cho các thao tác bcp,
      bulk insert, create ch m c, writetext, updatetext, các ho t ng này ch nh t ký s
      ki n vào log       bi t mà không sao lưu toàn b d li u, chi ti t như trong full
      recover. Các s ki n Insert, Update, Delete v n ư c nh t ký và khôi ph c bình
      thư ng.
      Simple Recovery Model: V i mô hình này b n ch ph c h i l i th i i m sao lưu
      g n nh t mà không theo th i i m khác trong quá kh .
       Cách    t mô hình khôi ph c:
      - Ch n CSDL.
      - Nh n nút ph i chu t → Properties → Options → Recovery → ch n Model.
Xét ví d sau: Gi s ta có m t CSDL ư c backup theo chi n lư c như hình v bên dư i
   Nhìn hình ta th y CSDL ư c l p l ch Full Database Backup vào ngày ch nh t,
Differential Database Backup vào ngày th ba và th năm, còn Log Database Backup vào
5 ngày trong tu n, ngày th sáu có s c v i CSDL, data file b h ng. V n        t ra là
ph i ph c h i d li u và CSDL ho t ng bình thư ng. Ta ph i làm các bư c sau:
      Th c hi n Backup log file (gi s log file không b h ng).
      Khôi ph c Full Database c a ngày ch nh t.
      Ph c h i Differential Database c a ngày th năm.
      Khôi ph c Transaction log backup ngày th năm.
Bài gi ng tóm t t H qu n tr cơ s d li u                                             61
4. Sao lưu cơ s d li u (Backup Database)
  Trư c khi xem xét k thu t sao lưu CSDL, ta th ng nh t m t s thu t ng b ng ti ng
Anh như sau:
   Backup: Là quá trình copy toàn b ho c m t ph n database, transaction log, file, file
   group thành l p m t backup set ư c ch a trong backup media (disk ho c tape) b ng
   cách s d ng m t backup device (tape drive name ho c physical filename).
   Backup Device: M t file v t lý ho c m t drive tape.
   Backup file: M t file ch a Backup set.
   Backup media: là Disk ho c tape.
   Backup set: M t b backup m t l n backup ơn ch a trên backup media.
   Các bư c th c hi n backup như sau:
   − Ch n CSDL c n backup.
   − Nh n ph i chu t → All Tasks → Backup Database…
   -   Nh p các tham s , l a ch n ki u.
5. Khôi ph c d li u (Restore Database)
    Là ch c năng th c hi n khôi ph c d li u ã sao lưu, tùy theo chi n lư c backup mà
ngư i qu n tr có th ph c h i n th i i m nào, thu ư c b d li u trong quá kh như
th nào. Khôi ph c d li u ư c th c hi n theo th t backup, thông tin này ư c lưu tr
trong msdb. Các bư c th c hi n như sau:
   − Ch n m c Databases → Nh n nút ph i chu t → All Tasks → Restore Database…
   − Nh p tham s , ch n mô hình khôi ph c.
IV.    Qu n lý giao d ch
1. Các khái ni m
   M t giao d ch là m t ơn v th c hi n chương trình truy xu t và có th c p nh t nhi u
m c d li u. M t giao d ch thư ng là k t qu c a s th c hi n m t chương trình ngư i
dùng ư c vi t trong m t ngôn ng thao tác d li u m c cao ho c m t ngôn ng l p trình
(SQL, COBOL, PASCAL ...), và ư c phân cách b i các câu l nh (ho c các l i g i hàm)
có d ng begin transaction và end transaction. Giao d ch bao g m t t c các ho t ng
 ư c th c hi n gi a begin và end transaction.
      m b o tính toàn v n c a d li u, ta yêu c u h CSDL duy trì các tính ch t sau c a
giao d ch:
   • Tính nguyên t (Atomicity). Ho c toàn b các ho t        ng c a giao d ch ư c ph n
     ánh úng n trong CSDL ho c không có gì c .
   • Tính nh t quán (consistency). S th c hi n c a m t giao d ch là cô l p (Không
Bài gi ng tóm t t H qu n tr cơ s d li u                                                62
      có giao d ch khác th c hi n    ng th i)   b o t n tính nh t quán c a CSDL.
   • Tính cô l p (Isolation). Cho dù nhi u giao d ch có th th c hi n ng th i, h
     th ng ph i m b o r ng i v i m i c p giao d ch Ti, Tj , ho c Tj k t thúc th c
     hi n trư c khi Ti kh i ng ho c Tj b t u s th c hi n sau khi Ti k t thúc. Như
     v y m i giao d ch không c n bi t n các giao d ch khác ang th c hi n ng th i
     trong h th ng.
   • Tính b n v ng (Durability). Sau m t giao d ch hoàn thành, các thay         i ã ư c
     t o ra i v i CSDL v n còn ngay c khi x y ra s c h th ng.
    Các tính ch t này thư ng ư c g i là các tính ch t ACID (Các ch cái u c a b n
tính ch t). Ta xét m t ví d : m t h th ng ngân hàng g m m t s tài kho n và m t t p
các giao d ch truy xu t và c p nh t các tài kho n. T i th i i m hi n t i, ta gi thi t r ng
CSDL n m trên ĩa, nhưng m t vài ph n c a nó ang n m t m th i trong b nh . Các
truy xu t CSDL ư c th c hi n b i hai ho t ng sau:
   • READ(X): chuy n m c d li u X t CSDL                n buffer c a giao d ch th c hi n
     ho t ng READ này.
   • WRITE(X): chuy n m c d li u X t buffer c a giao d ch th c hi n WRITE               n
     CSDL.
    Trong h CSDL th c, ho t ng WRITE không nh t thi t d n n s c p nh t tr c
ti p d li u trên ĩa; ho t ng WRITE có th ư c lưu t m th i trong b nh và ư c
th c hi n trên ĩa mu n hơn. Trong ví d , ta gi thi t ho t ng WRITE c p nh t tr c
ti p CSDL.
   Ti là m t giao d ch chuy n 50 t tài kho n A sang tài kho n B. Giao d ch này có th
 ư c xác nh như sau:

                   Ti : READ(A);
                     A:=A - 50;
                     WRITE(A)
                     READ(B);
                     B:=B + 50;
                     WRITE(B);
Ta xem xét m i yêu c u trong ACID:
• Tính nh t quán: òi h i nh t quán        ây là t ng c a A và B là không thay        ib i
  s th c hi n giao d ch. N u không có yêu c u nh t quán, ti n có th ư c t o        ra hay
  m t b i giao d ch. D dàng ki m nghi m r ng n u CSDL nh t quán trư c m            t th c
  hi n giao d ch, nó v n nh t quán sau khi th c hi n giao d ch. m b o tính nh      t quán
Hệ quản trị cơ sở dữ liệu   tạ thị thu phượng[bookbooming.com]
Hệ quản trị cơ sở dữ liệu   tạ thị thu phượng[bookbooming.com]
Hệ quản trị cơ sở dữ liệu   tạ thị thu phượng[bookbooming.com]
Hệ quản trị cơ sở dữ liệu   tạ thị thu phượng[bookbooming.com]
Hệ quản trị cơ sở dữ liệu   tạ thị thu phượng[bookbooming.com]
Hệ quản trị cơ sở dữ liệu   tạ thị thu phượng[bookbooming.com]
Hệ quản trị cơ sở dữ liệu   tạ thị thu phượng[bookbooming.com]
Hệ quản trị cơ sở dữ liệu   tạ thị thu phượng[bookbooming.com]
Hệ quản trị cơ sở dữ liệu   tạ thị thu phượng[bookbooming.com]
Hệ quản trị cơ sở dữ liệu   tạ thị thu phượng[bookbooming.com]
Hệ quản trị cơ sở dữ liệu   tạ thị thu phượng[bookbooming.com]
Hệ quản trị cơ sở dữ liệu   tạ thị thu phượng[bookbooming.com]
Hệ quản trị cơ sở dữ liệu   tạ thị thu phượng[bookbooming.com]
Hệ quản trị cơ sở dữ liệu   tạ thị thu phượng[bookbooming.com]
Hệ quản trị cơ sở dữ liệu   tạ thị thu phượng[bookbooming.com]
Hệ quản trị cơ sở dữ liệu   tạ thị thu phượng[bookbooming.com]
Hệ quản trị cơ sở dữ liệu   tạ thị thu phượng[bookbooming.com]
Hệ quản trị cơ sở dữ liệu   tạ thị thu phượng[bookbooming.com]
Hệ quản trị cơ sở dữ liệu   tạ thị thu phượng[bookbooming.com]
Hệ quản trị cơ sở dữ liệu   tạ thị thu phượng[bookbooming.com]
Hệ quản trị cơ sở dữ liệu   tạ thị thu phượng[bookbooming.com]
Hệ quản trị cơ sở dữ liệu   tạ thị thu phượng[bookbooming.com]
Hệ quản trị cơ sở dữ liệu   tạ thị thu phượng[bookbooming.com]
Hệ quản trị cơ sở dữ liệu   tạ thị thu phượng[bookbooming.com]
Hệ quản trị cơ sở dữ liệu   tạ thị thu phượng[bookbooming.com]
Hệ quản trị cơ sở dữ liệu   tạ thị thu phượng[bookbooming.com]
Hệ quản trị cơ sở dữ liệu   tạ thị thu phượng[bookbooming.com]
Hệ quản trị cơ sở dữ liệu   tạ thị thu phượng[bookbooming.com]
Hệ quản trị cơ sở dữ liệu   tạ thị thu phượng[bookbooming.com]
Hệ quản trị cơ sở dữ liệu   tạ thị thu phượng[bookbooming.com]
Hệ quản trị cơ sở dữ liệu   tạ thị thu phượng[bookbooming.com]
Hệ quản trị cơ sở dữ liệu   tạ thị thu phượng[bookbooming.com]
Hệ quản trị cơ sở dữ liệu   tạ thị thu phượng[bookbooming.com]
Hệ quản trị cơ sở dữ liệu   tạ thị thu phượng[bookbooming.com]
Hệ quản trị cơ sở dữ liệu   tạ thị thu phượng[bookbooming.com]
Hệ quản trị cơ sở dữ liệu   tạ thị thu phượng[bookbooming.com]
Hệ quản trị cơ sở dữ liệu   tạ thị thu phượng[bookbooming.com]
Hệ quản trị cơ sở dữ liệu   tạ thị thu phượng[bookbooming.com]
Hệ quản trị cơ sở dữ liệu   tạ thị thu phượng[bookbooming.com]
Hệ quản trị cơ sở dữ liệu   tạ thị thu phượng[bookbooming.com]
Hệ quản trị cơ sở dữ liệu   tạ thị thu phượng[bookbooming.com]
Hệ quản trị cơ sở dữ liệu   tạ thị thu phượng[bookbooming.com]
Hệ quản trị cơ sở dữ liệu   tạ thị thu phượng[bookbooming.com]
Hệ quản trị cơ sở dữ liệu   tạ thị thu phượng[bookbooming.com]
Hệ quản trị cơ sở dữ liệu   tạ thị thu phượng[bookbooming.com]
Hệ quản trị cơ sở dữ liệu   tạ thị thu phượng[bookbooming.com]
Hệ quản trị cơ sở dữ liệu   tạ thị thu phượng[bookbooming.com]
Hệ quản trị cơ sở dữ liệu   tạ thị thu phượng[bookbooming.com]
Hệ quản trị cơ sở dữ liệu   tạ thị thu phượng[bookbooming.com]
Hệ quản trị cơ sở dữ liệu   tạ thị thu phượng[bookbooming.com]
Hệ quản trị cơ sở dữ liệu   tạ thị thu phượng[bookbooming.com]

More Related Content

Viewers also liked

Viewers also liked (11)

230 bệnh tật trẻ em
230 bệnh tật trẻ em230 bệnh tật trẻ em
230 bệnh tật trẻ em
 
24 bone pathology
24 bone pathology24 bone pathology
24 bone pathology
 
Tìm đường trên di động (PhoneGap)
Tìm đường trên di động (PhoneGap)Tìm đường trên di động (PhoneGap)
Tìm đường trên di động (PhoneGap)
 
Culture and communication
Culture and communicationCulture and communication
Culture and communication
 
Chương 5 Cạnh tranh và độc quyền
Chương 5 Cạnh tranh và độc quyềnChương 5 Cạnh tranh và độc quyền
Chương 5 Cạnh tranh và độc quyền
 
Communication and Culture
Communication and CultureCommunication and Culture
Communication and Culture
 
Iig power point_2010_lesson_04_vn
Iig power point_2010_lesson_04_vnIig power point_2010_lesson_04_vn
Iig power point_2010_lesson_04_vn
 
Gui Nhung Nguoi May Man
Gui Nhung Nguoi May ManGui Nhung Nguoi May Man
Gui Nhung Nguoi May Man
 
Thiet ke bai_giang_dt
Thiet ke bai_giang_dtThiet ke bai_giang_dt
Thiet ke bai_giang_dt
 
Chương 3 lý thuyết về hành vi của người tiêu dùng
Chương 3 lý thuyết về hành vi của người tiêu dùngChương 3 lý thuyết về hành vi của người tiêu dùng
Chương 3 lý thuyết về hành vi của người tiêu dùng
 
VietNam presentation
VietNam presentation VietNam presentation
VietNam presentation
 

Similar to Hệ quản trị cơ sở dữ liệu tạ thị thu phượng[bookbooming.com]

De cuong mang may tinh 3f-hedspi.net
De cuong mang may tinh   3f-hedspi.netDe cuong mang may tinh   3f-hedspi.net
De cuong mang may tinh 3f-hedspi.netTonachi Shika
 
đTkh.ứng dụng tin học trong hoạt động kiểm toán nguyễn đình hựu[bookbooming...
đTkh.ứng dụng tin học trong hoạt động kiểm toán   nguyễn đình hựu[bookbooming...đTkh.ứng dụng tin học trong hoạt động kiểm toán   nguyễn đình hựu[bookbooming...
đTkh.ứng dụng tin học trong hoạt động kiểm toán nguyễn đình hựu[bookbooming...bookbooming1
 
Quản lý sơ đồ nguyên lý lưới điện trung áp trong Tổng công ty điện lực Miền B...
Quản lý sơ đồ nguyên lý lưới điện trung áp trong Tổng công ty điện lực Miền B...Quản lý sơ đồ nguyên lý lưới điện trung áp trong Tổng công ty điện lực Miền B...
Quản lý sơ đồ nguyên lý lưới điện trung áp trong Tổng công ty điện lực Miền B...Man_Ebook
 
Bài giảng môn Cơ sở dữ liệu - truongkinhtethucpham.com
Bài giảng môn Cơ sở dữ liệu - truongkinhtethucpham.comBài giảng môn Cơ sở dữ liệu - truongkinhtethucpham.com
Bài giảng môn Cơ sở dữ liệu - truongkinhtethucpham.commai_non
 
Cơ Sở Dữ Liệu - Chương 1
Cơ Sở Dữ Liệu - Chương 1Cơ Sở Dữ Liệu - Chương 1
Cơ Sở Dữ Liệu - Chương 1Nguyễn Trọng
 
ỨNG DỤNG CÔNG NGHỆ TÁC TỬ DI ĐỘNG TRONG HỆ THỐNG QUẢN LÝ BỆNH VIỆN
ỨNG DỤNG CÔNG NGHỆ TÁC TỬ DI ĐỘNG TRONG HỆ THỐNG QUẢN LÝ BỆNH VIỆNỨNG DỤNG CÔNG NGHỆ TÁC TỬ DI ĐỘNG TRONG HỆ THỐNG QUẢN LÝ BỆNH VIỆN
ỨNG DỤNG CÔNG NGHỆ TÁC TỬ DI ĐỘNG TRONG HỆ THỐNG QUẢN LÝ BỆNH VIỆNMai Hoàng
 
Đồ án Xây dựng website nộp đồ án trực tuyến
Đồ án Xây dựng website nộp đồ án trực tuyếnĐồ án Xây dựng website nộp đồ án trực tuyến
Đồ án Xây dựng website nộp đồ án trực tuyếnAubrey Yundt
 
Lập trình web đại học tài nguyên môi trường
Lập trình web   đại học tài nguyên môi trườngLập trình web   đại học tài nguyên môi trường
Lập trình web đại học tài nguyên môi trườngKiên Thỏ
 
Tài liệu tổng quát về cơ sở dữ liệu
Tài liệu tổng quát về cơ sở dữ liệuTài liệu tổng quát về cơ sở dữ liệu
Tài liệu tổng quát về cơ sở dữ liệuAnh Duong Pham
 
Android program 6167
Android program 6167Android program 6167
Android program 6167PhongSPKT
 
the real-time operating system and real-time programming
the real-time operating system and real-time programmingthe real-time operating system and real-time programming
the real-time operating system and real-time programmingDucLe868608
 
Nền tảng lập trình java (Core java)
Nền tảng lập trình java (Core java)Nền tảng lập trình java (Core java)
Nền tảng lập trình java (Core java)Trần Thiên Đại
 
Giao trinh he_dieu_hanh_tech24_vn[bookbooming.com]
Giao trinh he_dieu_hanh_tech24_vn[bookbooming.com]Giao trinh he_dieu_hanh_tech24_vn[bookbooming.com]
Giao trinh he_dieu_hanh_tech24_vn[bookbooming.com]bookbooming1
 

Similar to Hệ quản trị cơ sở dữ liệu tạ thị thu phượng[bookbooming.com] (20)

De cuong mang may tinh 3f-hedspi.net
De cuong mang may tinh   3f-hedspi.netDe cuong mang may tinh   3f-hedspi.net
De cuong mang may tinh 3f-hedspi.net
 
04 de cuong
04 de cuong04 de cuong
04 de cuong
 
đTkh.ứng dụng tin học trong hoạt động kiểm toán nguyễn đình hựu[bookbooming...
đTkh.ứng dụng tin học trong hoạt động kiểm toán   nguyễn đình hựu[bookbooming...đTkh.ứng dụng tin học trong hoạt động kiểm toán   nguyễn đình hựu[bookbooming...
đTkh.ứng dụng tin học trong hoạt động kiểm toán nguyễn đình hựu[bookbooming...
 
Quản lý sơ đồ nguyên lý lưới điện trung áp trong Tổng công ty điện lực Miền B...
Quản lý sơ đồ nguyên lý lưới điện trung áp trong Tổng công ty điện lực Miền B...Quản lý sơ đồ nguyên lý lưới điện trung áp trong Tổng công ty điện lực Miền B...
Quản lý sơ đồ nguyên lý lưới điện trung áp trong Tổng công ty điện lực Miền B...
 
Bài giảng môn Cơ sở dữ liệu - truongkinhtethucpham.com
Bài giảng môn Cơ sở dữ liệu - truongkinhtethucpham.comBài giảng môn Cơ sở dữ liệu - truongkinhtethucpham.com
Bài giảng môn Cơ sở dữ liệu - truongkinhtethucpham.com
 
Cong nghnet
Cong nghnetCong nghnet
Cong nghnet
 
Cơ Sở Dữ Liệu - Chương 1
Cơ Sở Dữ Liệu - Chương 1Cơ Sở Dữ Liệu - Chương 1
Cơ Sở Dữ Liệu - Chương 1
 
ỨNG DỤNG CÔNG NGHỆ TÁC TỬ DI ĐỘNG TRONG HỆ THỐNG QUẢN LÝ BỆNH VIỆN
ỨNG DỤNG CÔNG NGHỆ TÁC TỬ DI ĐỘNG TRONG HỆ THỐNG QUẢN LÝ BỆNH VIỆNỨNG DỤNG CÔNG NGHỆ TÁC TỬ DI ĐỘNG TRONG HỆ THỐNG QUẢN LÝ BỆNH VIỆN
ỨNG DỤNG CÔNG NGHỆ TÁC TỬ DI ĐỘNG TRONG HỆ THỐNG QUẢN LÝ BỆNH VIỆN
 
Đồ án Xây dựng website nộp đồ án trực tuyến
Đồ án Xây dựng website nộp đồ án trực tuyếnĐồ án Xây dựng website nộp đồ án trực tuyến
Đồ án Xây dựng website nộp đồ án trực tuyến
 
Lập trình web đại học tài nguyên môi trường
Lập trình web   đại học tài nguyên môi trườngLập trình web   đại học tài nguyên môi trường
Lập trình web đại học tài nguyên môi trường
 
Quan ly bo nho
Quan ly bo nhoQuan ly bo nho
Quan ly bo nho
 
Dsd04 sta
Dsd04 staDsd04 sta
Dsd04 sta
 
Tài liệu tổng quát về cơ sở dữ liệu
Tài liệu tổng quát về cơ sở dữ liệuTài liệu tổng quát về cơ sở dữ liệu
Tài liệu tổng quát về cơ sở dữ liệu
 
Dsd02 sta
Dsd02 staDsd02 sta
Dsd02 sta
 
Android program 6167
Android program 6167Android program 6167
Android program 6167
 
Đề tài: Xây dựng website nộp đồ án trực tuyến, HAY
Đề tài: Xây dựng website nộp đồ án trực tuyến, HAYĐề tài: Xây dựng website nộp đồ án trực tuyến, HAY
Đề tài: Xây dựng website nộp đồ án trực tuyến, HAY
 
the real-time operating system and real-time programming
the real-time operating system and real-time programmingthe real-time operating system and real-time programming
the real-time operating system and real-time programming
 
Nền tảng lập trình java (Core java)
Nền tảng lập trình java (Core java)Nền tảng lập trình java (Core java)
Nền tảng lập trình java (Core java)
 
Nghiên Cứu Kỹ Thuật Khai Phá Quy Trình Và Ứng Dụng Để Phân Tích Quy Trình Yêu...
Nghiên Cứu Kỹ Thuật Khai Phá Quy Trình Và Ứng Dụng Để Phân Tích Quy Trình Yêu...Nghiên Cứu Kỹ Thuật Khai Phá Quy Trình Và Ứng Dụng Để Phân Tích Quy Trình Yêu...
Nghiên Cứu Kỹ Thuật Khai Phá Quy Trình Và Ứng Dụng Để Phân Tích Quy Trình Yêu...
 
Giao trinh he_dieu_hanh_tech24_vn[bookbooming.com]
Giao trinh he_dieu_hanh_tech24_vn[bookbooming.com]Giao trinh he_dieu_hanh_tech24_vn[bookbooming.com]
Giao trinh he_dieu_hanh_tech24_vn[bookbooming.com]
 

More from bookbooming1

Tập trung hay là chết
Tập trung hay là chếtTập trung hay là chết
Tập trung hay là chếtbookbooming1
 
Edison mà tôi biết
Edison mà tôi biếtEdison mà tôi biết
Edison mà tôi biếtbookbooming1
 
Chinh phục các đợt sóng văn hóa
Chinh phục các đợt sóng văn hóaChinh phục các đợt sóng văn hóa
Chinh phục các đợt sóng văn hóabookbooming1
 
Chân dung mới của cfo cách nhà quản trị tài chính thay đổi vai trò của mình...
Chân dung mới của cfo   cách nhà quản trị tài chính thay đổi vai trò của mình...Chân dung mới của cfo   cách nhà quản trị tài chính thay đổi vai trò của mình...
Chân dung mới của cfo cách nhà quản trị tài chính thay đổi vai trò của mình...bookbooming1
 
Những công ty đột phá
Những công ty đột pháNhững công ty đột phá
Những công ty đột phábookbooming1
 
Bí quyết của các ceo – 150 ceo toàn cầu tiết lộ bí mất về kinh doanh, cuộc số...
Bí quyết của các ceo – 150 ceo toàn cầu tiết lộ bí mất về kinh doanh, cuộc số...Bí quyết của các ceo – 150 ceo toàn cầu tiết lộ bí mất về kinh doanh, cuộc số...
Bí quyết của các ceo – 150 ceo toàn cầu tiết lộ bí mất về kinh doanh, cuộc số...bookbooming1
 
Tiểu sử steve jobs
Tiểu sử steve jobsTiểu sử steve jobs
Tiểu sử steve jobsbookbooming1
 
Thuật đắc nhân tâm.
Thuật đắc nhân tâm.Thuật đắc nhân tâm.
Thuật đắc nhân tâm.bookbooming1
 
Con đường steve jobs
Con đường steve jobsCon đường steve jobs
Con đường steve jobsbookbooming1
 
10 lời khuyên khởi nghiệp
10 lời khuyên khởi nghiệp10 lời khuyên khởi nghiệp
10 lời khuyên khởi nghiệpbookbooming1
 

More from bookbooming1 (20)

Tập trung hay là chết
Tập trung hay là chếtTập trung hay là chết
Tập trung hay là chết
 
Edison mà tôi biết
Edison mà tôi biếtEdison mà tôi biết
Edison mà tôi biết
 
Chinh phục các đợt sóng văn hóa
Chinh phục các đợt sóng văn hóaChinh phục các đợt sóng văn hóa
Chinh phục các đợt sóng văn hóa
 
Chân dung mới của cfo cách nhà quản trị tài chính thay đổi vai trò của mình...
Chân dung mới của cfo   cách nhà quản trị tài chính thay đổi vai trò của mình...Chân dung mới của cfo   cách nhà quản trị tài chính thay đổi vai trò của mình...
Chân dung mới của cfo cách nhà quản trị tài chính thay đổi vai trò của mình...
 
Bản lĩnh putin
Bản lĩnh putinBản lĩnh putin
Bản lĩnh putin
 
Những công ty đột phá
Những công ty đột pháNhững công ty đột phá
Những công ty đột phá
 
Bí quyết của các ceo – 150 ceo toàn cầu tiết lộ bí mất về kinh doanh, cuộc số...
Bí quyết của các ceo – 150 ceo toàn cầu tiết lộ bí mất về kinh doanh, cuộc số...Bí quyết của các ceo – 150 ceo toàn cầu tiết lộ bí mất về kinh doanh, cuộc số...
Bí quyết của các ceo – 150 ceo toàn cầu tiết lộ bí mất về kinh doanh, cuộc số...
 
Tiểu sử steve jobs
Tiểu sử steve jobsTiểu sử steve jobs
Tiểu sử steve jobs
 
Thuật đắc nhân tâm.
Thuật đắc nhân tâm.Thuật đắc nhân tâm.
Thuật đắc nhân tâm.
 
Con đường steve jobs
Con đường steve jobsCon đường steve jobs
Con đường steve jobs
 
10 lời khuyên khởi nghiệp
10 lời khuyên khởi nghiệp10 lời khuyên khởi nghiệp
10 lời khuyên khởi nghiệp
 
Chuong3
Chuong3Chuong3
Chuong3
 
Chuong mo dau
Chuong mo dauChuong mo dau
Chuong mo dau
 
Chuong 5
Chuong 5Chuong 5
Chuong 5
 
Chuong 2
Chuong 2Chuong 2
Chuong 2
 
Chuong 1
Chuong 1Chuong 1
Chuong 1
 
Ch viii
Ch viiiCh viii
Ch viii
 
Ch­ vii
Ch­ viiCh­ vii
Ch­ vii
 
Chuong 4
Chuong 4Chuong 4
Chuong 4
 
Ch vi
Ch viCh vi
Ch vi
 

Hệ quản trị cơ sở dữ liệu tạ thị thu phượng[bookbooming.com]

  • 1. TRƯỜNG ĐẠI HỌC ĐÀ LẠT KHOA TOÁN - TIN HỌC HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU (Baøi giaûng toùm taét) NGƯỜI BIÊN SOẠN TẠ THỊ THU PHƯỢNG Ñaø Laït 2009
  • 2. M CL C Chương 1: T ng quan v H qu n tr cơ s d li u .....................................Trang 1 I. Gi i thi u................................................................................................................1 II. C u trúc và thành ph n c a h qu n tr cơ s d li u ............................................2 Chương 2: Xây d ng, qu n lý và khai thác cơ s d li u.........................................5 I. Khái ni m cơ s d li u .........................................................................................5 II. T o cơ s d li u. ...................................................................................................5 III. Ki u d li u. ...........................................................................................................6 IV. T o và qu n lý b ng. .............................................................................................7 V. Các thao tác trên d li u.......................................................................................11 VI. Truy v n d li u ...................................................................................................12 VII. T o và s d ng khung nhìn (View)......................................................................14 VIII. T o và s d ng ch m c (Index)...........................................................................14 IX. Chuy n i d li u v i các ng d ng khác..........................................................18 Chương 3: T-SQL nâng cao ......................................................................................19 I. Khai báo và s d ng bi n .....................................................................................19 II. C u trúc i u khi n...............................................................................................20 III. Th t c thư ng trú (Stored Procedures)...............................................................22 IV. Ki u d li u cursor ...............................................................................................26 V. Hàm ngư i dùng (User Defined Functions).........................................................32 VI. Triggers và cài t ràng bu c d li u ...................................................................35 Chương 4: B o m t và an toàn d li u .....................................................................40 I. B o m t trong h qu n tr cơ s d li u ..............................................................40 II. B n sao d li u .....................................................................................................46 III. Sao lưu và khôi ph c d li u ...............................................................................59 IV. Qu n lý giao d ch .................................................................................................61 Chương 5: L p trình cơ s d li u............................................................................92 I. L p trình ADO.NET.............................................................................................92 II. Thi t k ch c năng c/ ghi d li u .....................................................................95 III. T o báo bi u v i Crystal Report ..........................................................................98 Bài t p ........................................................................................................................105
  • 3. Bài gi ng tóm t t H qu n tr cơ s d li u 1 Chương 1 T NG QUAN V H QU N TR CƠ S D LI U I. Gi i thi u Thông tin là ngu n tài nguyên quý giá c a m t t ch c. Các ph n m m máy tính là nh ng công c hi u qu x lý thông tin và h qu n tr cơ s d li u là công c ph bi n cho phép lưu tr và rút trích thông tin m t cách hi u qu . H qu n tr cơ s d li u quan h là h qu n tr cơ s d li u ph bi n nh t hi n nay và ư c h tr b i nhi u nhà cung c p ph n m m. Tính hi u qu c a các ng d ng ph thu c vào ch t lư ng c a vi c t ch c d li u. Nh ng c i ti n trong k thu t và x lý cơ s d li u ưa n các cơ h i s d ng thông tin m t cách linh ho t và hi u qu khi d li u ư c t ch c và lưu tr trong các c u trúc quan h . H qu n tr cơ s d li u là m t thành công trong lĩnh v c thương m i. M c tiêu c a h qu n tr cơ s d li u. H qu n tr cơ s d li u ph i m b o các m c tiêu sau: d li u s n dùng (data availability), tính toàn v n d li u (data integrity), an toàn d li u (data secutity), và c l p d li u (data independency). o D li u s n dùng (data availability): d li u ư c t ch c sao cho m i ngư i dùng có th truy c p d dàng theo ch c năng và nhi m v c a h . o Tính toàn v n d li u (data integrity): d li u lưu tr trong cơ s d li u là úng n, áng tin c y. o An toàn d li u (data secutity): Ch nh ng ngư i dùng ư c phép m i có th truy c p d li u. N u nhi u ngư i dùng truy c p chung m t m c d li u cùng lúc thì h qu n tr cơ s d li u không cho phép h th c hi n nh ng thay i gây mâu thu n d li u. o c l p d li u (data independency): h qu n tr cơ s d li u ph i cho phép t t c m i ngư i dùng ư c phép lưu tr , c p nh t và rút trích d li u hi u qu mà không c n n m chi ti t v c u trúc c a cơ s d li u ư c bi u di n và cài t. Quá trình phát tri n c a h qu n tr cơ s d li u. Quá trình phát tri n c a DBMS như sau: − Flat files: 1960s – 1980s − Hierarchical: 1970s –1990s − Network : 1970s – 1990s − Relational: 1980s – n nay − Object-oriented: 1990s – n nay
  • 4. Bài gi ng tóm t t H qu n tr cơ s d li u 2 − Object-relational: 1990s – n nay − Data warehousing: 1980s – n nay − Web-enabled: 1990s – n nay II. C u trúc và thành ph n c a h qu n tr cơ s d li u. Forms Application SQL Interface Front ends SQL Commands Query Parser Plan Executor Execution Engine Optimizer Operator Evaluator Concurrency Control File and Access Transaction Methods Manager Recovery Buffer Manager Lock Manager Manager Disk Space Manager DBMS Index System DATABASE Files Data catalog Files Hình 1.1 Ki n trúc c a DBMS Ki n trúc c a h qu n tr cơ s d li u g m 2 thành ph n ch c năng: o B qu n lý lưu tr (Storage manager). o B X lý truy v n (Query Processor). 1. B qu n lý lưu tr B qu n lý lưu tr có nhi m v lưu tr , rút trích và c p nh t d li u vào cơ s d li u. B qu n lý lưu tr g m có các ơn v sau: − Ki m tra ch ng th c và toàn v n. − Qu n lý giao d ch . − Qu n lý file.
  • 5. Bài gi ng tóm t t H qu n tr cơ s d li u 3 − Qu n lý vùng m. Qu n lý giao d ch (Transaction management) Thông thư ng, m t s thao tác trên cơ s d li u t o thành m t ơn v logic công vi c. Ta hãy xét ví d chuy n kho n, trong ó m t s ti n x ư c chuy n t tài kho n A (A:=A-x) sang m t tài kho n B (B:=B+x). M t y u t c n thi t là c hai thao tác này ho c cùng x y ra ho c không ho t ng nào x y ra c . Vi c chuy n kho n ph i x y ra trong tính toàn th c a nó ho c không. Yêu c u toàn th -ho c-không này ư c g i là tính nguyên t (atomicity). M t y u t c n thi t khác là s th c hi n vi c chuy n kho n b o toàn tính nh t quán c a cơ s d li u: giá tr c a t ng A + B ph i ư c b o toàn. Yêu c u v tính chính xác này ư c g i là tính nh t quán (consistency). Cu i cùng, sau khi th c hi n thành công ho t ng chuy n kho n, các giá tr c a các tài kho n A và B ph i b n v ng cho dù có th có s c h th ng. Yêu c u v tính b n v ng này ư c g i là tính lâu b n (durability). M t giao d ch là m t t p các ho t ng th c hi n ch m t ch c năng logic trong m t ng d ng cơ s d li u. M i giao d ch là m t ơn v mang c tính nguyên t l n tính nh t quán. Như v y, các giao d ch ph i không ư c vi ph m b t kỳ ràng bu c nh t quán nào: N u cơ s d li u là nh t quán khi m t giao d ch kh i ng thì nó cũng ph i là nh t quán khi giao d ch k t thúc thành công. Tuy nhiên, trong khi ang th c hi n giao d ch, ph i cho phép s không nh t quán t m th i. S không nh t quán t m th i này tuy là c n thi t nhưng l i có th d n n các khó khăn n u x y ra s c . Trách nhi m c a ngư i l p trình là xác nh úng n các giao d ch sao cho b o toàn tính nh t quán c a cơ s d li u. m b o tính nguyên t và tính lâu b n là trách nhi m c a h cơ s d li u nói chung và c a thành ph n qu n tr giao d ch (transaction-management component ) nói riêng. N u không có s c , t t c giao d ch hoàn t t thành công và tính nguyên t ư c hoàn thành d dàng. Tuy nhiên, do s hi n di n c a các s c , m t giao d ch có th không hoàn t t thành công s th c hi n c a nó. N u tính nguyên t ư c m b o, m t giao d ch th t b i không gây nh hư ng n tr ng thái c a cơ s d li u. Như v y, cơ s d li u ph i ư c hoàn l i tr ng thái c a nó trư c khi giao d ch b t u. H qu n tr cơ s d li u ph i có trách nhi m phát hi n s c h th ng và tr l i cơ s d li u v tr ng thái trư c khi x y ra s c . Khi m t s giao d ch tương tranh c p nh t cơ s d li u, tính nh t quán c a d li u có th không ư c b o toàn, ngay c khi m i giao d ch là chính xác. B qu n tr i u khi n tương tranh (concurency-control manager) có trách nhi m i u khi n các tương tác gi a các giao d ch ng th i m b o tính th ng nh t c a CSDL.
  • 6. Bài gi ng tóm t t H qu n tr cơ s d li u 4 Thành ph n Ki m tra ch ng th c và toàn v n (Authorization and Integrity Manager) Ki m tra ràng bu c toàn v n và quy n truy c p d li u c a ngư i dùng cơ s d li u. Thành ph n qu n lý giao d ch (Transaction manager) Thành ph n này m b o r ng cơ s d li u luôn tr ng thái nh t quán. Nó qu n lý vi c th c thi các yêu c u thao tác d li u và m b o các truy c p d li u ng th i không d n n mâu thu n. Thành ph n qu n lý file (File manager): qu n lý vi c c p phát không gian trên ĩa. Các file ư c dùng ch a t p các d li u tương t nhau. H qu n lý file qu n lý các file c l p, giúp nh p và l y các m u tin. Thành ph n qu n lý file thi t l p và duy trì danh sách các c u trúc và ch m c ư c nh nghĩa trong lư c trong. Thành ph n qu n lý file có th : o T o file. o Xóa file. o C p nh t m u tin trong file. o L y m t m u tin t m t file. Thành ph n qu n lý vùng m (Buffer Manager): có trách nhi m chuy n d li u t ĩa lưu tr vào b nh chính theo yêu c u c a chương trình. 2. B x lý truy v n (Query Processor) Th c hi n câu truy v n nh n ư c t ngư i dùng qua các giai o n phân tích (parser), t i ưu hóa câu h i (query optimizer), l p k ho ch th c hi n (plan executor) và th c hi n tính toán (operator evaluator).
  • 7. Bài gi ng tóm t t H qu n tr cơ s d li u 5 Chương 2 XÂY D NG, QU N LÝ VÀ KHAI THÁC CƠ S D LI U I. Khái ni m cơ s d li u • m c logic, m t cơ s d li u (CSDL) g m: − Các b ng (tables) ch a d li u có c u trúc và các ràng bu c (constraint) nh nghĩa trên các b ng. − Các khung nhìn (view). − Các th t c/ hàm. − Các vai trò (role) và ngư i dùng (user). − … • m c lưu tr v t lý, m t database c a SQL Server ư c lưu tr b i 3 lo i t p tin: − T p tin d li u (data file) g m có: 1 t p tin d li u chính (primary data file), thư ng có ph n m r ng “mdf”: ch a các d li u kh i u c a database. 0-n t p tin d li u th c p (secondary data file), thư ng có ph n m r ng “ndf”: ch a các d li u không lưu tr h t trong t p tin d li u chính. − T p tin nh t ký giao tác (transaction log file) g m có 1-n t p tin nh t ký, thư ng có ph n m r ng “ldf”: ch a các thông tin v nh t ký giao tác, dùng ph c h i database sau khi x y ra s c . II. T o cơ s d li u 1. Cú pháp l nh t o CSDL Create Database database_name [ On [Primary] { file_spec [,…n] } ] [ Log on { file_spec [,…n] } ] v i file_spec :: = ( Name = logical_file_name, Filename = 'os_file_name '
  • 8. Bài gi ng tóm t t H qu n tr cơ s d li u 6 [ , Size = size ] [ , Maxsize = { max_size | Unlimited } ] [ , Filegrowth = growth_increment ] ) M c nh, các t p tin d li u và log ư c lưu trong thư m c MSSQL Data c a thư m c cài t SQL Server. Ví d • Ví d 1: t o CSDL QLSinhVien theo các quy nh m c nh c a SQL Server Create Database QLSinhVien • Ví d 2: t o CSDL QLSinhVien v i khai báo tên file logic, thư m c lưu t p tin d li u chính, kích thư c, … Create Database QLSinhVien On ( Name = QLSV_Data Filename = ‘C: ... QLSV_Data.mdf ’, Size = 1, Filegrowth = 10% ) • Ví d 3 Create Database QLSinhVien On ( Name = QLSV_Data1, Filename = ‘C: ... QLSV_Data.mdf ’, Size = 1, Maxsize = 10 MB, Filegrowth = 1 MB ) , ( Name = QLSV_Data2 , Filename = ‘C:...QLSV_Data1.ndf’ ) Log on ( Name = QLSV_Log, Filename = ‘D:...QLSV_Log.ldf’) 2. Xoá m t CSDL ã t n t i Drop Database database_name 3. Thay i m t CSDL Alter Database database_name …. Dùng : – Thêm/xoá/thay i các t p tin. – Thay i các tùy ch n cho CSDL. III. Ki u d li u SQL Server cung c p các ki u d li u: 1. S – S nguyên: bit, tinyint, smallint, int, bigint.
  • 9. Bài gi ng tóm t t H qu n tr cơ s d li u 7 – S th c Floating point: o float(n) o real = float(24) Fixed point o Decimal(p,s) o Numeric(p,s) 2. Chu i char(n): chu i có dài c nh. nchar(n): chu i (theo mã Unicode) có dài c nh. varchar(n): chu i có dài thay i. nvarchar(n): chu i (theo mã Unicode) có dài thay i. text: ki u d li u cho phép ch a chu i có kích thư c hơn 8KB. ntext: ki u d li u cho phép ch a chu i (theo mã Unicode) có kích thư c hơn 8KB. 3. Ngày gi Datetime. Smalldatetime 4. Ki u ngư i dùng t nh nghĩa a. nh nghĩa m t ki u d li u: sp_addtype type_name, system_type [, ‘null_type’][, ‘owner’] Ví d : nh nghĩa ki u d li u Code là ki u chu i g m 10 ký t cho phép tr ng Exec sp_addtype Code, char(10), ‘NULL’ b. Xóa m t ki u d li u ngư i dùng nh nghĩa: sp_droptype ‘type_name’ IV. T o và qu n lý b ng 1. T o b ng – Xác nh các c t (các thu c tính) c a b ng. – Xác nh khóa chính. – Xác nh các thu c tính null/ not null. – Xác nh thu c tính identity (n u có) (ph i là ki u s nguyên). Lưu ý: – Luôn t o khóa chính cho m t b ng. – Ràng bu c khóa ngo i nên ư c t o sau khi ã t o xong t t c các b ng liên quan. a. Cú pháp l nh t o b ng
  • 10. Bài gi ng tóm t t H qu n tr cơ s d li u 8 Create table Table_name ( { Column_name Data_type [null | not null] [default default_value ] [identity [( seed, increment)] ] } [,…n] [, constraint constraint_name primary key ( Column_name [,…n] ) ] ) Ví d : T o b ng h c sinh có khóa chính là (STT, Lop) Create table HOCSINH ( STT tinyint not null, Lop char(5) not null default ‘11A1’ , HoTen nvarchar(30) not null, NgaySinh datetime not null, DiaChi nvarchar(100), constraint pk_HS primary key (STT, Lop) ) b. Thay i c u trúc b ng / xóa b ng Thay i c u trúc b ng là th c hi n: – Thêm/ xoá/ c p nh t ki u d li u c a m t c t (column). – Thêm/ xoá/ ki m tra/ không ki m tra ràng bu c (constraint). – Cho phép/ không cho phép trigger ho t ng. Cú pháp: Alter table <tên_b ng> … Xóa b ng: xoá d li u và c u trúc c a b ng Cú pháp: Drop table <tên_b ng> Ví d − Thêm thu c tính DanToc vào b ng HOCSINH: Alter table HOCSINH Add DanToc nvarchar(20) null default ‘Kinh’ − S a ki u d li u c a thu c tính NgaySinh thành ki u SmallDatetime: Alter table HOCSINH Alter column NgaySinh SmallDatetime not null 2. Qu n lý b ng − Các tên b ng, tên ràng bu c không ư c trùng nhau trong cùng m t database.
  • 11. Bài gi ng tóm t t H qu n tr cơ s d li u 9 − Tên các c t trong cùng m t b ng không ư c trùng nhau. − Thông tin v các b ng, các ràng bu c ư c lưu trong b ng h th ng sysobjects Ví d : c thông tin v các b ng trong database hi n hành: Select * from sysobjects where type = ‘U’ − M t s th t c SQL Server cung c p qu n lý b ng và c u trúc b ng: o sp_databases o sp_tables [‘table_name’] [, ‘owner’][,‘database_name’][, “ ‘type’ ”] Ví d : Exec sp_tables null, null, null, “ ‘TABLE’ ” o sp_help [object_name] sp_help cho bi t các thông tin v i tư ng b t kỳ trong database ( i tư ng có ch a trong sysobjects). Ví d : Exec sp_help HOCSINH o sp_columns object [, owner] [, database] [,column] o sp_helpconstraint ‘table_name’ o … 3. Cài t ràng bu c toàn v n ơn gi n SQL Server cung c p s n cơ ch ki m tra các lo i ràng bu c toàn v n (RBTV) sau: o Khóa chính (primary key constraint). o Khóa ngo i (foreign key constraint). o Giá tr duy nh t (unique constraint). o Check constraint (Ki m tra ràng bu c mi n giá tr ). Có th khai báo ràng bu c trong lúc t o b ng ho c khi b ng ã t n t i. Thông thư ng nên khai báo ràng bu c toàn v n trư c khi nh p d li u. a. Khai báo ràng bu c trong lúc t o b ng Cú pháp: Create table Table_name ( … [, constraint Constraint_name { primary key (Column_name [,…n]) | unique ( Column_name [,…n]) | check ( logical_expression ) } ] […n] ) Ví d
  • 12. Bài gi ng tóm t t H qu n tr cơ s d li u 10 Create table SinhVien ( MaSV char(10) not null, HoTen nvarchar(30) not null, Nam tinyint, CMND char(10), Khoa char(5), constraint pk_SV primary key (MaSV), constraint u_CMND unique (CMND), constraint chk_Nam check (Nam > 0 and Nam <= 4) ) b. Khai báo ràng bu c trên b ng ã t n t i Cú pháp: Alter table table_name [with check| with nocheck] Add { constraint constraint_name { primary key ( column_name [,…n] ) | unique ( column_name [,…n] ) | check ( logical_expression ) | foreign key ( column_name [,…n] ) references ref_table ( ref_column [,…n] ) [ on delete {cascade| no action} ] [ on update {cascade| no action} ] } [,…n] Ví d /* gi s ã t n t i b ng KHOA( MaKhoa, …) */ Alter table SINHVIEN with check add constraint u_CMND unique (CMND), constraint chk_Nam check (Nam in (1, 2, 3, 4) ), constraint fk_SV_maKhoa foreign key (Khoa), references KHOA(MaKhoa) c. Ki m tra / không ki m tra ràng bu c Cú pháp: Alter table Table_name {Check| Nocheck} constraint { All | constraint_name [,…n] } Ví d : alter table SINHVIEN nocheck constraint u_CMND, chk_Nam d. Xoá ràng bu c Cú pháp:
  • 13. Bài gi ng tóm t t H qu n tr cơ s d li u 11 Alter table table_name Drop { [constraint ] constraint_name } [,…n] Ví d : Alter table SINHVIEN drop constraint u_CMND, chk_Nam e. Rule − Rule là m t qui nh chung ư c t o ra trong m t CSDL. − M t rule có th ư c áp d ng cho nhi u thu c tính c a nhi u b ng khác nhau, ho c cho các ki u d li u ngư i dùng nh nghĩa trong database. T o rule Cú pháp: Create rule rule_name as logical_expression (trong ó “logical_expression” ph i ch a m t bi n. Bi n này tương ng v i i tư ng s ư c áp d ng rule). Ví d : create rule r_SoDuong as @value >0 K t bu c/ g k t bu c rule K t bu c rule: dùng th t c: sp_bindrule ‘rule_name’, ‘object’, [ ‘futureonly’ ] trong ó: Tùy ch n futureonly ch dùng khi k t bu c rule v i ki u d li u ngư i dùng nh nghĩa, có nghĩa các c t thu c ki u d li u này trư c ó không b nh hư ng b i rule. Ví d : sp_bindrule ‘r_SoDuong’, ‘SinhVien.Nam’ Rule m i k t bu c s ng m g rule cũ trên i tư ng. G k t bu c sp_unbindrule ‘object’, [ ‘futureonly’ ] Ví d : sp_unbindrule ‘SinhVien.Nam’ Xoá rule Cú pháp: Drop rule {rule_name} [,…n] Lưu ý: Ch xóa ư c rule khi nó không còn k t bu c v i i tư ng nào. V. Các thao tác trên d li u Chú ý khi thêm/ xóa/ c p nh t d li u:
  • 14. Bài gi ng tóm t t H qu n tr cơ s d li u 12 – D li u nh p ph i phù h p v i ki u d li u. – m b o các ràng bu c toàn v n. – nh d ng giá tr ki u chu i unicode, ki u datetime. – Nh p giá tr r ng (Null). 1. Các d ng l nh insert − Thêm t ng dòng d li u vào b ng Insert [into] Table_name[ (column_name[,…n] )] values ( value [,…n] ) − Thêm 0-n dòng d li u t b ng khác/ t k t qu c a m t câu truy v n Insert [into] Table_name Select_statement Lưu ý: trong câu select, ta có th c d li u t các b ng trong database khác. Khi ó, tên b ng ư c vi t y như sau: Database_name.Owner.Table_name Ví d : select * from QLSinhVien.dbo.SinhVien 2. L nh c p nh t d li u update table_name set column_name_1= value1,…, column_name_m= value_m [where conditional_expression] 3. L nh xoá d li u delete [from] table_name [where conditional_expression] VI. Truy v n d li u 1. Câu truy v n t ng quát Cú pháp t ng quát c a câu truy v n d li u: SELECT [tính ch t] <danh sách các thu c tính_1> FROM <danh sách các table ho c query/view [as alias] > [WHERE < i u ki n_1>] [GROUP BY <danh sách các thu c tính_2>] [HAVING < i u ki n_2>] [ORDER BY <danh sách các thu c tính_3> [ASC | DESC]] trong ó: − Tính ch t là m t trong các t khóa: ALL (ch n ra t t c các dòng trong b ng), DISTINCT (lo i b các dòng trùng l p thông tin), TOP <n> (ch n n dòng u tiên th a mãn i u ki n).
  • 15. Bài gi ng tóm t t H qu n tr cơ s d li u 13 − Danh sách các thu c tính_1: tên các thu c tính cho bi t thông tin c n l y. Chú ý: Các thu c tính cách nhau b i d u ‘,’. N u l y t t c các thu c tính c a 1 b ng R thì dùng: R.* N u sau FROM ch có 1 b ng và l y t t c các c t c a b ng ó thì dùng select *. N u t n t i 1 thu c tính sau select xu t hi n 2 b ng sau FROM thì ph i ch nh rõ thu c tính ó thu c b ng nào. − Danh sách các table/query/view: các b ng, câu truy v n, ho c khung nhìn ch a thông tin c n l y. Khi tìm ki m thông tin trên nhi u hơn 2 b ng/truy v n thì ph i k t các b ng l i v i nhau (có th t i u ki n k t t sau where ho c t trong m nh From… join/ left join/ right join/full join … on …). − Alias: bí danh (tên t t) c a b ng dùng cho các b ng có tên quá dài, ho c m t b ng ư c dùng nhi u l n trong m nh from c a câu truy v n. − i u ki n_1: là i u ki n l c d li u (ch n các b tho i u ki n). − danh sách các thu c tính_2: d li u s ư c gom nhóm theo các c t này, ưu tiên tính t trái sang. − i u ki n_2: i u ki n l c các nhóm theo m t tiêu chí i di n cho c nhóm. − danh sách các thu c tính_3:s p x p d li u theo c t nào, th t là tăng (ASC) ho c gi m (DESC). M c nh là d li u ư c s p theo th t tăng d n. Vi c s p x p ư c th c hi n theo th t ưu tiên t trái qua ph i. Lưu ý: N u câu truy v n không có m nh Group By thì cũng không có m nh Having. N u câu truy v n có ch a m nh Group By thì Danh sách các thu c tính_1 ch ch a các thu c tính ho c bi u th c liên quan n các thu c tính trong danh sách các thu c tính_2 và các hàm g p (max, min, avg, sum, count). 2. Các hàm thư ng dùng − Các hàm g p (Aggregate functions): max, min, sum, avg, count − Các hàm th i gian. − Các hàm toán h c. − Các hàm x lý chu i. − …. (Sinh viên có th tra c u theo t khóa trong Books Online).
  • 16. Bài gi ng tóm t t H qu n tr cơ s d li u 14 VII. T o và s d ng khung nhìn (View) 1. Khái ni m khung nhìn: Khung nhìn (View) là m t b ng o, có c u trúc như m t b ng, khung nhìn không lưu tr d li u mà d li u c a nó ư c t o ra khi s d ng, khung nhìn là i tư ng thu c CSDL. Khung nhìn ư c t o ra t câu l nh truy v n d li u (l nh Select), truy v n t m t ho c nhi u b ng d li u. 2. S d ng khung nhìn o Khung nhìn ư c s d ng khai thác d li u như m t b ng d li u, có th ư c chia s b i nhi u ngư i dùng, an toàn trong khai thác. o Có th th c hi n truy v n d li u trên c u trúc c a khung nhìn. o Các khung nhìn ư c t o t nhi u b ng ho c trong khung nhìn có ch a t khóa DISTINCT, hàm g p, m nh group by u không cho phép c p nh t d li u t khung nhìn vào các b ng g c trong cơ s d li u. Cú pháp t o khung nhìn: Create View view_name As Select_statement VIII. T o và s d ng ch m c (Index) Ch m c (Index) là m t ph n quan tr ng i v i CSDL, c bi t là cơ s d li u l n. Ch m c ư c thi t l p t m t ho c nhi u c t d li u c a b ng d li u. Các giá tr c a Ch m c s ư c s p x p và lưu tr theo m t danh sách (b ng khác). M i giá tr ch m c là duy nh t trong danh sách và nó s liên k t n giá tr trong b ng d li u (liên k t d ng con tr ). Vi c lưu tr d li u c a b ng có khóa ch m c ư c th c hi n theo c u trúc B-Cây nh m tăng t c truy xu t d li u i v i ĩa (thi t b th c p). Khi tìm ki m m t giá tr trong c t d li u, mà c t này tham gia t o Ch m c, u tiên câu l nh xác nh v trí c a giá tr n m trong Ch m c b ng phép duy t cây, sau ó th c hi n tìm theo liên k t n b n ghi ch a giá tr tương ng v i khóa trong b ng. 1. L a ch n ch m c • Không có ch m c, h qu n tr CSDL th c hi n truy v n b ng cách duy t qua t ng dòng trong b ng. • Cài t các ch m c cho b ng giúp truy v n thông tin nhanh hơn (tìm ki m trên B-Cây). • Khóa chính và các ràng bu c unique hi n nhiên là các ch m c c a b ng. • Cơ s ch n cài t ch m c: d a vào các nhu c u truy v n th c hi n thư ng xuyên trên CSDL.
  • 17. Bài gi ng tóm t t H qu n tr cơ s d li u 15 • Nên cài t ch m c cho các trư ng h p sau: – Trư ng h p 1: Có nhu c u truy v n thư ng xuyên các b c a b ng Q theo m t s (t p) thu c tính nào ó. Ví d : GiaoDich(MãGD, …,NgàyGD): Có nhu c u truy xu t thư ng xuyên các b c a giao d ch trong m t ngày ho c trong m t kho ng th i gian nh t nh: cài t ch m c trên thu c tính NgayGD c a quan h GiaoDich. – Trư ng h p 2: t p thu c tính tham gia vào phép k t c a m t câu truy v n x y ra thư ng xuyên. Ví d : cho 2 lư c quan h : HocSinh(STT, Lop, HoTen,…) KetQua(STT, Lop, Mon, Diem) Thư ng xuyên có nhu c u truy v n: cho bi t k t qu h c t p c a m t h c sinh. Câu l nh truy v n như sau: select hs.STT, hs.Lop, hs.HoTen, kq.Mon, kq.Diem from HocSinh hs join KetQua kq on hs.STT = kq.STT and hs.Lop = kq.Lop Cài t ch m c (STT, Lop) cho quan h KetQua T ng quát: trên mô hình quan h , xác nh các con ư ng truy xu t thư ng xuyên: T m t b c a Q1(m t giá tr c th a c a A) có nhu c u truy xu t thư ng xuyên các b c a Q2 tương ng (tìm ki m các b c a Q2 v i A = a): khai báo ch m c (A) cho Q2. Lưu ý: m t ch m c (AB) khác v i hai ch m c (A) và (B). 2. Các lo i ch m c Có hai lo i ch m c: – Clustered index – Nonclustered index Clustered index: • D li u th t s ư c s p x p v t lý theo ch m c (th t s n m nút lá c a cây). • M i b ng ch có th có m t clustered ch m c, thư ng là khóa chính.
  • 18. Bài gi ng tóm t t H qu n tr cơ s d li u 16 Nonclustered index: • Ch m c logic, d li u th t s không ư c s p x p v t lý theo ch m c. • Nút lá là con tr tr n v trí c a b d li u, ho c tr n giá tr c a clustered ch m c (trong trư ng h p b ng có clustered index). – Không có clustered index: – Có clustered index
  • 19. Bài gi ng tóm t t H qu n tr cơ s d li u 17 • M t s cân nh c khi ch n ch m c: – S d ng nhi u ch m c tăng t c truy v n, nhưng làm gi m hi u qu c a các thao tác thêm/xoá/c p nh t d li u. – Không nên t o ch m c trên các b ng quá nh (vài trăm dòng). – Ch nên ch n ch m c mà m i giá tr c a nó tương ng v i m t s ít b . N u m i giá tr ch m c ng v i trên 20% s lư ng b trong b ng, th c hi n truy v n bình thư ng b ng cách duy t qua các dòng trong b ng s hi u qu hơn. – Các giá tr ch m c ph i phân b u các b trong b ng. – C g ng dùng các ch m c v i s thu c tính ít (chi m ít không gian và c n ít chi phí duy trì hơn ch m c v i s thu c tính l n). – Clustered index ph i nh (s thu c tính ít, kích thư c nh ), vì các ch m c nonclustered u ph i g n k t t i nó. 3. Cài t ch m c v i SQL Server M t s qui nh: 1. M t b ng có t i a 249 nonclustered ch m c (bao g m c nh ng ch m c ng m nh khi khai báo khóa chính và ch m c). 2. Kích thư c t i a c a m t ch m c (t ng kích thư c các thu c tính tham gia vào ch m c) không quá 900 bytes. 3. M c nh: ch m c clustered ư c khai báo ng m nh cùng v i khai báo khóa chính, các trư ng h p khác là nonclustered (t t nhiên có th ch nh khác i). Cú pháp khai báo ch m c: Create [ Unique ][ Cluster| Nonclustered] Ch m c ch m c_name
  • 20. Bài gi ng tóm t t H qu n tr cơ s d li u 18 On {table | view } (column [ Asc | Desc] [ ,...n ]) Ví d : Create nonclustered ch m c idx_STTHS_Lop On KETQUA (STTHS, Lop) Cú pháp xóa ch m c: Drop Ch m c table_name (ch m c_name) Ví d : Drop Ch m c KETQUA(idx_STTHS_Lop) IX. Chuy n i d li u v i các ng d ng khác (xem các tài li u hư ng d n th c hành SQL Server kèm theo)
  • 21. Bài gi ng tóm t t H qu n tr cơ s d li u 19 Chương 3 T-SQL NÂNG CAO I. Khai báo và s d ng bi n 1. Bi n c c b − Là m t i tư ng có th ch a giá tr thu c m t ki u d li u nh t nh, tên bi n b t u b ng m t ký t @. – Bi n c c b có giá tr trong m t query batch ho c trong m t th t c thư ng trú (stored procedure) ho c hàm (function). – Khai báo bi n c c b b ng l nh declare: cung c p tên bi n và ki u d li u: Declare tên_bi n Ki u_d _li u Ví d : Declare @MaSinhVien char(10) Declare @HoTen nvarchar(30) Declare @Sum float, @Count int – gán giá tr cho m t bi n c c b dùng l nh set. Giá tr gán cho bi n ph i phù h p v i ki u d li u c a bi n. Set tên_bi n = giá_tr Set tên_bi n = tên_bi n Set tên_bi n = bi u_th c Set tên_bi n = k t_qu _truy_v n Ví d : Set @MaLop = ‘TH2001’ Set @SoSV = (select count (*) from SinhVien) Set @MaLop = ‘TH’+Year(@NgayTuyenSinh) ưa k t qu truy v n vào bi n: SV(MaSV: int; HoTen: nvarchar(30), Tuoi int) Select @Var1 = HoTen, @Var1 = Tuoi from SV where MaSV = 1 Lưu ý: n u câu truy v n tr v nhi u dòng, các bi n ch nh n giá tr tương ng c a dòng u tiên. 2. Bi n toàn c c – Là các bi n h th ng do SQL Server cung c p, tên bi n b t u b ng 2 ký t @ – SQL t c p nh t giá tr cho các bi n này, ngư i s d ng không th gán giá tr tr c ti p. − M t s bi n h th ng thu ng dùng o @@error: thông báo mã l i, n u @@error = 0: thao tác th c hi n thành công.
  • 22. Bài gi ng tóm t t H qu n tr cơ s d li u 20 o @@rowcount: cho bi t s dòng b nh hư ng b i l nh cu i (insert, update, delete). o @@trancount: cho bi t s giao d ch ang ho t ng trên k t n i hi n t i. o @fetch_status: cho bi t thao tác l y d li u t cursor có thành công không. II. C u trúc i u khi n 1. L nh If…else − Ch c năng: xét i u ki n quy t nh nh ng l nh T-SQL nào s ư c th c hi n − Cú pháp: If bi u_th c_ i u ki n L nh| Kh i_l nh [Else L nh| Kh i_l nh] Kh i l nh là m t ho c nhi u l nh n m trong c p t khóa begin…end Ví d : xét 2 lư c quan h (L QH) HocPhan(MaHP, TenHP, SiSo) DangKy(MaSV, MaHP) Vi t l nh thêm m t ăng ký m i cho sinh viên có mã s 001 vào h c ph n HP01 (gi s h c ph n này ã t n t i trong b ng HocPhan). L i gi i như sau: Declare @SiSo int select @SiSo = SiSo from HocPhan where MaHP= ‘HP01’ if @SiSo < 50 Begin insert into DANG_KY(MaSV, MaHP) values(‘001’, ’HP01’) print N’ ăng ký thành công’ End Else print N’H c ph n ã SV’ 2. L nh While − Ch c năng: th c hi n l p l i m t o n l nh T-SQL khi i u ki n còn úng. − Cú pháp:
  • 23. Bài gi ng tóm t t H qu n tr cơ s d li u 21 While bi u_th c_ i u_ki n L nh| Kh i l nh – Có th s d ng Break và Continue trong kh i l nh c a while Break: thoát kh i vòng while hi n hành. Continue : tr l i u vòng while, b qua các l nh sau ó. Ví d : xét lư c quan h SinhVien(MaSV: int, HoTen: nvarchar(30)) Vi t l nh xác nh m t mã sinh viên m i theo qui nh: mã sinh viên tăng d n, n u có ch tr ng thì mã m i xác nh s chèn vào ch tr ng ó. Ch ng h n, n u trong b ng sinhvien ã có các mã sinh viên 1, 2, 3, 7 mã sinh viên m i là 4. Gi i: Declare @STT int Set @STT = 1 While exists(select * from SV where MaSV = @STT) set @STT = @STT+1 Insert into SV(MaSV, HoTen) values(@STT, ‘Nguyen Van A’) 3. L nh Case − Ch c năng: ki m tra m t dãy các i u ki n và tr v k t qu phù h p v i i u ki n úng. L nh case ư c s d ng như m t hàm trong câu select. − Cú pháp: Có hai d ng: D ng 1 (simple case): Case Bi u_th c_ u_vào When Giá_tr then k t_qu [...n] [ Else k t_qu _khác] End D ng 2 (searched case): Case When bi u_th c_ i u ki n then k t_qu [...n] [ Else k t_qu _khác] End Ví d : xét L QH NHAN_VIEN(MaNV, HoTen, NgaySinh, CapBac,Phai)
  • 24. Bài gi ng tóm t t H qu n tr cơ s d li u 22 Cho bi t nh ng nhân viên n tu i ngh hưu bi t r ng tu i v hưu c a nam là 60, c a n là 55). Gi i: select * from NHAN_VIEN where datediff(yy, NgaySinh, getdate()) > = Case Phai when ‘Nam’ then 60 when ‘Nu’ then 55 End Cho bi t mã NV, h tên và lo i nhân viên (c p b c <=3:bình thư ng, c p b c = null: chưa x p lo i, còn l i: c p cao). Gi i: Select MaNV, HoTen, ‘Loai’ = Case when CapBac<=3 then ‘Binh Thuong’ when CapBac is null then ‘Chua xep loai’ else ‘Cap Cao’ End From NhanVien III. Th t c thư ng trú (Stored Procedures) 1. Khái ni m Th t c thư ng trú (Stored Procedures - SP) ch a các l nh T_SQL. Tương t như m t th t c trong các ngôn ng l p trình, SP trong SQL Server có th truy n tham s , có tính tái s d ng. Các th t c này ư c d ch và lưu tr thành m t i tư ng trong CSDL. Ý nghĩa: − Tính tái s d ng, tính uy n chuy n nh h th ng tham s . − Khi biên d ch SP, các l nh trong c a nó ư c t i ưu hóa nó sao cho th c thi hi u qu nh t. K t qu t i ưu hóa ư c lưu b n v ng. Khi g i th c thi th t c không c n biên d ch và t i ưu hóa l i l i g i th t c ti t ki m th i gian và tài nguyên hơn kh i l nh tương ương thân th t c. − Trong ng d ng tri n khai theo môi trư ng client/server, client g i l i g i SP lên server thì chi m ư ng truy n ít hơn r t nhi u l n so v i vi c g i kh i l nh tương ương trong thân th t c Gi m kh i lư ng thông tin trao i khi ng d ng g i yêu c u th c hi n công vi c v cho server do ó tránh ngh n ư ng truy n, gi m trì tr .
  • 25. Bài gi ng tóm t t H qu n tr cơ s d li u 23 − óng gói ch các thao tác cho phép trên CSDL vào các SP và quy nh truy xu t d li u ph i thông qua SP. Ngoài ra còn có th phân quy n trên SP H tr t t hơn cho vi c m b o an toàn (security) cho CSDL. − SP giúp cho vi c k t xu t báo bi u b ng Crystal Report tr nên ơn gi n và hi u qu hơn r t nhi u so v i vi c k t xu t d li u tr c ti p t các b ng và khung nhìn. 2. Khai báo và s d ng th t c Cú pháp khai báo: Create {proc | procedure} procedure_name {Parameter_name DataType [=default] [output] }[,…n] As { kh i l nh } Go Lưu ý: Tên tham s t theo qui t c như tên bi n c c b . Giá tr tr v c a SP dùng m t (hay m t s ) tham s output. Ví d : − Xây d ng SP cho bi t danh sách sinh viên c a m t l p có mã cho trư c Create proc DS_Lop @MaLop varchar(10) As Select SV.MaSV, SV.HoVaTen, SV.NgaySinh From SinhVien SV where SV.Lop = @MaLop Go − Xây d ng SP tính toán giá tr cho ơn hàng có mã cho trư c v i quan h DonHang như sau: DonHang(Ma, SoLuong, DonGia, ThueSuat, ChietKhau, ThanhTien) Create proc TongTien @MaDH varchar(10) As Declare @ThanhTien float Declare @TienThue float Declare @TienChietKhau float Declare @DonGia float,@SoLuong int Set @SoLuong = (select SoLuong from DonHang where Ma = @MaDH)
  • 26. Bài gi ng tóm t t H qu n tr cơ s d li u 24 Set @DonGia = (select DonGia from DonHang where Ma = @MaDH) Set @TienThue = (select ThueSuat from DonHang where Ma = @MaDH) Set @TienChietKhau = (select ChietKhau from DonHang where Ma = @MaDH) Set @ThanhTien = @DonGia*@SoLuong Set @TienThue = @ThanhTien*@TienThue/100 Set @ThanhTien = @ThanhTien + @TienThue Set @TienChietKhau = @ThanhTien*@TienChietKhau/100 Set @ThanhTien = @ThanhTien - @TienChietKhau Update DonHang set ThanhTien = @ThanhTien where Ma = @MaDH Go − Vi t th t c thêm m t ăng ký c a sinh viên vào m t h c ph n (t ng quát ví d trong ph n If …else) Create procedure usp_ThemDangKy @MaSV char(5), @MaHP char(5), @SiSo int = 0 output As select @SiSo = SiSo from HocPhan where MaHP= @MaHP if @SiSo < 50 Begin insert into DANG_KY(MaSV, MaHP) values(@MaSV, @MaHP) set @SiSo = @SiSo+1 return 1 End return 0 Go - Xây d ng SP tính i m trung bình và x p lo i cho sinh viên thu c l p cho trư c. Gi s có các quan h như sau: SinhVien (MaSV, HoTen, DTB, XepLoai, Lop) MonHoc (MaMH, TenMH) KetQua (MaMH, MaSV, LanThi, Diem) trong ó:
  • 27. Bài gi ng tóm t t H qu n tr cơ s d li u 25 − i m thi ch tính l n thi sau cùng. − X p lo i: Xu t s c [9, 10], Gi i [8, 8.9], Khá [7, 7.9], Trung bình [5.0, 6.9], Y u [0,4.9]. − K t qu xu t d ng tham s output, không ghi xu ng CSDL. Gi i Create proc XepLoaiSV @MaSV varchar(10), @DTB float out put, @XL nvarchar(20) out put As Set @DTB = (Select avg(Diem) from KetQua Kq Where MaSV = @MaSV and not exists (select * from KetQua Kq1 where Kq1.MaSV = @MaSV and Kq1.MaMH=Kq.MaMH and Kq1.LanThi > Kq.LanThi)) If @DTB >= 9 Set @XL = N’Xu t s c’ Else if @DTB >= 8 Set @XL = N’Gi i’ Else if @DTB >= 7 Set @XL = N’Khá’ Else if @DTB >= 5 Set @XL = N’Trung bình’ Else Set @XL = N’Y u’ Go Cú pháp g i th c hi n th t c: EXEC| EXECUTE { [ @return_status = ] procedure_name { [ @parameter _name = ] value [ OUTPUT ] } [ ,...n ] Lưu ý: o Khi g i th c hi n SP, dùng t khóa Exec và c n truy n tham s v i ki u d li u phù h p và th t chính xác như khai báo trong nh nghĩa SP. o Có th truy n giá tr cho tham s u vào (input) là m t h ng ho c m t bi n ã gán giá tr , không truy n ư c m t bi u th c. o nh n ư c giá tr k t qu (thông qua tham s u ra), c n truy n vào m t bi n và có t khóa output. Ví d : o G i th t c usp_ThemDangKy:
  • 28. Bài gi ng tóm t t H qu n tr cơ s d li u 26 Exec usp_ThemDangKy ‘001’, ’HP01’ ho c Exec usp_ThemDangKy @MaHP = ‘HP01’, @MaSV = ‘001’ o G i th t c usp_ThemDangKy có nh n k t qu u ra: Declare @SiSo int Exec usp_ThemDangKy ‘001’,’HP01’, @SiSo output Print @SiSo o G i th t c usp_ThemDangKy có nh n k t qu u ra và k t qu tr v t th t c: Declare @SiSo int, @KetQua int Exec @KetQua = usp_ThemDangKy ‘001’,’HP01’, @SiSo output o G i th c hi n th t c x p lo i sinh viên: Declare@MaSinhVien varchar(10) Declare@DiemTB varchar(10) Declare@XepLoai varchar(10) Set@MaSinhVien = ‘0712345’ Exec XepLoaiSV @MaSinhVien,@DiemTB out put,@XepLoai out put Exec XepLoaiSV ‘0713478’, @DiemTB out put,@XepLoai out put S a th t c Thay t khóa Create trong l nh t o th t c b ng t khóa Alter. Xóa th t c Drop {procedure|proc} procedure_name Ví d : Drop procedure usp_ThemDangKy 3. Stored procedure h th ng − Là nh ng th t c do SQL Server cung c p s n th c hi n các công vi c: qu n lý CSDL, qu n lý ngư i dùng, c u hình CSDL,… − Các th t c này có tên b t u b ng “sp_” Khi xây d ng th t c, tránh t tên th t c b t u v i “sp_”. IV. Ki u d li u cursor 1. Khái ni m Cursor - Là m t c u trúc d li u ánh x n m t t p các dòng d li u k t qu c a m t câu truy v n (select).
  • 29. Bài gi ng tóm t t H qu n tr cơ s d li u 27 - Cho phép duy t tu n t qua t p các dòng d li u và c giá tr t ng dòng. - Th hi n c a cursor là 1 bi n, nhưng tên bi n này không b t u b ng ’@’. - V trí hi n hành c a cursor có th ư c dùng như i u ki n trong m nh where c a l nh update ho c delete: cho phép c p nh t/xoá d li u (d li u th t s trong CSDL) tương ng v i v trí hi n hành c a cursor. 2. Khai báo và s d ng Cursor Khai báo Cursor Có th s d ng cú pháp chu n SQL 92 ho c cú pháp T_SQL m r ng. − Cú pháp SQL 92 chu n: Declare cursor_name [Insensitive] [Scroll] Cursor For select_statement [ For {Read only| Update [of column_name [,…n] ] }] − Cú pháp T_SQL m r ng Declare cursor_name Cursor [ Local | Global ] [ Forward_only| Scroll] [ Static| Dynamic] [ Read_only] For select_statement [ For Update [ of column_name [,…n] ] ] Lưu ý: Tên cursor trong các cách khai báo không b t u b ng ký t “@”. Ý nghĩa các tham s tùy ch n trong khai báo: o Insensitive/ static: n i dung c a cursor không thay i trong su t th i gian t n t i, trong trư ng h p này cursor ch là read only. o Dynamic: trong th i gian t n t i, n i dung c a cursor có th thay i n u d li u trong các b ng liên quan có thay i. o Local: cursor c c b , ch có th s d ng trong ph m vi m t kh i (query batch) ho c m t th t c/ hàm. o Global: cursor toàn c c, có th s d ng trong m t th t c/hàm hay m t query batch b t kỳ ho c n khi b h y m t cách tư ng minh. o Forward_only: cursor ch có th duy t m t chi u t u n cu i. o Scroll: có th duy t lên xu ng cursor tùy ý (duy t theo a chi u).
  • 30. Bài gi ng tóm t t H qu n tr cơ s d li u 28 o Read only: ch có th c t cursor, không th s d ng cursor update d li u trong các b ng liên quan (ngư c l i v i “for update…” ). M c nh khi khai báo cursor n u không ch ra các tùy ch n thì cursor có các tính ch t: - Global - Forward_only - Read only hay “for update” tùy thu c vào câu truy v n - Dynamic Duy t cursor Dùng l nh Fetch duy t tu n t qua cursor theo cú pháp: Fetch [ [Next| Prior| First| Last| Absolute n| Relative n] From ] Tên_cursor [Into Tên_bi n [,…n] ] −M c nh: fetch next. − i v i cursor d ng forward_only, ch có th fetch next. − Bi n h th ng @@fetch_status cho bi t l nh fetch v a th c hi n có thành công hay không, giá tr c a bi n này cơ s bi t ã duy t n cu i cursor hay chưa. Quy trình s d ng Cursor − Khai báo cursor. − “M ” cursor b ng l nh Open Open tên_cursor − Khai báo các bi n t m ch a ph n t hi n hành ( ang ư c x lý) c a cursor: Các bi n t m ph i cùng ki u d li u v i các trư ng tương ng c a ph n t trong cursor. Có n trư ng trong ph n t c a cursor thì ph i có n bi n t m tương ng. − Fetch (next,…) cursor chuy n n v trí phù h p: Có th ưa các giá tr c a dòng hi n hành vào các bi n thông qua m nh into c a l nh fetch. N u không có m nh into, các giá tr c a dòng hi n hành s ư c hi n th ra c a s k t qu (result pane) sau l nh fetch. Có th s d ng v trí hi n t i như là i u ki n cho m nh where c a câu delete/ update (n u cursor không là read_only).
  • 31. Bài gi ng tóm t t H qu n tr cơ s d li u 29 − L p l i vi c duy t và s d ng cursor, có th s d ng bi n @@fetch_status bi t ã duy t qua h t cursor hay chưa. @@FETCH_STATUS = 0 : l y d li u thành công, @@FETCH_STATUS < 0 : không l y ư c d li u. − óng cursor b ng l nh Close Close Tên_cursor Lưu ý: Sau khi óng, v n có th m l i n u cursor chưa b h y. − H y cursor b ng l nh deallocate Deallocate Tên_cursor Ví d : xét hai L QH SINHVIEN (MaSV, HoTen, MaKhoa) KHOA(MaKhoa, TenKhoa) Duy t và c giá tr t cursor C p nh t l i giá tr MaSV = Vi t t t tên Khoa + MaSV hi n t i cho t t c sinh viên: declare cur_DSKhoa cursor for select MaKhoa, TenKhoa from Khoa open cur_DSKhoa declare @MaKhoa int, @TenKhoa varchar(30), @TenTat varchar(5) fetch next from cur_DSKhoa into @MaKhoa, @TenKhoa while @@fetch_status = 0 begin -- xác nh tên t t c a Khoa d a vào @TenKhoa… update SinhVien set MaSV = @TenTat+MaSV Where MaKhoa = @MaKhoa fetch next from cur_DSKhoa into @MaKhoa, @TenKhoa end Close cur_DSKhoa Deallocate cur_DSKhoa Dùng cursor xác nh dòng c p nh t
  • 32. Bài gi ng tóm t t H qu n tr cơ s d li u 30 declare cur_DSKhoa cursor scroll for select MaKhoa, TenKhoa from Khoa open cur_DSKhoa fetch absolute 2 from cur_DSKhoa if (@@fetch_status = 0) update Khoa set TenKhoa = ‘aaa’ where current of cur_DSKhoa Close cur_DSKhoa Deallocate cur_DSKhoa 3. Bi n cursor − Ta có th khai báo m t bi n ki u cursor và gán cho nó tham chi u n m t cursor ang t n t i. − Bi n cursor có th ư c xem như là con tr cursor. − Bi n cursor là m t bi n c c b . − Bi n cursor sau khi gán giá tr ư c s d ng như m t cursor thông thư ng. Ví d : Declare @cur_var cursor set @cur_var = my_cur -- my_cur là m t cursor ang t n t i ho c: Declare @cur_var cursor set @cur_var = cursor for select_statement K t h p cursor v i stored procedure Xây d ng SP tính i m trung bình và x p lo i cho sinh viên thu c l p cho trư c. Gi s có các quan h như sau: SinhVien (MaSV, HoTen, DTB, XepLoai, Lop) MonHoc (MaMH, TenMH) KetQua (MaMH, MaSV, LanThi, Diem) Bi t r ng i m thi ch tính l n thi sau cùng X p lo i: Xu t s c [9, 10], Gi i [8, 8.9], Khá [7, 7.9], Trung bình [5.0, 6.9], Y u [0, 4.9]. K t qu ghi xu ng CSDL, ng th i xu t ra t ng s sinh viên x p lo i gi i c a l p ó. • Phân tích ví d :
  • 33. Bài gi ng tóm t t H qu n tr cơ s d li u 31 o L p c n xét có nhi u sinh viên, t ng sinh viên c n ư c x lý thông qua 3 bư c: Tính i m trung bình cho sinh viên, i m trung bình ph i là i m c a l n thi sau cùng. Có th tái s d ng th t c XepLoaiSVLop. D a vào i m trung bình c a sinh viên xác nh x p lo i. C p nh t i m và x p lo i vào b ng sinh viên. o M i sinh viên u l p l i 3 bư c trên. T phân tích trên ta th y: C n x lý nhi u ph n t (các sinh viên). M i ph n t x lý tương i ph c t p (truy v n, tính toán, g i th t c khác, i u ki n r nhánh, c p nh t d li u, …). Cách x lý các ph n t là như nhau. ⇒ S d ng cursor là thích h p Cursor ch a các sinh viên c a l p c n xét, ch c n ch a mã sinh viên là ư c. • Xây d ng th t c Create procedure XepLoaiSVLop @Lop nvarchar(10), @SoSVGioi int out As Declare @DTB float Declare @XepLoai nvarchar(20) Declare @MaSV nvarchar(10) Declare cur_SV cursor For (select MaSV from SinhVien where Lop=@Lop) Open cur_SV Fetch Next from cur_SV into @MaSV While @@FETCH_STATUS = 0 Begin Exec XepLoaiSV @MaSV, @DTB output, @XepLoai output Update SinhVien set DTB = @DTB, XepLoai=@XepLoai Where MaSV = @MaSV Fetch Next from cur_SV into @MaSV End Close cur_SV Deallocate cur_SV
  • 34. Bài gi ng tóm t t H qu n tr cơ s d li u 32 Set @SoSVGioi = (select count(*) from sinhvien where lop = @Lop and XepLoai = N’Gi i’) Go V. Hàm ngư i dùng (User Defined Functions) 1. Khái ni m hàm ngư i dùng • Gi ng stored procedure: − mã l nh có th tái s d ng. − Ch p nh n các tham s input. − Biên d ch m t l n và t ó có th g i khi c n. • Khác stored procedure: − Ch p nh n nhi u ki u giá tr tr v (ch m t giá tr tr v ). − Không ch p nh n tham s output. − Khác v cách g i th c hi n. • Có th xem hàm ngư i dùng thu c v 3 lo i tùy theo giá tr tr v c a nó: − Giá tr tr v là ki u d li u cơ s (int, varchar, float, datetime…). − Giá tr tr v là Table có ư c t m t câu truy v n. − Giá tr tr v là table mà d li u có ư c nh tích lũy d n sau m t chu i thao tác x lý và insert. 2. Khai báo và s d ng Khai báo hàm ngư i dùng Lo i 1: Giá tr tr v là ki u d li u cơ s Create function func_name ( {parameter_name DataType [= default ] } [,…n]) returns DataType As Begin … Return {value | variable | expression} End Ví d :
  • 35. Bài gi ng tóm t t H qu n tr cơ s d li u 33 Create function SoLonNhat (@a int,@b int,@c int) return int As Begin declare @max int set @max = @a if @b > max set @max = @b if @c > max set @max = @c return @max End Lo i 2: Giá tr tr v là m t b ng có ư c t m t câu truy v n Create function func_name ( {parameter_name DataType [= default ] } [,…n]) returns Table As Return [ ( ]select_statement [ ) ] Go Ví d : Vi t hàm in danh sách các m t hàng c a m t mã ơn hàng cho trư c Create function DanhSachMatHang ( @MaDonHang varchar(10) ) returns Table As Return (Select MH.TenHang,MH.DonGia From ChiTietDH CT, MatHang MH Where CT.MaDH = @MaDonHang and CT.MaMH = MH.MaMH) Go Lo i 3: Giá tr tr v là m t b ng mà d li u có ư c nh tích lũy d n sau m t chu i thao tác x lý và insert.
  • 36. Bài gi ng tóm t t H qu n tr cơ s d li u 34 Create function func_name ( {parameter_name DataType [= default ] } [,…n]) returns TempTab_name Table(Table_definition) As Begin … Return End Go Ví d : Create function DanhSachLop () returns @DS Table(@MaLop varchar(10),@SoSV int) As --các x lý insert d li u vào b ng DS return Go Lưu ý: Trong thân hàm không ư c s d ng các hàm h th ng b t nh (Built-in nondeterministic functions ), bao g m : − GETDATE − GETUTCDATE − NEWID − RAND − TEXTPTR − @@TOTAL_ERRORS, @@CPU_BUSY, @@TOTAL_READ, @@IDLE, @@TOTAL_WRITE, @@CONNECTIONS … S d ng hàm ngư i dùng Các hàm ngư i dùng ư c s d ng trong câu truy v n, trong bi u th c… phù h p ki u d li u tr v c a nó. Ví d : − Select dbo.SoLonNhat(3,5,7) − Select * from DanhSachLop() Lưu ý: − N u dùng giá tr m c nh c a tham s , ph i dùng t khóa default.
  • 37. Bài gi ng tóm t t H qu n tr cơ s d li u 35 − Khi g i hàm lo i 1 (tr v giá tr cơ b n), ph i có tên owner c a hàm i kèm (ví d dbo.SoLonNhat(5,8,-10)). Thay i hàm ngư i dùng Thay t khóa create trong các l nh t o hàm b ng t khóa alter Xóa hàm ngư i dùng Drop function tên_hàm_c n _xóa Ví d : Drop function DanhSachMatHang 3. Các hàm h th ng Ngoài các hàm do ngư i dùng nh nghĩa, SQL Server còn cung c p các hàm xây d ng s n c a h th ng. Các hàm này cung c p ti n ích như x lý chu i, x lý th i gian, x lý s h c… Sinh viên tìm hi u thêm v các hàm này trong Books on-line và các tài li u tham kh o. • t o hàm h th ng c n ti n hành theo các bư c sau: T o hàm trong cơ s d li u Master Tên hàm b t u b i fn_functionName Thay i ch nhân c a hàm b ng th t c sp_changeobjectowner như sau: EXEC sp_changeobjectowner ‘fn_ functionName’ , ‘system_function_schema’ Ví d : T o hàm h th ng th c chuy n i m t bi n ki u ngày tháng sang ki u chu i. --T o hàm fn_doingay create function fn_doingay(@ngay datetime) returns char(10) as begin return convert(nchar(10),@ngay,103) end --Thay i ch nhân c a hàm EXEC sp_changeobjectowner 'fn_doingay' , 'system_function_schema' Sau l nh này hàm fn_doingay có th dùng ư c cho CSDL b t kỳ. Select manv, hoten, fn_doingay(ngaysinh) From nhanvien VI. Triggers và cài t ràng bu c d li u 1. Gi i thi u • Trigger là m t lo i stored procedure c bi t có các c i m sau:
  • 38. Bài gi ng tóm t t H qu n tr cơ s d li u 36 − T ng th c hi n khi có thao tác insert, delete ho c update trên d li u. − Thư ng dùng ki m tra các ràng bu c toàn v n c a CSDL ho c các qui t c nghi p v . − M t trigger ư c nh nghĩa trên m t b ng, nhưng các x lý trong trigger có th s d ng nhi u b ng khác. • X lý c a trigger thư ng c n s d ng n hai b ng t m: − Inserted: ch a các dòng v a m i ư c thao tác insert/ update thêm vào b ng. − Deleted: ch a các dòng v a m i b xóa kh i b ng b i thao tác update/delete. Lưu ý: update = delete dòng ch a giá tr cũ + insert dòng ch a giá tr m i − Inserted và deleted là các b ng trong b nh chính: C c b cho m i trigger. Có c u trúc gi ng như b ng (table) mà trigger nh nghĩa trên ó Ch t n t i trong th i gian trigger ang x lý. − N u thao tác insert/ delete/ update th c hi n trên nhi u dòng, trigger cũng ch ư c g i m t l n B ng inserted/ deleted có th ch a nhi u dòng. 2. S d ng Trigger Khai báo trigger − Cú pháp: Create trigger tên_trigger On {tên_b ng|tên_view} {For| After| Instead of } { [delete] [,] [insert] [,] [update] } As { các l nh T-sql } Go rong ó: For | After: − Trigger ư c g i th c hi n sau khi thao tác delete/ insert/ update tương ng ã ư c th c hi n thành công: Các dòng m i ư c thêm ch a ng th i trong b ng d li u và b ng inserted. Các dòng b xoá ch n m trong b ng deleted ( ã b xoá kh i b ng d li u). − Có th x lý quay lui thao tác ã th c hi n b ng l nh rollback transaction. Instead of: − Trigger ư c g i th c hi n thay cho thao tác delete/ insert/ update tương ng:
  • 39. Bài gi ng tóm t t H qu n tr cơ s d li u 37 Các dòng m i ư c thêm ch ch a trong b ng inserted. Các dòng b ch nh xoá n m ng th i trong b ng deleted và b ng d li u (d li u không b xoá). − Trigger Instead of thư ng ư c dùng x lý c p nh t trên khung nhìn. Lưu ý: − L nh t o trigger ph i là l nh u tiên trong m t query batch. − Trên m t b ng có th nh nghĩa nhi u trigger for/after cho m i thao tác nhưng ch có th nh nghĩa m t trigger instead of cho m i thao tác. − Không th nh nghĩa trigger instead of update/ delete trên b ng có cài t khóa ngo i d ng update cascade/ delete cascade. − Trong thân trigger, có th s d ng hàm Update(tên_c t) ki m tra xem vi c c p nh t ư c th c hi n trên c t nào. Update(tên_c t) = true : có th c hi n c p nh t trên c t tên_c t S d ng trigger cài t m t s lo i ràng bu c Ví d 1- Ràng bu c liên thu c tính – liên quan h Cho CSDL: DatHang(MaPDH, NgayDH,…) GiaoHang(MaPGH, MaPDH, NgayGH,…) Ràng bu c: Ngày giao hàng không th nh hơn ngày t hàng tương ng B ng t m nh hư ng: Thêm Xóa S a DatHang - - + (NgayDH) GiaoHang + - + (NgayGH, MaPDH) C n cài t trigger cho thao tác s a trên b ng DatHang, và thêm/s a trên b ng Giaohang Trigger cho thao tác thêm và s a trên giao hàng: Create trigger tr_GH_ins_upd_NgayGH On GIAOHANG for insert, update As if update(MaPDH) or update (NgayGH) if exists(select * from inserted i, DatHang d where i.MaPDH = d.MaPDH
  • 40. Bài gi ng tóm t t H qu n tr cơ s d li u 38 and i.NgayGH<d.NgayDH) begin raiserror (N‘Ngày GH không th nh hơn ngày H’,0,1) rollback tran end go Bài t p: Trigger cho thao tác s a trên t hàng. Ví d 2 – Ràng bu c toàn v n liên b Xét L QH: KetQua(MASV, MAMH, LANTHI, DIEM) T o trigger ki m tra RBTV: “Sinh viên ch ư c thi t i a 2 l n cho m t môn h c” • Xác nh b ng t m nh hư ng: Insert Delete Update KetQua + - + (MASV, MAMH) • Cài t trigger d a trên b ng t m nh hư ng: -- Tao trigger ung voi thao tac insert tren bang KetQua Create trigger trg_KetQua_insert on KetQua for insert as declare @SoLanThi int select @SoLanThi=count(*) from KetQua K, inserted I where I.MaSV=K.MaSV and I.MaMH = K.MaMH if @SoLanThi > 2 begin raiserror('So lan thi phai <= 2', 0,1) rollback transaction end Bài t p: T o trigger ng v i thao tac Update trên b ng KetQua. Ví d 3: Trigger cho vi c th c hi n m t thao tác c p nh t d li u nào ó. Cho quan h CHI_TIET_HOA_DON(MaHD,STT, MaMH, SoLuong, DonGia, ThanhTien).
  • 41. Bài gi ng tóm t t H qu n tr cơ s d li u 39 • Vi t trigger th c hi n c p nh t giá tr c a ThanhTien khi thêm m t chi ti t hóa ơn
  • 42. Bài gi ng tóm t t H qu n tr cơ s d li u 40 Chương 4 B O M T VÀ AN TOÀN D LI U I. B o m t trong h qu n tr cơ s d li u 1. Khái ni m cơ b n v b o m t Nh m b o v h th ng CSDL không b xâm nh p, ngư i qu n tr cơ s d li u ph i quy t nh cho phép hay không cho phép ngư i dùng truy c p và thao tác trên cơ s d li u d a vào nhi m v c a ngư i dùng trên h CSDL. Ngư i qu n tr thư ng d a trên n n t ng lý thuy t b o m t c a h cơ s d li u a ngư i dùng, nh m tìm ra phương pháp b o m t theo úng v i nhu c u c a b o m t d li u. V i m c ích tăng tính b o m t d li u, SQL Server h tr các tính năng cho phép ngư i qu n tr thi t l p cơ ch b o v cơ s d li u trong môi trư ng a ngư i dùng, bao g m các y u t chính sau: o Vai trò c a ngư i dùng trong h th ng và cơ s d li u. o Quy n s d ng các ng d ng cơ s d li u trong SQL Server. o Quy n t o và s a i c u trúc các i tư ng CSDL. o Quy n truy c p, x lý d li u. Khi ăng nh p vào m t h th ng CSDL a ngư i dùng, ngư i s d ng c n ph i cung c p UserID (tài kho n) và Password (m t kh u). D a trên UserID h th ng có kh năng ki m soát t t c các hành vi c a ngư i s d ng trên CSDL SQL Server. th c hi n ư c ch c năng này, ngư i qu n tr CSDL c n ph i thi t l p các quy n x lý và truy c p vào CSDL khi t o ra UserID, ngoài ra còn có m t s thu c tính khác c a SQL Server như quy n backup d li u, trao i d li u v i các ng d ng CSDL khác, … Khi nói n b o m t, ngư i qu n tr c n quan tâm n các thông tin sau c a ngư i dùng: o M t ngư i dùng ch có m t UserID và m t m t kh u. o Th i gian có hi u l c c a m t kh u. o Gi i h n chi u dài c a m t kh u. o Gi i h n ngư i s d ng theo license hay m r ng. o Thông tin v ngư i s d ng. Khi t o ngư i s d ng, tên tài kho n c n rõ ràng, d hi u d g i nh , và không cho phép các ký t c bi t, không nên có kho ng tr ng. 2. L a ch n b o m t
  • 43. Bài gi ng tóm t t H qu n tr cơ s d li u 41 Khi t o ra m t ngư i dùng (login user) trong SQL Server, có 3 cách tăng tính b o m t cho ngư i s d ng ó: o Giao ti p v i h i u hành: s d ng UserID và Password c a h i u hành Windows ăng nh p SQL Server. V i lo i b o m t này, ngư i dùng truy c p vào m ng và có th s d ng CSDL SQL Server, ng th i m t ngư i dùng có UserID và Password có th s d ng tài nguyên trên m ng. o B o m t chu n: v i lo i này, ngư i s d ng có UserID và Password tách r i v i h i u hành m ng, ng v i lo i b o m t này ngư i s d ng ch có hi u l c trong CSDL SQL Server, không th s d ng tài nguyên trên m ng. o T ng h p c hai trư ng h p trên: m t s ngư i dùng s d ng quy n s d ng trên h i u hành và SQL Server, m t s khác ch s d ng quy n truy c p vào SQL Server. Lưu ý: Tài kho n ngư i dùng có giá tr trên SQL Server hi n hành, khi sang m t SQL Server khác ph i t o ra tài kho n ngư i dùng trên server ó. o SQL Server cung c p các ch c năng hay các th t c t o m i và qu n tr ngư i dùng CSDL SQL Server như sau: S d ng th t c sp_addlogin. S d ng công c Enterprise Manager. • S d ng th t c sp_addlogin Cú pháp sp_addlogin [ @loginame = ] 'login' [ , [ @passwd = ] 'password' ] [ , [ @defdb = ] 'database' ] [ , [ @deflanguage = ] 'language' ] [ , [ @sid = ] sid ] [ , [ @encryptopt = ] 'encryption_option' ] trong ó các tham s có ý nghĩa như sau: @loginame: tên tài kho n s t o. @passwd: m t kh u cho ngư i dùng có tài kho n trên. @defdb: cơ s d li u m c nh khi ngư i dùng ăng nh p vào SQL Server. @deflanguage: ngôn ng m c nhiên cho ngư i dùng SQL Server. @sid: s nh n d ng h th ng khi ngư i dùng ăng nh p vào. @encryptopt: khi t o tài kho n ngư i dùng trong CSDL, các thông tin v tài kho n, m t kh u ư c lưu tr trong b ng sysusers c a CSDL Master, n u b n cung c p tham s skip_enctription thì không mã hoá m t kh u trư c khi lưu vào b ng sysusers, n u không cung c p tham s hay tr ng, SQL Server s mã hoá m t kh u trư c khi lưu tr .
  • 44. Bài gi ng tóm t t H qu n tr cơ s d li u 42 Ví d : t o ngư i dùng có tên ‘nam’, m t kh u ‘123’, cơ s d li u m c nh ‘QLKyNang’ Exec sp_addlogin ‘nam’, ‘123’, ‘QLKyNang’ - Thay i m t kh u sp_password [[ @old = ] 'old_password' ,] { [ @new =] 'new_password' } [ , [ @loginame = ] 'login' ] 3. Quy n ngư i dùng và qu n tr quy n ngư i dùng Quy n c a ngư i dùng ư c nh nghĩa như m c ngư i dùng có th hay không th th c thi trên CSDL, quy n ư c chia thành 4 lo i như sau: o Quy n truy c p vào SQL Server. o Quy n truy xu t vào CSDL. o Quy n th c hi n trên các i tư ng c a CSDL. o Quy n x lý d li u. C p phát quy n truy c p vào CSDL Cú pháp: Use db_name Go sp_grantdbaccess [@loginame =] 'login' [,[@name_in_db =] 'name_in_db' [OUTPUT]] Các tham s : @loginame: tài kho n c a ngư i s d ng ăng nh p vào SQL Server @name_in_db: t o bí danh (tên khác) c a tài kho n ngư i dùng khi truy c p vào CSDL db_name ư c ch nh, n u không ch rõ CSDL mu n cho phép ngư i dùng truy c p thì ngư i dùng ư c c p quy n trên CSDL hi n hành. Lo i b quy n truy c p vào CSDL db_name c a ngư i dùng Use db_name Go sp_revokedbaccess [@loginame =] 'login' C p phát quy n th c thi trên cơ s d li u Sau khi c p phát quy n cho ngư i dùng truy c p vào CSDL, k ti p cho phép ngư i dùng ó có quy n truy c p và x lý các i tư ng trong CSDL cũng như x lý d li u trên các i tư ng ó. Các quy n truy c p trên các i tư ng trong m t CSDL:
  • 45. Bài gi ng tóm t t H qu n tr cơ s d li u 43 Quy n Di n gi i SELECT Cho phép ngư i s d ng nhìn th y d li u, n u ngư i s d ng có quy n này thì h ch có th th c thi nh ng phát bi u select truy v n d li u trên các b ng hay các view ư c cho phép. INSERT Cho phép ngư i s d ng thêm d li u, n u ngư i s d ng có quy n này, h có th th c hi n phát bi u Insert, i v i m t s h th ng CSDL khác, mu n th c thi phát bi u Insert, ngư i s d ng ph i có quy n Select, trong SQL Server quy n Insert không liên quan n quy n truy v n Select. UPDATE Quy n này cho phép ngư i s d ng ch nh s a d li u b ng phát bi u Update. DELETE Quy n này cho phép ngư i s d ng xóa d li u b ng phát bi u Delete. REFERENCE Cho phép ngư i s d ng thêm d li u vào b ng có khóa ngo i b ng phát bi u Insert, trong SQL Server quy n Insert không liên quan n quy n truy v n Select. EXECUTE Quy n này cho phép ngư i s d ng th c thi các th t c (SP) trong CSDL. Th t c c p quy n GRANT GRANT ALL | < PERMISSION> [, …n] ON <table ho c view name> [(<column name> [, … n])] | <stored ho c extension procedure name> TO <login or role name> [, … n] [WITH GRANT OPTION] [AS <role name>] Trong ó: t khóa ALL cho phép ngư i s d ng có t t c các quy n. PERMISSION là m t trong các quy n: SELECT, INSERT, UPDATE, DELETE, REFERENCE, EXECUTE. Ch rõ nh ng b ng d li u, view ho c th t c nào cho phép ngư i dùng truy c p và x lý. T ch i quy n truy v n và x lý d li u DENY ALL | < PERMISSION> [, …n] ON <table ho c view name> [(<column name> [, … n])] | <stored ho c extension procedure name>
  • 46. Bài gi ng tóm t t H qu n tr cơ s d li u 44 TO <login or role name> [, … n] [Cascade] Lo i b quy n truy v n và x lý d li u REVOKE [ GRANT OPTION FOR ] { ALL [ PRIVILEGES ] | permission [ ,...n ] } { [ ( column [ ,...n ] ) ] ON { table | view } | ON { table | view } [ ( column [ ,...n ] ) ] | ON { stored_procedure | extended_procedure } | ON { user_defined_function } } { TO | FROM } security_account [ ,...n ] [ CASCADE ] [ AS { group | role } ] Quy n t o i tư ng trong CSDL Trong CSDL có m t s i tư ng và các ch c năng như sao lưu d li u mà m i ngư i s d ng trên CSDL tùy theo ch c năng và nhi m v c th ư c phép hay không ư c phép t o các i tư ng như table, view, stored procedure, … và t o CSDL. Các quy n t o các i tư ng như sau: Create Database. Create Table. Create View. Create Procedure. Create Rule. Create Default. Backup Database. Backup Log. phân quy n t o i tư ng trong CSDL cho ngư i dùng, trong SQL Server có th s d ng th t c GRANT như sau: GRANT < ALL | Statement [, … n]> TO <login ID> [, … n]
  • 47. Bài gi ng tóm t t H qu n tr cơ s d li u 45 4. Vai trò c a ngư i s d ng trong SQL Server và cơ s d li u Vai trò trên SQL Server: Vai trò (Role) Di n gi i sysadmin Có các quy n tương ương v i sa. serveradmin C u hình m t s tham s và t t server. setupadmin B gi i h n b t m t s ch c năng liên k t server và kh i ng m t s th t c. securityadmin Qu n lý ngư i dùng và t o CSDL. processadmin ư c phép d ng các giao tác ang th c hi n trên CSDL và m t s quá trình th c hi n khác c a SQL Server. dbcreator ư c phép t o CSDL. Diskadmin Qu n lý các t p tin liên quan n CSDL SQL Server. Vai trò trên CSDL: Vai trò Di n gi i V i vai trò này, ngư i s d ng (NSD) thu c nhóm s h u db_owner CSDL m i có th truy c p vào CSDL. db_accessadmin Th c hi n các ch c năng gi ng như securityadmin. NSD ư c phép select trên các b ng d li u c a các ngư i db_datareader dùng khác trong CSDL. NSD ư c phép insert, update, delete trên các b ng d li u db_datawriter c a các ngư i dùng khác trong CSDL. db_ddladmin NSD có th thêm hay ch nh s a các i tư ng c a CSDL. db_securityadmin NSD có quy n tương ương v i quy n c a securityadmin. db_backupoperator NSD có th th c hi n ch c năng backup d li u. db_denydareader Không cho phép s d ng phát bi u SELECT trên t t c các b ng d li u c a CSDL. db_denydawriter Không cho phép s d ng phát bi u INSERT, UPDATE, DELETE trên t t c các b ng d li u c a CSDL. S d ng các th t c h th ng t o m t role m i, thêm m t ngư i dùng vào m t role, lo i b ngư i s d ng ra kh i m t role. o T o m t role sp_addrole [ @rolename = ] 'role_name' [ , [ @ownername = ] 'owner' ] Trong ó:
  • 48. Bài gi ng tóm t t H qu n tr cơ s d li u 46 @rolename: tên role m i @ownername: ch s h u c a role m i, m c nh là dbo Sau khi t o role m i c n ph i gán m t s quy n truy c p và x lý trên các b ng d li u nào ó trong CSDL cho role m i ó. o Thêm ngư i s d ng vào Role sp_addrolemember [ @rolename = ] 'role_name' , [ @membername = ] ‘login_ID' o Lo i b ngư i s d ng ra kh i m t role sp_droprolemember [ @rolename = ] 'role_name' , [ @membername = ] 'login_ID ' II. B n sao d li u Ph n này s gi i thi u k thu t làm gi m lưu lư ng d li u giao d ch v i SQL Server khi ã c u hình nhi u Server trên m ng. 1. Gi i thi u v nhân b n d li u Nhân b n d li u (Replication) là công c ư c s d ng sao chép m t ho c nhi u CSDL n m t ho c nhi u server (SQL Server) khác. Các Server ư c t trong m ng máy tính n i b (LAN). Ngư i khai thác có th th c hi n truy c p n CSDL có trong Server ch a d li u ư c nhân b n. D li u gi a các máy ư c th c hi n ng b v i nhau theo l ch ho c theo s ki n, khi có yêu c u. Nhân b n d li u có nh ng ưu i m sau: − D li u ư c lưu tr nhi u nơi, hi u qu trong vi c có nhi u ng d ng cùng truy c p, khai thác. − Thích h p v i các ng d ng phân tích d li u c a h th ng x lý giao d ch tr c tuy n (OLTP) trong kho d li u (Data warehouse). − Có th khai thác d li u khi không k t n i n Server. − Gi m thi u xung t do s lư ng l n các giao d ch trên m ng. − Là m t gi i pháp an toàn khi Server b l i ho c b o dư ng. Mô hình nhân b n. D ch v nhân b n d li u g m các thành ph n cơ b n sau: Publisher, Distributor, Subscribers, Publications, Articles, Subscriptions. − Publisher: là server cung c p d li u nhân b n cho các server khác. M t publisher có th thi t l p nhi u b d li u nhân b n (g i là publication).
  • 49. Bài gi ng tóm t t H qu n tr cơ s d li u 47 − Distributor: là server qu n lý các thông tin nhân b n, lưu tr d li u trong các giao d ch th c hi n nh n và chuy n d li u t Publisher n các Subscriber. Remote distributor là server tách r i kh i publisher và ư c c u hình là distributor. Local distributor là m t server ư c c u hình là Publisher và Distributor. − Subscriber: Là server nh n d li u nhân b n. Subscriber g n li n v i publication (là máy ch nh n d li u nhân b n c a m t b d li u c u hình nhân b n). − Article: Là m t b ng, t p d li u ho c i tư ng c a CSDL c u hình nhân b n. − Publication: Là m t t p g m m t ho c nhi u article. − Subscription: Là m t giao d ch yêu c u b n sao b d li u ho c các i tư ng c a CSDL th c hi n nhân b n. Trong m i giao d ch publisher th c hi n y (push subscription) d li u, subscriber th c hi n kéo (pull subscription). Nhân b n d li u ư c th c hi n theo nh ng mô hình cơ b n sau: − Central Publisher: Là mô hình Publisher và Distributor thi t l p trên m t máy. G m các mô hình sau: M t Publisher và m t Subscriber:
  • 50. Bài gi ng tóm t t H qu n tr cơ s d li u 48 M t Publisher và nhi u Subscriber. Publisher và Subscriber ư c thi t l p trên m t máy: − Publisher và Distributor không thi t l p trên m t máy: − Republisher: Là mô hình Publisher xu t b n d li u n Subscriber, sau ó Subscriber ư c thi t l p là Publisher xu t b n d li u n Subscriber khác.
  • 51. Bài gi ng tóm t t H qu n tr cơ s d li u 49 ư ng truy n gi a hai máy ư c thi t l p là Publisher có th t c th p, phù h p v i v trí xa nhau. Ví d mô hình gi a các vùng cách xa nhau: + Central Subscriber: Là mô hình Subscriber thi t l p nh n d li u xu t b n t nhi u Publisher.
  • 52. Bài gi ng tóm t t H qu n tr cơ s d li u 50 Nh ng ki u nhân b n d li u. Có 3 ki u nhân b n d li u: Snaphot, Transaction, Merge. Snapshot replication: là ki u nhân b n th c hi n sao chép, phân tán d li u ho c các i tư ng c a CSDL t i m t th i i m. Snapshot thư ng ư c s d ng cho nh ng tình hu ng sau: D li u thư ng là tĩnh, ít thay i. Nhân b n s lư ng d li u nh . Transaction replication: là ki u nhân b n mà b t u b ng nhân b n Snapshot, sau ó s th c hi n nhân giao d ch d li u theo các s ki n insert, update, delete và nh ng thay i liên quan n th c hi n th t c, khung nhìn ch m c. Nhân b n ki u này cho phép th c hi n l c d li u t i Publisher, cho phép ngư i s d ng s a i d li u nhân b n t i
  • 53. Bài gi ng tóm t t H qu n tr cơ s d li u 51 subscriber và chuy n d li u ã s a i n Publisher ho c Subscriber khác, d li u s a i này có th coi là d li u ư c xu t b n. Nhân b n ki u này ư c th c hi n khi: Mu n s a i d li u ư c xu t b n chuy n n Subscriber, th i gian th c hi n theo giây, ho c t c th i. C n giao d ch trên toàn b h th ng nhân b n d li u (d li u có th chuy n nt t c các Subscriber ho c không chuy n n Subscriber nào). Subscriber thư ng xuyên k t n i v i Publisher. Merge replication: là ki u nhân b n d li u cho phép th c hi n nhân b n s a i d li u trên nhi u Subscriber, có th k t n i (online) ho c không k t n i (offline) n Publisher. D li u s ư c ng b theo l ch ho c theo yêu c u, d li u c p nh t có th i i m sau s ư c ch p nh n. Ki u nhân b n này th c hi n khi: Nhi u Subscriber có nhu c u c p nh t d li u và chuy n d li u c p nh t n Publisher ho c Subscriber khác. Subscriber yêu c u nh n ho c chuy n d li u khi offline, ng b d li u v i các Subscriber và Publisher sau.
  • 54. Bài gi ng tóm t t H qu n tr cơ s d li u 52 2. C u hình Publisher và Distributor. Trư c khi th c hi n c u hình các máy thành Publisher hay Distributor ta ph i th c hi n ch y d ch v SQL Server Agent trong ch c năng Service manager. Các bư c c u hình như sau: - Ch n Server c n c u hình -> Replication - Nh p ph i chu t -> Configure Publishing Subscription and Distribution... - Th c hi n theo các bư c: + Ch n thư m c Snapshot
  • 55. Bài gi ng tóm t t H qu n tr cơ s d li u 53 - t tên CSDL c a Distribution. - Ch n Server c u hình thành Publisher.
  • 56. Bài gi ng tóm t t H qu n tr cơ s d li u 54 - Ch n CSDL tham gia nhân b n, ki u nhân b n. - Ch n Server ư c c u hình là Subscriber c a Publisher ang thi t l p. - K t thúc. T o Publication Bư c này s th c hi n t o Publication, cách th c hi n như sau: + Ch n Publication trong Replication c a Publisher. + Nh n ph i chu t → ch n New Publication...
  • 57. Bài gi ng tóm t t H qu n tr cơ s d li u 55 + Th c hi n theo các bư c: - Ch n CSDL c n xu t b n d li u ho c i tư ng. - Ch n ki u nhân b n (trong ví d này th c hi n ki u Merge). - Ch n phiên b n SQL Server c a Subscriber. - Ch n Article tham gia Publication.
  • 58. Bài gi ng tóm t t H qu n tr cơ s d li u 56 - t tên cho Publication. - K t thúc. T o Push Subscription. Bư c này th c hi n t o th t c y (push) t Publisher (Distributor trong ví d này) n Subscriber, ư c th c hi n trên Publisher. Các bư c th c hi n như sau:
  • 59. Bài gi ng tóm t t H qu n tr cơ s d li u 57 - Ch n Publication c a Publisher -> Nh n ph i chu t -> Push new Subscription... - Ch n Subscriber. - Ch n CSDL trên Subscriber n u ã có, n u chưa có th c hi n ch n ch c năng t o m i. - Ch n l ch th c hi n ng b d li u. - K t thúc. Sau khi thi t l p xong trên Subscriber s có CSDL theo tên ã t o. T o Pull Subscription
  • 60. Bài gi ng tóm t t H qu n tr cơ s d li u 58 Bư c này th c hi n t o công c kéo d li u nhân b n t Publisher v Subscriber, ư c th c hi n trên Subscriber. - Ch n Subscription c a Subscriber → Nh n ph i chu t → New Pull Supcription... - Th c hi n theo các bư c: + Ch n Publication. + Ch n Agent tham gia k t n i Publisher. - Ch n CSDL ích.
  • 61. Bài gi ng tóm t t H qu n tr cơ s d li u 59 - Th c hi n ti p các bư c và k t thúc. N u ã t o Push Subscription v i m t CSDL s không ư c t o Pull Subscription v i CSDL ó. Th c hi n ng b d li u Sau khi thi t l p theo các mô hình nhân b n xong, có th th c hi n ng b d li u b ng cách: - Th c hi n theo l ch. - Theo yêu c u: Ch n Subscription (Push ho c Pull) → Nh n ph i chu t → Start Synchronizing. Sau khi th c hi n xong d li u s ư c ng b gi a Publisher và Subscriber. Ngoài th c hi n theo công c ta có th tìm hi u th c hi n nhân b n theo câu l nh T-SQL ho c Stored Procedure. III. Sao lưu và khôi ph c d li u 1. Lý do ph i sao lưu và khôi ph c d li u Trong quá trình th c hi n qu n tr CSDL SQL Server thì m t s nguyên nhân sau ây b t bu c b n ph i xem xét n k thu t sao lưu và khôi ph c d li u: ĩa b h ng (ch a các t p tin CSDL). Server b h ng. Nguyên nhân bên ngoài (thiên nhiên, h a ho n, m t c p,...). User vô tình xóa d li u. B vô tình hay c ý làm thông tin sai l ch. B hack. 2. Các lo i sao lưu d li u Sao lưu (Backup) d li u trong SQL Server g m các lo i sau: Full Database Backups: sao chép toàn b CSDL (các t p tin bao g m các b ng, khung nhìn, các i tư ng khác). Differential Database Backups: sao chép nh ng d li u thay i trong Data file k t l n full backup g n nh t. File or file group backups: sao chép m t file ơn hay file group. Differential File or File Group Backups: th c hi n như Differential Database nhưng copy ph n d li u thay i c a file ơn ho c file group. Transaction log backups: Ghi nh n t t c các transaction ch a trong transaction log file k t l n transaction log backup g n nh t. V i lo i sao lưu này ta có th khôi ph c d li u t i m t th i i m. 3. Các mô hình khôi ph c d li u
  • 62. Bài gi ng tóm t t H qu n tr cơ s d li u 60 Full Recovery model: Là mô hình ph c h i toàn b ho t ng giao d ch c a d li u (Insert, Update, Delete, ho t ng b i l nh bcp, bulk insert). V i mô hình này ta có th ph c h i d li u t i m t th i i m trong quá kh ã ư c lưu trong transaction log file. Bulk-Logged Recovery Model: Mô hình này ư c th c thi cho các thao tác bcp, bulk insert, create ch m c, writetext, updatetext, các ho t ng này ch nh t ký s ki n vào log bi t mà không sao lưu toàn b d li u, chi ti t như trong full recover. Các s ki n Insert, Update, Delete v n ư c nh t ký và khôi ph c bình thư ng. Simple Recovery Model: V i mô hình này b n ch ph c h i l i th i i m sao lưu g n nh t mà không theo th i i m khác trong quá kh . Cách t mô hình khôi ph c: - Ch n CSDL. - Nh n nút ph i chu t → Properties → Options → Recovery → ch n Model. Xét ví d sau: Gi s ta có m t CSDL ư c backup theo chi n lư c như hình v bên dư i Nhìn hình ta th y CSDL ư c l p l ch Full Database Backup vào ngày ch nh t, Differential Database Backup vào ngày th ba và th năm, còn Log Database Backup vào 5 ngày trong tu n, ngày th sáu có s c v i CSDL, data file b h ng. V n t ra là ph i ph c h i d li u và CSDL ho t ng bình thư ng. Ta ph i làm các bư c sau: Th c hi n Backup log file (gi s log file không b h ng). Khôi ph c Full Database c a ngày ch nh t. Ph c h i Differential Database c a ngày th năm. Khôi ph c Transaction log backup ngày th năm.
  • 63. Bài gi ng tóm t t H qu n tr cơ s d li u 61 4. Sao lưu cơ s d li u (Backup Database) Trư c khi xem xét k thu t sao lưu CSDL, ta th ng nh t m t s thu t ng b ng ti ng Anh như sau: Backup: Là quá trình copy toàn b ho c m t ph n database, transaction log, file, file group thành l p m t backup set ư c ch a trong backup media (disk ho c tape) b ng cách s d ng m t backup device (tape drive name ho c physical filename). Backup Device: M t file v t lý ho c m t drive tape. Backup file: M t file ch a Backup set. Backup media: là Disk ho c tape. Backup set: M t b backup m t l n backup ơn ch a trên backup media. Các bư c th c hi n backup như sau: − Ch n CSDL c n backup. − Nh n ph i chu t → All Tasks → Backup Database… - Nh p các tham s , l a ch n ki u. 5. Khôi ph c d li u (Restore Database) Là ch c năng th c hi n khôi ph c d li u ã sao lưu, tùy theo chi n lư c backup mà ngư i qu n tr có th ph c h i n th i i m nào, thu ư c b d li u trong quá kh như th nào. Khôi ph c d li u ư c th c hi n theo th t backup, thông tin này ư c lưu tr trong msdb. Các bư c th c hi n như sau: − Ch n m c Databases → Nh n nút ph i chu t → All Tasks → Restore Database… − Nh p tham s , ch n mô hình khôi ph c. IV. Qu n lý giao d ch 1. Các khái ni m M t giao d ch là m t ơn v th c hi n chương trình truy xu t và có th c p nh t nhi u m c d li u. M t giao d ch thư ng là k t qu c a s th c hi n m t chương trình ngư i dùng ư c vi t trong m t ngôn ng thao tác d li u m c cao ho c m t ngôn ng l p trình (SQL, COBOL, PASCAL ...), và ư c phân cách b i các câu l nh (ho c các l i g i hàm) có d ng begin transaction và end transaction. Giao d ch bao g m t t c các ho t ng ư c th c hi n gi a begin và end transaction. m b o tính toàn v n c a d li u, ta yêu c u h CSDL duy trì các tính ch t sau c a giao d ch: • Tính nguyên t (Atomicity). Ho c toàn b các ho t ng c a giao d ch ư c ph n ánh úng n trong CSDL ho c không có gì c . • Tính nh t quán (consistency). S th c hi n c a m t giao d ch là cô l p (Không
  • 64. Bài gi ng tóm t t H qu n tr cơ s d li u 62 có giao d ch khác th c hi n ng th i) b o t n tính nh t quán c a CSDL. • Tính cô l p (Isolation). Cho dù nhi u giao d ch có th th c hi n ng th i, h th ng ph i m b o r ng i v i m i c p giao d ch Ti, Tj , ho c Tj k t thúc th c hi n trư c khi Ti kh i ng ho c Tj b t u s th c hi n sau khi Ti k t thúc. Như v y m i giao d ch không c n bi t n các giao d ch khác ang th c hi n ng th i trong h th ng. • Tính b n v ng (Durability). Sau m t giao d ch hoàn thành, các thay i ã ư c t o ra i v i CSDL v n còn ngay c khi x y ra s c h th ng. Các tính ch t này thư ng ư c g i là các tính ch t ACID (Các ch cái u c a b n tính ch t). Ta xét m t ví d : m t h th ng ngân hàng g m m t s tài kho n và m t t p các giao d ch truy xu t và c p nh t các tài kho n. T i th i i m hi n t i, ta gi thi t r ng CSDL n m trên ĩa, nhưng m t vài ph n c a nó ang n m t m th i trong b nh . Các truy xu t CSDL ư c th c hi n b i hai ho t ng sau: • READ(X): chuy n m c d li u X t CSDL n buffer c a giao d ch th c hi n ho t ng READ này. • WRITE(X): chuy n m c d li u X t buffer c a giao d ch th c hi n WRITE n CSDL. Trong h CSDL th c, ho t ng WRITE không nh t thi t d n n s c p nh t tr c ti p d li u trên ĩa; ho t ng WRITE có th ư c lưu t m th i trong b nh và ư c th c hi n trên ĩa mu n hơn. Trong ví d , ta gi thi t ho t ng WRITE c p nh t tr c ti p CSDL. Ti là m t giao d ch chuy n 50 t tài kho n A sang tài kho n B. Giao d ch này có th ư c xác nh như sau: Ti : READ(A); A:=A - 50; WRITE(A) READ(B); B:=B + 50; WRITE(B); Ta xem xét m i yêu c u trong ACID: • Tính nh t quán: òi h i nh t quán ây là t ng c a A và B là không thay ib i s th c hi n giao d ch. N u không có yêu c u nh t quán, ti n có th ư c t o ra hay m t b i giao d ch. D dàng ki m nghi m r ng n u CSDL nh t quán trư c m t th c hi n giao d ch, nó v n nh t quán sau khi th c hi n giao d ch. m b o tính nh t quán