287
Chương 0 TỔNG QUAN VỀ CSDL Phạm Thị Thu Thúy Khoa CNTT, Đại học Nha Trang [email protected]

Chương 0 TỔNG QUAN VỀ CSDL

Embed Size (px)

Citation preview

Chương 0

TỔNG QUAN VỀ CSDL

Phạm Thị Thu Thúy

Khoa CNTT, Đại học NhaTrang

[email protected]

Nội dung chương 0

• Mô hình dữ liệu quan hệ

• Thiết kế CSDL quan hệ

• Hệ quản trị cơ sở dữ liệu

• Khái niệm

• Lịch sử phát triển

• Chức năng

Bundoora

Bundoora

Balwyn

Glen

Norman

Mary

3936

8507

8452

KewRobert1108

SuburbName

StudentId Takes

298507

21

23

23

1108

1108

8507

SNOSID

Dept

CSCE

CSCE

Name

Systems

Database

No

21

23

Subject

Mô hình dữ liệu quan hệ

• Cơ sở dữ liệu quan hệ

Relational Database

Entitites

Attribute

Mô hình dữ liệu quan hệ

• Các khái niệm:

Entities

Attributes

Tables

Fields

Mô hình dữ liệu quan hệ - Các khái niệm

• Thuộc tính:

• đặc trưng của đối tượng.

• được phân biệt qua tên gọi

• thuộc một kdl nhất định (số, chuỗi, ngày tháng,

lôgic, hình ảnh…).

• mỗi thuộc tính chỉ chọn lấy giá trị trong một tập

con của kiểu dữ liệu và tập hợp đó gọi là miền giá

trị của thuộc tính đó.

• Ví dụ điểm thi của sinh viên chỉ là các số nguyên từ

Mô hình dữ liệu quan hệ - Các khái niệm(tt)

• Lược đồ quan hệ

• tập tất cả các thuộc tính cần quản lý của một đối

tượng cùng với những mối liên hệ giữa chúng.

• Ví dụ: ta có LĐQH sinh viên (đặt tên là SV) với

các thuộc tính như sau:

SV(maSoSV, hoTenSV, ngaySinh, diemTB,

mucHbg)

Mô hình dữ liệu quan hệ - Các khái niệm(tt)

• Nhiều lược đồ quan hệ cùng nằm trong một hệ

thống quản lý được gọi là một lược đồ CSDL .

• Ví dụ lược đồ CSDL để quản lý điểm của sinh viên có thể

gồm những lược đồ quan hệ sau:

SV(maSV, hotenSV, ngaySinh, maLop, tinh, hocBong)

Lop(maLop, tenLop, siSo, maKhoa)

Khoa(maKhoa, tenKhoa, soCB)

MonHoc(maMH, tenMH, soTiet)

KetQua(maSV, maMH, diemThi)

Mô hình dữ liệu quan hệ - Các khái niệm(tt)

• Định nghĩa quan hệ (relation):

• Sự thể hiện của lược đồ quan hệ ở một thời điểm

nào đó được gọi là quan hệ.

Mô hình dữ liệu quan hệ - Các khái niệm(tt)

• Primary keys (các khóa chính)

• là yếu tố chủ yếu cho các CSDL QH

• làm cho các dòng là duy nhất

Mô hình dữ liệu quan hệ - Các khái niệm(tt)

• Foreign keys (các khóa ngoại)

• là một hoặc nhiều cột tham chiếu đến các khóa

chính của bảng khác.

Mô hình dữ liệu quan hệ - Các khái niệm(tt)

• Định nghĩa quan hệ (relation):

• Sự thể hiện của lược đồ quan hệ ở một thời điểm

nào đó được gọi là quan hệ.

Mô hình dữ liệu quan hệ - Các khái niệm(tt)

• Primary keys (các khóa chính)

• là yếu tố chủ yếu cho các CSDL QH

• làm cho các dòng là duy nhất

Mô hình dữ liệu quan hệ - Các khái niệm(tt)

• Foreign keys (các khóa ngoại)

• là một hoặc nhiều cột tham chiếu đến các khóa

chính của bảng khác.

Thiết kế các CSDL quan hệ

• Các bước:

• Phân tích tình huống để tập hợp thông tin về csdl

dự kiến

• Quyết định các cột, kiểu dữ liệu và chiều dài dữ

liệu

• Chuẩn hóa dữ liệu bên trong các bảng

• Tạo csdl và các bảng

Thiết kế các CSDL quan hệ (tt)

• Xét ví dụ sau:

CungCapSP(maNCC, tenNCC, diaChi, sanPham, gia)

maNCC

S01

S01

S01

S02

S03

S03

M01

tenNCC

Sanyo

Sanyo

Sanyo

Sharp

Samsung

Samsung

Maytag

diaChi

Tokyo, Nhật Bản

Tokyo, Nhật Bản

Tokyo, Nhật Bản

Hiroshima, Nhật Bản

Hồng Kông, Đài Loan

Hồng Kông, Đài Loan

New York, Mỹ

sanPham

Tủ lạnh

Máy giặt

Máy lạnh

Tivi

LCD

Tivi

Tủ lạnh

gia

250

270

200

140

200

120

260

Sự trùng lắp thông tin sẽ làm tăng chi phí lưu trữ thông tin cũng nhưchi phí kiểm tra RBTV.

Cách giải quyết: tách thành hai lược đồ như sau:

– CungCap(maNCC, sanPham, gia) và NhaCC(maNCC, tenNCC,diaChi)

maNV

100

100

140

110

110

190

150

150

tenNV

Nguyễn Văn An

Nguyễn Văn An

Trần Thị Mỹ

Lê Văn Minh

Lê Văn Minh

Trần Văn Ban

Hồ Minh Nhật

Hồ Minh Nhật

donVi

P. Tiếp thị

P. Tiếp thị

P. Kế toán

P. Hệ thống thông tin

P. Hệ thống thông tin

P. Tài chính

P. Tiếp thị

P. Tiếp thị

luong

480

480

550

500

500

520

450

450

tenKH

Anh văn

NC thị trường

Luật thuế

Anh văn

C++

Anh văn

Java

ngayKTKH

31/12/2009

10/03/2010

15/04/2010

31/12/2009

31/01/2010

31/12/2009

10/01/2010

Hỏi: Khóa chính là gì?

Đáp: {maNV, tenKH}

Sự bất thường ở bảng này?

Thêm vào – không thể thêm vào 1 nhân viên mới mà không tham gia lớpnào

Xoá đi – nếu xoá bỏ nhân viên 140, ta sẽ mất thông tin về lớp Luật thuế

Hiệu chỉnh – để tăng lương cho nhân viên 100, đòi hỏi phải cập nhật 2

hàng

Thiết kế các CSDL quan hệ - Chuẩn hóa

• Có các dạng chuẩn sau:

Dạng chuẩn 1 (First Normal Form) – 1NF

Dạng chuẩn 2 (Second Normal Form) – 2NF

Dạng chuẩn 3 (Third Normal Form) – 3NF

Dạng chuẩn Boyce codd (Boyce codd Normal

Form) – BCNF

Thiết kế các CSDL quan hệ - Chuẩn hóa(tt)

• Dạng chuẩn 1 (First Normal Form) – 1NF

• Quy định rằng một cột không thể chứa nhiều giá trị

• Dạng chuẩn 2 (First Normal Form) – 2NF)

• Đạt 1NF

• Mọi cột không tham gia vào khóa phải phụ thuộc

vào toàn bộ khóa

• Dạng chuẩn 3 (Third Normal Form) – 3NF)

• Đạt 2NF

• Mọi cột không tham gia vào khóa không được phụ

thuộc vào cột khác (không phải khóa)

Hệ quản trị CSDL – khái niệm

• Hệ quản trị cơ sở dữ liệu (HQTCSDL, database

management system):

• Là một tập hợp các ctr cho phép người dùng định

nghĩa, tạo lập, bảo trì các CSDL và cung cấp các

truy cập có điều khiển đến các CSDL này.

• CSDL là một thành phần trong HQTCSDL.

• Các HQTCSDL thường gặp như: Oracle, SQL

Server, DB2, Paradox, MS Access, Sybase,

Foxpro….

Hệ quản trị CSDL – lịch sử phát triển

• Các hệ quản trị CSDL đầu tiên ra đời vàonhững năm 1960 dựa trên mô hình dữ liệu phân

cấp.

• IMS (Information Management System) của hãngIBM.

• Giữa những năm 60 của thế kỷ 20, IDS(Integrated Data Store) ra đời đánh dấu sự xuất

hiện đầu tiên của một hệ quản trị CSDL dựatrên mô hình dữ liệu mạng.

• Năm 1976, hệ quản trị CSDL đầu tiên dựa vàomô hình quan hệ của hãng IBM ra đời mang tên

System-R.

Hệ quản trị CSDL – lịch sử phát triển (tt)

• Từ 1980 đến nay:• hệ quản trị CSDL kiểu QH ra đời cho cả môi trường máy

tính lớn và máy tính cá nhân.

• Từ 1990, bắt đầu xây dựng các hệ quản trịCSDL kiểu hướng đối tượng và hướng đối

tượng – quan hệ. Những hệ quản trị CSDL nhưvậy được coi là thuộc vào thế hệ thứ ba.

Hệ quản trị CSDL – chức năng

• Các chức năng của hệ quản trị csdl:

• Cung cấp mô hình dữ liệu giúp user mô tả dữ liệu,

cho phép khai báo cấu trúc dữ liệu, mô tả các mối

liên hệ của dữ liêu cũng như các quy tắc quản lý

áp đặt lên dữ liệu đó.

• Cung cấp một giao diện giữa user và csdl và csdl

với các hệ thống khác.

• Cung cấp một ngôn ngữ bậc cao (phi thủ tục) giúp

user truy xuất và thao tác csdl

Hệ quản trị CSDL – chức năng (tt)

• Quản lý giao tác, phân quyền và an toàn dữ liệu

• Điều khiển được sự tương hợp, tính toàn vẹn khi

chuyển hóa dữ liệu và có sự cố của hệ thống

• Kiểm tra độ tin cậy của dữ liệu

Chương 1

TỔNG QUAN VỀ SQL SERVER

Nội dung chương 1

Giới thiệu SQL Server

Lịch sử phát triển SQL Server

Các ấn bản SQL Server

Một số khái niệm của SQL Server

Các mô hình truy xuất dữ liệu

Transact-SQL

Giới thiệu SQL Server

SQL ServerClient

Results

Client Application

OLTP

OLAP

Relational Database

Management System

Query

8

Giới thiệu SQL Server

• SQL Server:

• là một hệ thống quản lý cơ sở dữ liệu (Relational

Database Management System (RDBMS) ) sử

dụng Transact-SQL để trao đổi dữ liệu giữa Client

computer và SQL Server computer.

• được tối ưu để có thể chạy trên môi trường cơ sở

dữ liệu rất lớn (Very Large Database

Environment) lên đến Tera-Byte và có thể phục vụ

cùng lúc cho hàng ngàn user.

• có thể kết hợp "ăn ý" với các server khác như

Microsoft Internet Information Server (IIS), E-

Commerce Server....

Lịch sử phát triển SQL

• Phiên bản gốc của SQL, ban đầu được gọi là

SEQUEL (Structured English Query

Languages),

• được thiết kế và cài đặt vào năm 1970 tại phòng

nghiên cứu San Jose của hãng IBM.

• Qua thời gian, ngôn ngữ được bổ sung để có

thể xây dựng CSDL và quản lý an toàn cho cơ

cấu CSDL.

• Các phương tiện CSDL ngày nay sử dụng các

phiên bản khác nhau của SQL. Microsoft SQL

Server sử dụng phiên bản gọi là Transact-SQL

Lịch sử phát triển SQL (tt)

• SQL Server đầu tiên là của Microsoft và tập

đoàn Sybase trên nền IBM OS/2

• SQL Server 7.0 là cái mốc để đánh dấu sự

chấm dứt sử dụng mã lệnh Sybase cho nhóm

cơ sở dữ liệu của Microsoft.

Lịch sử phát triển SQL (tt)

• SQL Server 2000:

• làm nổi bật dòng mã lệnh mới, bổ sung các tính

năng mới có ý nghĩa.

• tăng cường khả năng đánh giá, độ tin cậy và giá

trị của sản phẩm.

Giới thiệu SQL Server

SQL ServerClient

Results

Client Application

OLTP

OLAP

Relational Database

Management System

Query

8

Giới thiệu SQL Server

• SQL Server:

• là một hệ thống quản lý cơ sở dữ liệu (Relational

Database Management System (RDBMS) ) sử

dụng Transact-SQL để trao đổi dữ liệu giữa Client

computer và SQL Server computer.

• được tối ưu để có thể chạy trên môi trường cơ sở

dữ liệu rất lớn (Very Large Database

Environment) lên đến Tera-Byte và có thể phục vụ

cùng lúc cho hàng ngàn user.

• có thể kết hợp "ăn ý" với các server khác như

Microsoft Internet Information Server (IIS), E-

Commerce Server....

Lịch sử phát triển SQL

• Phiên bản gốc của SQL, ban đầu được gọi là

SEQUEL (Structured English Query

Languages),

• được thiết kế và cài đặt vào năm 1970 tại phòng

nghiên cứu San Jose của hãng IBM.

• Qua thời gian, ngôn ngữ được bổ sung để có

thể xây dựng CSDL và quản lý an toàn cho cơ

cấu CSDL.

• Các phương tiện CSDL ngày nay sử dụng các

phiên bản khác nhau của SQL. Microsoft SQL

Server sử dụng phiên bản gọi là Transact-SQL

Lịch sử phát triển SQL (tt)

• SQL Server đầu tiên là của Microsoft và tập

đoàn Sybase trên nền IBM OS/2

• SQL Server 7.0 là cái mốc để đánh dấu sự

chấm dứt sử dụng mã lệnh Sybase cho nhóm

cơ sở dữ liệu của Microsoft.

Lịch sử phát triển SQL (tt)

• SQL Server 2000:

• làm nổi bật dòng mã lệnh mới, bổ sung các tính

năng mới có ý nghĩa.

• tăng cường khả năng đánh giá, độ tin cậy và giá

trị của sản phẩm.

Lịch sử phát triển SQL (tt)

• SQL server 2005

Nâng cao bảo mật

Mở rộng T-SQL

Tăng cường hỗ trợ người phát triển

Tăng cường khả năng quản lý

Nâng cao độ sẵn sàng của CSDL

Nâng cao khả năng mở rộng CSDL

Tăng cường khả năng khai thác thông tin

Lịch sử phát triển SQL (tt)

• SQL server 2008

Nền tảng cho các nhiệm vụ then chốt

Sự phát triển động

Dữ liệu quan hệ mở rộng

Thông tin trong toàn bộ doanh nghiệp

Các ấn bản của SQL Server (Editions)

• Enterprise (Developer) Edition

• Standard Edition

• SQL Server Express Edition

Một số khái niệm của SQL Server

• Data Type (Kiểu dữ liệu):

• là các kiểu lưu trữ cơ bản về dữ liệu của bạn.Chúng ta có thể chọn ra các KDL khác nhau,

chẳng hạn như ký tự, số hoặc ngày.

• Stored procedure (thủ tục thường trú – thủ tụclưu trữ):

• mã lệnh Transact – SQL có thể được viết và lưutrữ mang một tên.

Một số khái niệm của SQL Server (tt)

• User – defined functions (các hàm do ngườidùng định nghĩa):

• là mã lệnh Transact – SQL rất giống các mã lệnhcủa thủ tục lưu trữ.

• có thể được gọi trong các truy vấn CSDL hoặc đểchỉnh sửa một cột dữ liệu hoặc đóng vai trò như

các bảng

• Vd có thể viết các hàm date cho riêng mình để

chỉnh sửa các cột dữ liệu có kiểu datetime.

Một số khái niệm của SQL Server (tt)

• Constraints (các ràng buộc)

• là các cơ chế được hệ thống cài đặt dựa trên máychủ nhằm bảo vệ tính toàn vẹn của dữ liệu.

Một số khái niệm của SQL Server (tt)

• Triggers (các bẫy lỗi – còn dịch là bộ kích khởi)

• là các thủ tục lưu trữ kích hoạt trước hoặc sau khi

bổ sung, sửa chữa hoặc xóa dữ liệu ra khỏi

CSDL.

• đảm bảo tuân theo các quy tắc kinh doanh hoặc

các quy tắc toàn vẹn dữ liệu khác trong CSDL.

• Ví dụ bộ kích khởi có thể đảm bảo rằng mỗi

quyển sách trong hiệu sách có một nhà xuất bản

hợp lệ gán cho nó.

Một số khái niệm của SQL Server (tt)

• Views (các khung nhìn – hay bảng ảo)

• là các truy vấn lưu trữ trong CSDL để có thể tham

chiếu tới một hoặc nhiều bảng.

• thường thể hiện hoặc không thể hiện các cột nào

đó trong bảng hoặc là liên kết hai hoặc nhiều

bảng với nhau

• Indexes (các chỉ mục)

• giúp tổ chức lại dữ liệu, nên các truy vấn chạy

nhanh hơn.

Các mô hình truy xuất dữ liệu

• Kiến trúc Client/ Server (Client / Server

architecture)

• Phía máy chủ: thường được cài đặt các hệ cơ sở

dữ liệu bao gồm các bảng biểu, các thủ tục lưu

trữ... và điều khiển các tiến trình sau:

• Quản lý dữ liệu.

• Bảo mật dữ liệu.

• Thực hiện truy vấn, ràng buộc và các thủ tục lưu

trữ.

• Điều khiển lỗi.

• Phía máy khách: Tạo giao diện người sử dụng

(User Inteface)

Các mô hình truy xuất dữ liệu (tt)

SQL ServerClient

Results

Client Application

OLTP

OLAP

Query

Relational Database

Management System

Client/Server Architecture

Các mô hình truy xuất dữ liệu (tt)

• Kiến trúc nhiều tầng (N-tier Architecture)

• Quá trình xử lý được phân tán trên các lớp khác

nhau với các chức năng riêng biệt phù hợp

cho việc tổ chức hệ thống thông tin trên mạng

Internet và mạng Intranet hay trong các mạng cục

bộ.

• Các tầng (lớp): nguồn dữ liệu, truy cập dữ liệu,

lớp giao dịch, lớp giao diện

Các mô hình truy xuất dữ liệu (tt)

N-tier Architecture

Transact - SQL (T-SQL)

• Transact - SQL (T-SQL):

• Là ngôn ngữ SQL mở rộng dựa trên chuẩn ANSI

• T-SQL gồm các nhóm:

• Data Definition Language (DDL): ngôn ngữ định

nghĩa dữ liệu

• CREATE, ALTER, DROP

• Data Manipulation Language (DML): ngôn ngữ xử

lý dữ liệu

• SELECT, INSERT, UPDATE

• Data Control Language Statements (DCL): ngôn ngữđiều khiển dữ liệu

• DENY, GRANT, REVOKE

Tóm tắt chương 1

• Các ấn bản SQL Server

• Một số khái niệm của SQL Server:

• Data Type, Stored procedure, User – defined

functions, Constraints, Triggers, Views, Indexes

• Các mô hình truy xuất dữ liệu

• Kiến trúc Client/ Server (Client / Server

architecture)

• Kiến trúc nhiều tầng (N-tier Architecture)

• Transact-SQL:

• DDL, DML, DCL

Chương 2

TAO VA QUAN TRI CƠ SƠ DƯ LIÊU

Cấu trúc vật lý của CSDL SQL Server

Mỗi database trong SQL Server chứa ít nhất một

data file chính (primary), có thể có thêm một hay

nhiều data file phụ (Secondary) và một transaction

log file.

Cấu trúc vật lý của CSDL SQL Server (tt)

Primary data file:

file chính chứa data và những system tables (đuôi .mdf)

Secondary data file:

file phụ thường chỉ sử dụng khi database được phân chia

để chứa trên nhiều đĩa (đuôi .ndf)

Transaction log file:

file ghi lại tất cả những thay đổi diễn ra trong một

database và chứa đầy đủ thông tin để có thể roll back hay

roll forward khi cần (đuôi .ldf)

Về mặt logic, dữ liệu trong CSDL được tổ chức trong các

đối tượng của csdl

Về mặt vật lý, CSDL được lưu trữ trên 2 hoặc nhiều tập

tin

Data2.ndfData1.mdf

Log1.ldf

Cấu trúc vật lý của CSDL SQL Server (tt)

User view

Cơ sở dữ liệu

Physical Implementation

Mỗi CSDL chỉ có

một file .mdf

Cơ sở dữ liệu hệ thống

Trong SQL Server, tất cả thông tin hệ thống được

lưu trong CSDL hệ thống

Tất cả CSDL người dùng được quản lý bởi CSDL hệ

thống

SQL Server cung cấp và hỗ trợ CSDL hệ thống sau:

Cơ sở dữ liệu hệ thống (tt)

Database

master

msdb

model

resource

tempdb

Description

Lưu trữ tất cả thông tin hệ thống của Sql Server như các

thiết lập cấu hình hệ thống của SQL Server

Cơ sở dữ liệu được SQL Server Agent sử dụng để lập lịch

một số công việc thường nhật

CSDL mẫu để tạo ra các CSDL người dùng

CSDL chỉ đọc. Chứa các đối tượng hệ thống trong SQL

Server

CSDL lưu trữ các đối tượng tạo ra tạm thời trong quá trình

làm việc bởi user hay do bản thân SQL Server engine

Các đối tƣợng của cơ sở dữ liệu

Đối tƣợng

Table

Data Type

View

Stored

procedure

Mô tả

Đối tượng lưu trữ dữ liệu của CSDL

Kiểu dữ liệu

View là đối tượng CSDL chứa các câu lệnh SELECT

Là đối tượng chứa các tập lệnh T-SQL

Các đối tƣợng của cơ sở dữ liệu (tt)

Đối tƣợng

Function

Index

Constraint

Trigger

Mô tả

Hàm định nghĩa các logic xử lý

Đối tượng CSDL nhằm truy cập dữ liệu nhanh hơn

Ràng buộc dữ liệu, được thiết lập trên 1 cột hoặc nhiều

cột dữ liệu để thiết lập toàn vẹn dữ liệu

Là loại thủ tục lưu trữ đặc biệt, được thực thi khi dữ liệu

trong bảng thay đổi

Các đối tƣợng của cơ sở dữ liệu (tt)

Đối tƣợng

Logins

Users

Roles

Groups

Mô tả

Một người dùng được định danh bởi Login ID để

kết nối đến SQL Server. SQL Server hỗ trợ 2 cơ

chế chứng thực đó là Windows Authentication và

SQL Server Authentication.

Nhận diện mỗi người dùng trong mỗi CSDL.

Quyền truy cập của người dùng dựa trên đối

tượng này.

Vai trò, là nhóm người dùng cùng chức năng

Nhóm nhiều SQL Server lại thành một Groups

Kiến trúc vật lý cơ sở dữ liệu

Pages and Extents

Page:

Đơn vị lưu trữ dữ liệu cơ sở trong SQL Server

Không gian đĩa được cấp phát cho tập tin dữ liệu (.mdf

hoặc ndf) của một csdl được phân chia logic thành các

page và được đánh số liên tục từ 0 đến n.

SQL Server thực hiện đọc ghi dữ liệu trên các page này

Có kích thước là 8 Kbs (1MB có 128 pages).

96 byte đầu tiên của page (page header) lưu trữ các

thông tin hệ thống về page như: số trang, loại trang

(data, Index, text/image,..), chỉ số ID của trang

Kiến trúc vật lý cơ sở dữ liệu (tt)

Pages and Extents

Môt Extent là 8 page liên tiếp, tức là 64 KB. Có 16

Extent trên mỗi MB

Kiến trúc vật lý cơ sở dữ liệu (tt)

Database Files and Filegroups

Space Allocation and Reuse

SQL Server phân bổ vùng nhớ cho các đối tượng và

lấy lại vùng nhớ khi các hàng, đối tượng bị xóa

Table and Index Architecture

Mỗi bảng và chỉ mục, các hàng dữ liệu được lưu trữ

trên 8KB gọi là page

Kiến trúc vật lý cơ sở dữ liệu

Transaction Log Architecture

Mỗi cơ sở dữ liệu trong SQL Server đều bao gồm file

log để ghi lại tất cả các giao dịch và thao tác cơ sở dữ

liệu. Các thao tác hỗ trợ bởi giao dịch gồm:

Khôi phục lại từng giao dịch

Khôi phục lại tất cả các giao dịch chưa hoàn tất khi SQL

Server khởi động

Khôi phục dữ liệu về trước vị trí mà hệ thống bị lỗi

Kiến trúc cơ sở dữ liệu quan hệ

Relational database engine có hai phần chính:

relational engine và storage engine

Relational Engine

OLE DB

Storage Engine

Local

Database

Local

Database

Local

Database

Kiến trúc cơ sở dữ liệu quan hệ (tt)

Query Processor Architecture

Các câu lệnh gửi từ ứng dụng người dùng đến SQL

Server là các câu lệnh SQL.

Các câu lệnh SQL được SQL Server thực hiện theo

một trong những cách sau:

Single SQL Statement Processing

Xử lý lô/ tập lệnh

Thực thi Stored Procedure và Trigger

Execution Plan Caching and Reuse

Parallel Query Processing

Kiến trúc cơ sở dữ liệu quan hệ (tt)

Input/Output (I/O) Architecture

Việc đọc/ghi đĩa tốn nhiều tài nguyên và mất nhiều thời

gian để giải phóng tài nguyên.

SQL Server phân bố không gian bộ nhớ đệm lớn để

lưu trữ tạm và tránh việc đọc ghi đĩa thường

Distributed Query Architecture

Truy vấn phân tán có thể truy cập dữ liệu hỗn tạp trên

nhiều nguồn dữ liệu trên cùng hoặc các máy khác

nhau.

SQL Server hỗ trợ truy vấn phân tán bằng việc sử

dụng Microsoft OLE DB Provider.

Các CSDL đƣợc SQL Server hỗ trợ

Cơ sở dữ liệu hệ thống

Cơ sở dữ liệu người dùngđịnh nghĩa

Cơ sở dữ liệu ví dụ

• Người sử dụng SQL Server có thể tạo các

cơ sở dữ liệu người dùng định nghĩa

Mục đích của các cơ sở dữ liệu này là để

lưu dữ liệu của người sử dụng

SQL Server cung cấp các cơ sở dữ liệu

mẫu để người sử dụng làm việc

Cơ sở dữ liệu mẫu được giới thiệu trong

SQL Server 2008 như Advantureworks

SQL Server hỗ trợ ba loại cơ sở dữ liệu:

Được tạo ra bởi SQL Server. Các cơ sở dữ

liệu này được sử dụng để lưu thông tin về

SQL Server. Ngoài ra, còn được sử dụng để

quản lý các cơ sở dữ liệu người dùng .

Khái niệm về cơ sở dữ liệu

Database dùng để

Chứa các bảng, bảng ảo, thủ tục nội,…

Mỗi database có một danh sách các người dùng

Người dùng phải có quyền truy cập database

Có thể phân nhóm người dùng để cấp quyền

SQL Server 2000 hỗ trợ Application Role

Các database hệ thống

Master, Model, TempDB, msdb

Các database ví dụ (sql server 2008)

Advantureworks

Các tập tin vật lý lƣu trữ cơ sở dữ liệu

Một database bao gồm tối thiểu hai file

.mdf: lưu trữ các đối tượng trong database như table,view, …

Có thể bổ sung thêm các tập tin lưu trữ khác

Tổ chức tốt các tập tin lưu trữ giúp tăng tốc độ xử lý

.ldf: lưu trữ quá trình cập nhật/thay đổi dữ liệu

Hỗ trợ phục hồi dữ liệu

Hỗ trợ backup/restore dữ liệu

Các thông số về kích thước

Initial size

File growth

Maximum file size .mdf .ndf .ldf

Tạo một CSDL

Có thể tạo CSDL bằng:

Câu lệnh CREATE DATABASE

SQL Server Management Studio

Để tạo một cơ sở dữ liệu người dùng, các thông tin

sau được yêu cầu:

Tên của cơ sở dữ liệu

Người sở hữu hoặc người tạo cơ sở dữ liệu

Kích thước của cơ sở dữ liệu

Các tập tin và nhóm các tập tin được sử dụng để lưu trữ cơ sở

dữ liệu

Tạo CSDL – Câu lệnh Create database

CREATE DATABASE Tên_CSDLOn Primary

(

Name=logical_file_name , -- Tên file logicFileName='os_file_name ' -- Tên file vật lýSize=size [ KB | MB | GB | TB ] ] , -- Kích thước tập tin ban đầuMaxSize=max_size [ KB | MB | GB | TB ] | UNLIMITED], -- Kích thước tối đa

FileGrowth=growth_increment -- Kích thước tăng trưởng

)Log On

(Name= logical_file_name,FileName=‘os_file_name',

Size=size,

MaxSize=max_size,FileGrowth= growth_increment);

Cú pháp để tạo một cơ sở dữ liệu người dùng là:

Tạo CSDL – Câu lệnh Create database (tt)

Tham số:

Database_name: tham chiếu tới toàn bộ CSDL

name: chỉ định tên logic sẽ sử dụng bên trong SQL

Server để tham chiếu tới tập tin CSDL vật lý trên đĩacứng.

Filename: đường dẫn và tên tập tin gắn liền với vị trí

của dữ liệu trên đĩa cứng. Nó phải là ổ đĩa cứng cụcbộ.

Tạo CSDL – Câu lệnh Create database (tt)

Size: chỉ định tập tin CSDL sẽ lớn như thế nào

Maxsize: chỉ định kích thước lớn nhất mà CSDL có thể

phát triển tới đó

Filegrowth: chỉ định độ tăng nào được sử dụng đối với

việc tự động phát triển của tập tin CSDL.

Log on: mô tả nơi mà các tập tin nhật ký chuyển tác

được tim kiếm và kích thước của chúng là bao nhiêu.

Tạo CSDL – Câu lệnh Create database (tt)

Ví dụ 1:

Tạo một CSDL dành ra 20MB lúc đầu cho phần dữ liệu

và 5MB cho nhật ký chuyển tác. Các tập tin có thể phát

triển lên tới 100MB đối với dữ liệu và 15MB đối với

nhật ký chuyển tác.

Tạo CSDL – Câu lệnh Create database (tt)

CREATE DATABAE Frogger on primary (

NAME = FroggerData,

FILENAME = 'D:\BTSQL\FroggerData.mdf',

SIZE = 20MB,

MAXSIZE = 100mb,

FILEGROWTH = 10MB)

LOG ON (

NAME = FroggerLog,

FILENAME = 'D:\BTSQL\FroggerLog.ldf',

SIZE = 5MB,

MAXSIZE = 15MB,

FILEGROWTH = 1MB )

Tạo CSDL – Câu lệnh Create database (tt)

-

Ví dụ 2:CREATE DATABASE Products ON (

NAME = prods_dat,

FILENAME = ‘D:\BTSQL\prods.mdf',

SIZE = 4,

MAXSIZE = 10,

FILEGROWTH = 1)

Lưu y: Nếu không chỉ định một transaction log file thì

SQL sẽ tự động tạo ra 1 log file với kích thước ban đầu là

1 MB.

Tạo CSDL – Câu lệnh Create database (tt)

Ví dụ: Tạo csdl có tên là QLSV

CREATE DATABASE QLSV

On Primary(

Name = QLSV_data, -- Tên file logic: QLSV_data

FileName ='C:\QLSV.mdf',-- Tên file vật lý

Size = 50MB, -- size file ban đầu:50MB

MaxSize = Unlimited,-- size tối đa: Không giới hạn

-- size tăng trưởng: 10 MBFileGrowth = 10MB

)

Log On (

Name = QLSV_log,

FileName = 'C:\QLSV.ldf',

Size = 50MB,

MaxSize = 100MB,

FileGrowth = 10MB

) ;

Sử dụng thủ

tục sp_helpdb

để xem lại

thông tin csdl

đã được tạo ra

Tạo CSDL – Dùng SQL Server

Management Studio

Thực hiện theo các bước sau:

Mở SQL Server Management Studio

Right-click lên trên "database" và chọn "New

Database"

Nhập tên CSDL

Kích phải chuột vào tên CSDL vừa tạo và chọn

Properties hoặc (kích đúp chuột).

Ơ the General ta có các thông tin chung của CSDL

(tên, kích thước…)

Để thay đổi thuộc tính các tập tin CSDL, kích chuột vào

the và hộp thích hợp, thực hiện các thay đổi và nhấn

OK.

Tạo CSDL – Dùng SQL Server

Management Studio

Đường dẫn vật lý của file

dữ liệu

Tên file dữ

liệu

Tùy chọn file

tự động tăng

trưởng được

bật

Tạo CSDL – Dùng SQL Server

Management Studio

Lệnh mở CSDL để làm việc

Cú pháp

USE database_name

Thao tác với CSDL

Hiệu chỉnh thuộc tính của tập tin

Cú pháp:

ALTER DATABASE database_name

MODIFY FILE(

NAME = logical_file_name ,

FILENAME = ‘os_file_name’ ,

SIZE = size ,

MAXSIZE = max_size ,

FILEGROWTH = size

)

Thao tác với CSDL (tt)

Thao tác với CSDL (tt)

Ví dụ:

ALTER DATABASE QLSV

MODIFY FILE (NAME = QLSV_data,

SIZE = 60MB)

Ví dụ: Lệnh hủy khả năng tự tăng trưởng cho csdl

QLSV

ALTER DATABASE QLSV

MODIFY FILE (

NAME = QLSV_data,

FILEGROWTH = 0)

Thao tác với CSDL (tt)

Cú pháp giảm kích thước của csdl hiện hành:

USE database_name

DBCC SHRINKDATABASE (NAME =

database_name , target_percent)

Ví dụ:USE QLSV

DBCC SHRINKDATABASE (NAME = QLSV , 20);

Thao tác với CSDL (tt)

Cú pháp giảm kích thước tập tin của csdl hiện hành:

USE database_name

DBCC SHRINKFILE (NAME =

logical_file_name , target_size)

Ví dụ: Giảm kích thước tập tin dữ liệu của csdl QLSVxuống 20MB

USE QLSV

DBCC SHRINKFILE (NAME = QLSV_data ,

20)

Thao tác với CSDL (tt)

Bổ sung thêm tập tin dữ liệu và tập tin nhật ký cho

CSDLALTER DATABASE database_name

ADD FILE [TO FILEGROUP filegroup_name]|

LOG FILE (

NAME = logical_file_name ,

FILENAME = ‘os_file_name’ ,

SIZE = size ,

MAXSIZE = max_size ,

FILEGROWTH = max_size

)

Thao tác với CSDL (tt)

Ví dụ:

ALTER DATABASE QLSV

ADD FILE (

NAME = QLSV_data2,

filename = D:\qlsv_data2.ndf,

size = 2,

maxsize = 5,

filegrowth = 2)

Thao tác với CSDL (tt)

Gỡ bỏ một tập tin khỏi CSDL

Cú pháp:ALTER DATABASE database_name

REMOVE FILE logical_name

Lưu ý: Tập tin phải trống trước khi gỡ bỏ Sử dụng DBCC

SHRINKFILE với tùy chọn EMPTYFILE để làm trống

một tập tin.

Thao tác với CSDL (tt)

Ví dụ:

USE QLSV GO

DBCC SHRINKFILE (

QLSV_DATA, EMPTYFILE

)

GO

ALTER DATABASE QLSV

REMOVE FILE QLSV_DATA

Thao tác với CSDL (tt)

Đổi tên CSDL: có 2 cách

Cú pháp 1:

ALTER DATABASE database_name

MODIFY NAME = new_database_name

Ví dụ:

ALTER DATABASE baitap

MODIFY NAME = baitap1

Thao tác với CSDL (tt)

Cú pháp 2: Thực thi thủ tục lưu trữ hệ thống

sp_renamedb để đổi tên CSDL

sp_renamedb ‘old name’, ‘new name’

Ví dụ:

sp_renamedb 'baitap1‘ , 'baitap’

Lưu ý khi đổi tên:

CSDL phải ở chế độ một người dùng

Phải làm việc trong CSDL chính để thực thi thủ tục trên

Thao tác với CSDL (tt)

Gỡ bỏ (xóa) một CSDL:

Gỡ bỏ thông tin của CSDL từ các bảng hệ thống và gỡ

bỏ các tập tin nhật ký và dữ liệu từ hệ thống.

Một CSDL bị xóa chỉ có thể tạo lại bằng cách khôi phục

nó từ bản sao

Không một người dùng nào có thể ở trong CSDL tại

thời điểm nó bị xóa.

Phải là thành viên của db_owner (hoặc vai trò máy chủ

sysadmin) để xóa CSDL.

Thao tác với CSDL (tt)

Cú pháp:DROP DATABASE database_name

Có thể xóa nhiều CSDL một lúc

DROP DATABASE database_name,

database_name2…

Xóa bằng SQL Server Management Studio:

Chọn CSDL cần xóa

Kích chuột phải và chọn Delete, nhấn Yes cho thông

báo xác nhận

Các phƣơng pháp thay đổi CSDL

ThS. Lƣơng Thị Ngọc Khánh – K. CNTT - ĐH Tôn Đức Thắng

Các kiểu thay Các phƣơng pháp thay đổi

của CSDL

đổi

Tăng kích thước Sử dụng phát biểu ALTER DATABASE hoặc các

thuộc tính CSDL trong SQL Server Management

Studio.

Thay đổi vị trí vật Sử dụng phát biểu ALTER DATABASE

lý của CSDL

Thêm tập tin ghi Sử dụng phát biểu ALTER DATABASE hoặc các

vết dữ liệu và giao thuộc tính CSDL trong SQL Server Management

dịch

Co rút một CSDL

Studio

Sử dụng phát biểu DBCC SHRINKDATABASE hoặc

chọn lựa Shrink Database trong SQL Server

CSDL

Management Studio, chấp nhận lựa chọn này trong

mục CSDL cần co rút.

Co rút một tập tin Sử dụng phát biểu DBCC SHRINKFILE

Các phƣơng pháp thay đổi CSDL (tt)

Các kiểu thay Các phƣơng pháp thay đổi

tập tin vào CSDL

đổi

Xóa bỏ các tập tin Sử dụng phát biểu ALTER DATABASE hoặc các

dữ liệu hoặc tập thuộc tính CSDL trong Server Management Studio.

tin ghi vết

Thêm một nhóm Sử dụng phát biểu ALTER DATABASE hoặc các

thuộc tính CSDL trong Server Management Studio.

lựa CSDL

Thay đổi nhóm tập Sử dụng phát biểu ALTER DATABASE.

tin mặc định

Thay đổi các chọn Sử dụng phát biểu ALTER DATABASE hoặc các

thuộc tính CSDL trong Server Management Studio. .

Thay đổi người sở Sử dụng thủ tục lưu trữ hệ thống sp_changedbowner

hữu CSDL

Bản chụp CSDL (Database Snapshots)

• Bản chụp CSDL:

Là bản chỉ đọc, khung nhìn tĩnh của một CSDL SQL

Server.

Tính năng mới trong từ Microsoft SQL Server

2005/2008.

• Tạo một bản chụp CSDL:

CREATE DATABASE database_snapshot_name

ON(

NAME = logical_file_name,

FILENAME = ‘os_file_name’

) [ ,...n ]

AS SNAPSHOT OF source_database_name [;]

Bản chụp CSDL (tt)

Bản Dữ chụpạo ưCSDL ửaphụcT liệuđ b đư ản ợc ch sụp đổi ợc khôi ạo T

Bản chụp CSDL (tt)

Ƣu điểm

Bản chụp cung cấp một thuận

tiện, một bản copy chỉ đọc của

dữ liệu.

Khi một bản chụp được truy

vấn, không làm giảm hiệu suất

Các tập tin dữ liệu của bản

chụp là nhỏ và được tạo ra rất

nhanh. Nó chỉ lớn khi cơ sở

dữ liệu là chủ thể thay đổi

thường xuyên.

Nhƣợc điểm

Bản sao của bản chụp không

thể được tạo ra.

Bản chụp phải tồn tại trên

cùng máy chủ cơ sở dữ liệu

cùng với cơ sở dữ liệu gốc.

của đối tượng được quan sát.

Một người sử dụng mới không

thể được quyền truy cập vào

dữ liệu trong bản chụp. Quyền

được thừa kế từ cơ sở dữ liệu

gốc khi nó đã tồn tại tại thời

điểm tạo ra bản chụp.

Nhóm tập tin (file group)

Các tập tin:

Là một đơn vị lưu trữ vật lý

Có chứa các đối tượng CSDL

Có một file logic và file vật lý

Nhóm tập tin

Gồm nhiều tập tin được nhóm lại để thực hiện và quản

lý tốt hơn.

Một nhóm tập tin logic có thể chứa nhiều tập tin vật lý.

Nhóm tập tin (file group) (tt)

Nhóm tập tin

Primary

User-defined

Mô tả

Nhóm tập tin chứa tập tin chính. Các

bảng hệ thống được đặt trong nhóm tập

tin chính.

Bất kỳ nhóm tập tin được tạo bởi người

sử dụng tại thời điểm tạo hoặc thay đổi

cơ sở dữ liệu.

Nhóm tập tin (file group) (tt)

Lưu ý:

Nhóm tập tin có thể được tạo cùng lúc với tạo CSDL

hoặc thêm vào sau.

Một tập tin không thể thuộc nhiều hơn 1 nhóm tập tin

tại cùng thời điểm.

Các tập tin không thể di chuyển đến các nhóm tập tin

khác sau khi các tập tin được thêm vào trong csdl.

Nhóm tập tin có thể chỉ chứa các file dữ liệu và không

có các file giao dịch.

Nhóm tập tin (file group) (tt)

Thêm nhóm tập tin trong khi tạo CSDL.

Cú pháp:

CREATE DATABASE database_name

[ON

[PRIMARY] [<filespec> [ ,...n ]

[,<filegroup> [ ,...n ]]

[LOG ON { <filespec> [ ,...n ] }]

]

[COLLATE collation_name ]

]

[;]

Nhóm tập tin (file group) (tt)

CREATE DATABASE DB_Nhomtaptin

ON PRIMARY (

NAME = 'DB_Nhomtaptin',

FILENAME = 'd:\baitap\DB_Nhomtaptin.mdf' ,

SIZE = 2048KB , MAXSIZE = UNLIMITED,

FILEGROWTH = 1024KB

),

FILEGROUP group1 (

NAME = 'DB_Nhomtaptin1',

FILENAME = 'd:\baitap\DB_Nhomtaptin.ndf' ,

SIZE = 2048KB , MAXSIZE = UNLIMITED,

FILEGROWTH = 1024KB

)LOG ON (

NAME = 'DB_Nhomtaptin_log',

FILENAME ='d:\baitap\DB_Nhomtaptin_log.ldf' ,

SIZE = 1024KB , MAXSIZE = 2048GB , FILEGROWTH = 10%

)

Nhóm tập tin (file group) (tt)

Thêm nhóm tập tin vào CSDL đã có

Cú pháp:

ALTER DATABASE database_name{

<add_or_modify_files>

| <add_or_modify_filegroups>

| <set_database_options>

| MODIFY NAME = new_database_name

| COLLATE collation_name

}

[;]

Nhóm tập tin (file group) (tt)

Ví dụ:

Thêm nhóm tập tin group1 vào csdl QLSValter database QLSV

add filegroup group1

Thêm file vào nhóm tập tin group1alter database QLSV add file(

NAME = ‘QLSV_add',

FILENAME='d:\Bai tap\QLSV_add.ndf' ,

SIZE = 2048KB , MAXSIZE = UNLIMITED,

FILEGROWTH = 1024KB

) to filegroup group1

Nhóm tập tin (file group) (tt)

Bảng sau liệt kê một số hàm hệ thống, và các thủ

tục lưu trữ hệ thống trả về thông tin của các cơ sở

dữ liệu, các tập tin, và các nhóm tập tin:

Các hàm

DB_ID

DB_NAME

FILE_ID

FILE_NAME

Mô tả

Hàm này trả về số ID của cơ sở dữ liệu.

Hàm này trả về tên của cơ sở dữ liệu

Hàm này trả về số ID của tập tin theo tên

tập tin luận lý trong cơ sở dữ liệu hiện tại.

Hàm này trả về tên luận lý của tập tin theo

số ID của tập tin cho trước.

Sao lƣu CSDL (Backup database)

Các Loại Backup:

Full Database Backups:

Copy tất cả data files trong một database. Tất cả những

user data và database objects như system tables,

indexes, user-defined tables đều được backup.

Differential Database Backups:

Copy những thay đổi trong tất cả data files kể từ lần full

backup gần nhất.

Sao lƣu CSDL (Backup database)

File or File Group Backups:

Copy một data file đơn hay một file group.

Differential File or File Group Backups:

Tương tự như differential database backup nhưng chỉ

copy những thay đổi trong data file đơn hay một file

group.

Transaction Log Backups:

Ghi nhận tất cả các transactions chứa trong transaction

log file kể từ lần transaction log backup gần nhất. Loại

backup này cho phép phục hồi dữ liệu trở ngược lại vào

một thời điểm nào đó trong quá khứ.

Sao lƣu CSDL (Backup database) (tt)

Thuật Ngữ

Backup

Backup Device

Backup File

Backup Media

Backup Set

Giải Thích

Quá trình copy toàn bộ hay một phần của

database, transaction log, file hay file group hình

thành một backup set. Backup set được chứa trên

backup media (tape or disk) bằng cách sử dụng

một backup device (tape drive name hay physical

filename)

Một file vật lý (như C:\SQLBackups\Full.bak)

File chứa một backup set

Disk hay tape được sử dụng để chứa một backup

set. Backup media có thể chứa nhiều backup sets

Một bộ backup từ một lần backup đơn được chứa

trên backup media.

Sao lƣu CSDL (Backup database) (tt)

Sao lƣu CSDL (Backup database) (tt)

Sao lưu với SQL Server Management Studio

Click vào database muốn backup Right-click

Tasks Backup Database...

Tùy theo yêu cầu

của database mà

chọn các option

thích hợp.

Ngoài ra, có thể

schedule cho SQL

Server backup định

kỳ.

Phục hồi CSDL (Restore Database)

Lƣơng Thị Ngọc Khánh

Bài tập

1. Lệnh sau làm gi?

Alter database Test

Add file (name = test_data2, filename =

‘C:\test_data2.ndf’, size = 10)

2. Tạo một csdl với tên gọi là Frog với các đặc điểm

sau:

Hai tập tin dữ liệu tên là Frogdata1 và Frogdata2, mới

khởi tạo ban đầu là 3MB, có thể phát triển tới 20MB,

mỗi lần phát triển 2MB

Hai tập tin nhật ký tên là Froglog1, Froglog2, mới khởi

tạo là 1MB, kích thước tối đa là 5MB, sử dụng chế độ

phát triển tự động.

Bài tập (tt)

3. Thêm tập tin dữ liệu khác tên là Frogdata3 với các

thuộc tính mặc nhiên cho tất cả các giá trị khác

4. Co csdl lại 20%

5. Làm rỗng tập tin Froglog2

6. Gỡ bỏ tập tin Froglog2

7. Đổi tên csdl là Treelog

8. Xóa csdl

Chương 3

Bảng (Table)

GV: TS. Phạm Thị Thu ThúyEmail: [email protected]

Hệ quản trị CSDL SQL Server - page115

Nội dung chương 3

Các kiểu dữ liệu trong SQL

Câu lệnh định nghĩa dữ liệu

Tạo bảng

Câu lệnh cập nhật dữ liệu

Câu lệnh thay đổi cấu trúc bảng

Xóa bảng

Hệ quản trị CSDL SQL Server - page116

Các kiểu dữ liệu trongSQL

Kiểu dữ liệu là một thuộc tính, nó chỉ định kiểu của dữ liệu và dung lượng có thể lưu trữ của một đối tượng

SQL Server hỗ trợ một số kiểu dữ liệu được cài sẵn như sau:

Hệ quản trị CSDL SQL Server - page117

Các kiểu dữ liệu trongSQL (tt)

Hệ quản trị CSDL SQL Server - page118

Các kiểu dữ liệu trongSQL (tt)

Hệ quản trị CSDL SQL Server - page119

Các kiểu dữ liệu trongSQL (tt)

Hệ quản trị CSDL SQL Server - page120

Kiểu dữ liệu Date/ Time mới trong SQL server 2012

Date: Kiểu ngày

Time: Kiểu giờ

Các kiểu dữ liệu trongSQL (tt)

Hệ quản trị CSDL SQL Server - page121

Tên bảng

Tên cột

Kiểu dữ liệu

Độ dài dữ liệu

Số ký số lưu trữ

Số số lẻ lưu trữ

Thuộc tính trên cột

Allow null

Identity

Default value

Tạo bảng – Khái niệmbảng

Hệ quản trị CSDL SQL Server - page122

Tạo bảng

Hệ quản trị CSDL SQL Server - page123

Tạo bảng (tt)

Hệ quản trị CSDL SQL Server - page124

Tạo bảng (tt)

Ví dụ: Tạo bảng với lược đồ quan hệ sau:

HANGHOA (MaHG, TenHG, DVT)

•Mã hàng hóa là khóa chính, tên hàng và đơn vị tính. Tất cả không được rỗng.

Create Table Hanghoa (

MaHG varchar(10) Not Null Primary key,

TenHG nvarchar(50) Not Null,

DVT varchar(5) Not Null

)

Hệ quản trị CSDL SQL Server - page125

Tạo bảng – cột được phép null

Đặc trưng về khả năng null của một cột quyết định các hàng trong bảng có thể chứa giá trị null cho cột đó.

Khả năng Null của một cột có thể được định nghĩa khi tạo một bảng.

Từ khóa NULL được sử dụng để chỉ ra rằng giá trị null là được phép trong cột

Từ khóa NOT NULL được sử dụng để chỉ ra rằng giá trị null là không được phép

Hệ quản trị CSDL SQL Server - page126

Tạo bảng – cột được phép null

Hệ quản trị CSDL SQL Server - page127

Tạo bảng – Định nghĩaDEFAULT

Ràng buộc default có thể được tạo ra tại thời điểm tạo bảng hoặc thêm sau khi bảng được tạo.

Với một cột, chỉ có thể tạo được một giá trị default.

Giá trị default có thể là một hằng, một hàm hệ thống, một biến toàn cục, hoặc một hàm do người dùng định nghĩa.

Hệ quản trị CSDL SQL Server - page128

Tạo bảng – Định nghĩaDEFAULT (tt)

Tạo bảng - Định nghĩa DEFAULT (tt)

• Định nghĩa default đối với một bảng đã tồn tại:

ALTER TABLE <tên bảng>

ADD [CONSTRAINT <tên ràng buộc>] DEFAULT

<biểu thức> FOR <tên cột>

• Thuộc tính IDENTITY của SQL Server được sử

dụng để tạo ra các cột nhận dạng, chúng chứa các

giá trị tự động phát sinh tuần tự để nhận dạng duy

nhất mỗi hàng trong một bảng.

• Một thuộc tính nhận dạng có hai thành phần:

– Giá trị khởi đầu

– Giá trị tăng

Tạo bảng - Thuộc tính IDENTITY

• CREATE TABLE <table_name> (column_name

data_type [ IDENTITY [(seed_value,

increment_value)]] NOT NULL )

– Trong đó, - seed_value là giá trị khởi đầu .

– - increment_value là giá trị tăng.

• Ví dụ:

CREATE TABLE ContactPhone (

Person_ID int IDENTITY(500,1) NOT NULL,

MobileNumber bigint NOT NULL

)

Tạo bảng - Thuộc tính IDENTITY (tt)

• Cú pháp:

PRIMARY KEY

UNIQUE

FOREIGN KEY

CHECK

NOT NULL

Tạo bảng – Ràng buộc

• Ràng buộc là thuộc tính được chỉ định cho một cột

hoặc một tập hợp các cột trong bảng để ngăn ngừa

các giá trị không nhất quán được nhập vào.

• SQL Server hỗ trợ các loại ràng buộc sau:

Tạo bảng – Ràng buộc- Primary Key (Khoá chính)

• Ràng buộc PRIMARY KEY được sử dụng để tạo

một khóa chính và đảm bảo toàn vẹn thực thể bảng.

• Cú pháp để thêm một khóa chính trong khi tạo

bảng:

• CREATE TABLE <tên bảng> (

<tên cột> <kiểu dữ liệu> PRIMARY KEY [ds cột]

)

• CREATE TABLE <tên bảng> (

<tên cột> <kdl> [ds cột] CONSTRAINT <tên RB>

PRIMARY KEY)

Tạo bảng – Ràng buộc- Primary Key (Khoá chính) (tt)

• Ví dụ: Tạo bảng PhongBan với khóa chính là

maphong

CREATE TABLE PhongBan (

maphong int PRIMARY KEY,tenphong

navarchar(20),

trphong char(5), diadiem nvarchar(20) )

Hoặc có thể viết như sau:

CREATE TABLE PhongBan (

maphong int constraint pk_pb PRIMARY KEY,

tenphong nvarchar(20), trphong char(5), diadiem

nvarchar(20))

Tạo bảng – Ràng buộc- UNIQUE - Khóa duy nhất

• Ràng buộc khóa duy nhất:

– được sử dụng để bảo đảm rằng chỉ các giá trị duy

nhất được nhập vào trong cột hoặc một tập hợp các

cột ( cho phép nhà phát triển chắc chắn rằng không

có các giá trị trùng lặp được nhập vào)

– Được sử dụng trong câu lệnh create table để định

nghĩa khóa phụ cho bảng

– Ràng buộc UNIQUE cho phép null

Tạo bảng – Ràng buộc- UNIQUE - Khóa duy nhất (tt)

• Cú pháp:

– CREATE TABLE <tên bảng> ([ds cột, ] <tên

cột> <kdl> [CONSTRAINT <tên RB>]UNIQUE

[,ds cột])

• Ví dụ:

CREATE TABLE KhachHang (

makh int PRIMARY KEY,

tenkh nvarchar(30),

diachi nvarchar(30),

sodt char(10) UNIQUE )

Tạo bảng – Ràng buộc- Khóa ngoại (foreign key)

• Một khóa ngoại trong một bảng là một cột, nó chỉ

đến một khóa chính trong một bảng khác

• Ràng buộc khóa ngoại được sử dụng để đảm bảo

toàn vẹn tham chiếu

• Cú pháp:– CREATE TABLE <tên bảng 1>(

[ds cột,]

<tên<tên cột> <kdl> [CONSTRAINTRB>]FOREIGN KEY REFERENCES

<tên bảng 2>(cột làm khóa chính> [, dscột])

Tạo bảng – Ràng buộc- Khóa ngoại (foreign key)

• Ví dụ:

CREATE TABLE Nhanvien(

manv char(5) NOT NULL,

tennv nvarchar(30),

manqly char(5),

phong int foreign key references

PhongBan(maphong)

)

• Hoặc có thể viết như sau:

Tạo bảng – Ràng buộc- Khóa ngoại (foreign key)

• Ví dụ: (tt)

• Hoặc có thể viết như sau:CREATE TABLE Nhanvien(

manv char(5) NOT NULL,tennv

nvarchar(30),

manqly char(5), phong int

constraint fk_nv_pb foreign key(phong)

references PhongBan(maphong)

)

Tạo bảng – Ràng buộc- Ràng buộc kiểm tra (Check)

• Ràng buộc check

– Được sử dụng để chỉ định điều kiện hợp lệ đối với dữ

liệu

• Cú pháp:

– CREATE TABLE <Tên bảng>(

[CONSTRAINT[ds cột,] <tên cột> <kdl><tên RB>] CHECK (<điều kiện>)

• Ví dụ:Create table KetQua(

masv int, mamh char(4),

diem float,

lanthi int check(lanthi<3)

Nội dung chương 3

• Các kiểu dữ liệu trong SQL

• Câu lệnh định nghĩa dữ liệu

Tạo bảng

Câu lệnh cập nhật dữ liệu

Câu lệnh thay đổi cấu trúc bảng

Xóa bảng

Câu lệnh cập nhật dữ liệu

• Là câu lệnh dùng để cập nhật dữ liệu.

• Bao gồm các câu lệnh: INSERT, UPDATE,

DELETE.

– Lệnh thêm dữ liệu vào bảng:

INSERT INTO <Tên bảng> [(<DS các

trường>)] VALUES (<DS các giá trị tương

ứng>)

Câu lệnh cập nhật dữ liệu (tt)

– Lệnh thêm dữ liệu vào bảng: (tt)

– Vd: MON (MaMH, TenMH, DVHT)

Thêm vào bảng MON với mã môn TH345, tên môn

Cơ sở dữ liệu, đơn vị học trình là 5

VALUES ('TH345', 'Cơ sởINSERT INTO MON

dữ liệu',5)

Hoặc:

INSERT INTO MON (MaMH, TenMH, DVHT)

VALUES('TH345', 'Cơ sở dữ liệu',5)

Câu lệnh cập nhật dữ liệu (tt)

• Một số lưu ý:

– Thêm ký tự N trước chuỗi Unicode

• Ví dụ:

insert into NhanVien

văn Trường’,values(‘NV01’,N’Nguyễn

‘Nam’)

– Thuộc tính NOT NULL

• Nếu thuộc tính được khai báo là NOT NULL thì bắt buộc phải

có giá trị khi nhập 1 bộ vào bảng

Câu lệnh cập nhật dữ liệu (tt)

• Một số lưu ý (tt)

– Nhập dữ liệu khi đã có ràng buộc khóa ngoại

• Trường hợp 1:

– Cách 1:

• B1: Nhập PHONGBAN

• B2: Nhập DEAN

– Cách 2:

• B1: Nhập DEAN, nhập phong = null

• B2: Nhập PHONGBAN

• B3: Cập nhật DEAN

Câu lệnh cập nhật dữ liệu (tt)

• Một số lưu ý (tt)

– Nhập dữ liệu khi đã có ràng buộc khóa ngoại

• Trường hợp 2:

– Cách 1:

• B1: Nhập NHANVIEN, đặt phong = null

• B2: Nhập PHONGBAN

• B3: Cập nhật thuộc tính phong của

NHANVIEN

– Cách 2:

• B1: Nhập PHONGBAN, đặt trphong =

null

• B2: Nhập NHANVIEN

• B3: Cập nhật PHONGBAN

Câu lệnh cập nhật dữ liệu (tt)

• Một số lưu ý (tt)

– Nhập dữ liệu khi đã có ràng buộc khóa ngoại

• Trường hợp 3:

– Cách 1:

• Những nhân viên có manql là null thì

nhập trước

• Sau đó nhập những nhân viên mà

đã nhập thông tin người quản lý

nhân viên đó.

– Cách 2:

• B1: Nhập NHANVIEN đặt manql =

null

• B2: Cập nhật manql của NHANVIEN

Câu lệnh cập nhật dữ liệu (tt)

- Lệnh Update, Delete

• Lệnh cập nhật dữ liệu trong bảng:

UPDATE <Tên bảng> SET <Tên trường1> =

<GT1>,...., <Tên trườngN> =

<GTN> [WHERE <điều kiện>]

• Vd: Cập nhật số DVHT cho môn học 'TH345' tăng

1

UPDATE MON SET DVHT = DVHT + 1

WHERE MaMH = 'TH345'

Câu lệnh cập nhật dữ liệu (tt)

- Lệnh Update, Delete

• Lệnh xóa dữ liệu khỏi bảng:

DELETE FROM <Tên bảng> [WHERE <điều

kiện chọn>]

• Vd: Xóa các môn học có số DVHT nhỏ hơn 2

DELETE FROM MON WHERE DVHT < 2

• Lưu ý: Câu lệnh delete chỉ xóa dữ liệu của bảng, cấu

trúc bảng tạo bởi câu lệnh create table vẫn được giữ

nguyên.

Nội dung chương 3

• Các kiểu dữ liệu trong SQL

• Câu lệnh định nghĩa dữ liệu

Tạo bảng

Câu lệnh cập nhật dữ liệu

Câu lệnh thay đổi cấu trúc bảng

Xóa bảng

Các lệnh về thay đổi cấu trúc bảng- Thêm, xóa, sửa một cột (thuộc tính)

• Thêm một cột vào bảng có sẵn

– Cú pháp

ALTER TABLE <tên bảng> ADD <tên cột 1>

<kdl1>[,<tên cột 2> <kdl2>, ...]

– Ví dụ: Thêm cột ngaysinh vào bảng NhanVien

ALTER TABLE NhanVien ADD ngaysinh datetime

Các lệnh về thay đổi cấu trúc bảng- Thêm, xóa, sửa một cột (thuộc tính) (tt)

• Chỉnh sửa cột trong bảng

– Cú pháp

ALTER TABLE <table_name>

ALTER COLUMN <tên cột 1> <kdl1>

[,<tên cột 2> <kdl2> ...]

– Ví dụ: Sửa cột tennv trong bảng NhanVien thành cột

có kiểu dữ liệu là nvarchar(20)ALTER TABLE NhanVien ALTER column tennv

nvarchar(20)

Các lệnh về thay đổi cấu trúc bảng- Thêm, xóa, sửa một cột (thuộc tính) (tt)

• Xóa cột trong bảng

– Cú pháp

ALTER TABLE <table_name> DROP COLUMN

<column_name1> [,<column_name2>

– Ví dụ: Xóa cột diadiem trong bảng PhongBan

TABLE PhongBan DROP COLUMNALTERdiadiem

Thêm ràng buộc khóa chính

• Thêm RB khóa chính

– Cú pháp

ALTER TABLE <tên bảng> ADD CONSTRAINT

<tên RB> PRIMARY KEY (<DS các cột làm

khóa chính>)

- Ví dụ: Thêm khóa chính cho bảng KetQua

ALTER TABLE KetQua ADD CONSTRAINT pk_kq

PRIMARY KEY(masv,mamh)

Thêm ràng buộc khóa ngoại

• Thêm RB khóa ngoại

– Cú pháp

ALTER TABLE <tên bảng> ADD CONSTRAINT

<tên RB> FOREIGN KEY (<DS các cột làm

khóa ngoại>) REFERENCES <tên bảng tham

chiếu>(<ds cột>)

- Ví dụ: Thêm RB khóa ngoại cho bảng KetQua

ALTER TABLE KetQua ADD CONSTRAINT

fk_kq_sv FOREIGN KEY(masv) REFERENCES

SinhVien(masv)

Thêm ràng buộc kiểm tra (check)

• Thêm RB kiểm tra

– Cú pháp

ALTER TABLE <tên bảng> ADD CONSTRAINT

<tên RB> CHECK(<điều kiện>)

- Ví dụ: Thêm RB kiểm tra đảm bảo thuộc tính phai

trong bảng NhanVien chỉ nhận giá trị “nam” hoặc

“nữ”

ALTER TABLE NhanVien ADD CONSTRAINT

ck_phai CHECK(phai in (‘nam’,’nu’))

Xóa ràng buộc khóa chính, khóa ngoại, check

• Cú pháp

ALTER TABLE <tên bảng> DROP CONSTRAINT

<tên RB>

- Ví dụ:

- Xóa RB kiểm tra trong bảng NhanVien

ALTER TABLE NhanVien

DROP CONSTRAINT ck_phai

- Xóa RB khóa ngoại trong bảng KetQua

ALTER TABLE KetQua

DROP CONSTRAINT fk_kq_sv

Nội dung chương 3

• Các kiểu dữ liệu trong SQL

• Câu lệnh định nghĩa dữ liệu

Tạo bảng

Câu lệnh cập nhật dữ liệu

Câu lệnh thay đổi cấu trúc bảng

Xóa bảng

Xóa bảng

• Cú pháp:

Drop table <tên bảng>

• Ví dụ: Xóa bảng NhanVien

Drop table NhanVien

Xóa bảng (tt)

• Lưu ý khi xóa bảng có liên quan đến khóa ngoại:

– Nếu không có tham chiếu vòng thì tiến hành xóa bảng

chứa khóa ngoại trước sau đó xóa bảng còn lại, hoặc

xóa khóa ngoại rồi sau đó tiến hành xóa các bảng.

– Nếu có tham chiếu vòng thì xóa một khóa để làm mất

tham chiếu vòng rồi tiến hành như trường hợp 1.

– Có thể sử dụng câu lệnh sau làm vô hiệu hóa các RB

trên bảng trước khi xóa bảng:

Alter table <tên bảng> nocheck

constraint all

Ví dụ tổng hợp

• Tạo csdl QLDT gồm các lược đồ sau:

– SINHVIEN (MaSV, Hoten, Namsinh, QQ, Hocluc)

– DETAI (MaDT, TenDT, Chunhiem, Kinhphi)

– SV_DT (MaSV, MaDT, NoiAD, KQ)

• Ta có các câu lệnh SQL sau:

Create database QLDT

Use QLDT

Create table SinhVien(

masv int primary key, hoten nvarchar(30),

namsinh datetime, qq nvarchar(20), hoclucfloat)

Ví dụ tổng hợp

Create table DeTai(

madt int primary key, tendt

nvarchar(30),

chunhiem nvarchar(30), kinhphi int)

Create table SV_DT(

masv int foreign key references

SinhVien(masv),

madt int foreign key references

DeTai(madt),

noiAD nvarchar(20), kq float,

pk_svdt primaryconstraint

key(masv,madt))

Bài tập

• Cho lược đồ csdl quản lý hàng hóa như sau:

HangHoa(MaHG, TenHG, DVT, Dongia, Cohang)

Khach(MaKH, Hoten, Diachi, Daily, sodienthoai)

HoaDon(SoHD, Ngaylap, Ngaygiao, Trigia, MaKH)

Chitiet_HD(SoHD, MaHG, Soluong, Giaban)

• Thực hiện các công việc sau:

– 1. Viết câu lệnh để tạo tất cả các bảng dựa vào các LĐQH trên(có đầy đủ RB khóa chính, khóa ngoại và not null).

– 2. Trong bảng Khach, viết câu lệnh sửa cột diachi thànhnvarchar(30), giả sử trước đó cột này có kiểu char(20).

– 3. Viết câu lệnh kiểm tra RB trên bản Chitiet_HD.

– 4. Viết câu lệnh không kiểm tra RB trên bảng HoaDon.

– 5. Thêm RB kiểm tra cho thuộc tính cohang trong bangHangHoa là 0 hoặc 1.

– 6. Thêm RB duy nhất cho thuộc tính sodienthoai trong bảngKhach.

Phạm Thị Thu ThúyKhoa CNTT, Đại học Nha Trang

[email protected]

Chương IV:

Transact-SQL và truy vấn dữ liệu

Nội dung chương IV

• Câu lệnh thao tác dữ liệu

Truy vấn dữ liệu cơ bản

Truy vấn lồng

Hàm kết hợp và gom nhóm

Một số dạng truy vấn khác

• Khung nhin

Cơ sở dữ liệu ví dụ

• Trong suốt phần sau của chương này, ta sử dụng

csdl sau làm ví dụ minh họa:

– NhanVien(manv, honv, tenlot, tennv, ngaysinh, diachi,

phai, luong, manql, phong)

– PhongBan(maphong,tenphong,trphong, ngnhanchuc)

– DDPhong(maphong, diadiem)

– DeAn(tenda, mada, ddiemda, phong)

– PhanCong(manvien, soda, thoigian)

– ThanNhan(manvien, tentn, phai, ngaysinh, quanhe)

– Cho phép kết quả trả về của bảng có nhiều dòng trùng

nhau

Phép toán ĐSQH Một số bổ sung

Truy vấn dữ liệu

• Là ngôn ngữ rút trích dữ liệu

– Thường đi kèm với một số điều kiện nào đó

• Dựa trên

• Gồm 3 mệnh đề

• Tên các cột cần được hiển thị trong kết quả truy vấn

– <danh sách các bảng>

• Tên các bảng liên quan đến câu truy vấn

– <điều kiện>

Biểu thức boolean xác định dòng nào sẽ được rút trích

Nối các biểu thức: AND, OR, và NOT

Phép toán: , , , , , , LIKE và BETWEEN

SELECT [DISTINCT] <danh sách các cột>

FROM <danh sách các bảng>

[WHERE] <điều kiện>

– <danh sách các cột>:

Từ khóa DISTINCT để loại

bỏ các dòng trùng nhau

trong bảng kết quả

Truy vấn cơ bản

SELECT <danh sách các cột>

FROM <danh sách các bảng>

WHERE <điều kiện>

SELECT L

FROM R

WHERE C

L (C (R))

Truy vấn cơ bản (tt)

• SQL và ĐSQH

• Ví dụ: Cho biết ds sinh viên lớp có mã lớp là "Ti01"

SELECT *

FROM SinhVien

WHERE malop = ‘Ti01’

– Tương đương với biểu thức đsqh sau:

malop = ‘Ti01’ (SinhVien)

Dấu * để chỉ tất cả các cột

Truy vấn cơ bản (tt)

• Ví dụ: Cho biết ds sinh viên nam của lớp có mã

"Ti01"SELECT masv, hoten, ngaysinh, phai, malop

FROM SinhVien

WHERE malop = ‘Ti01’ and phai = ‘Nam’

– Tương đương với biểu thức đsqh sau:

(malop =masv, hoten, ngaysinh, phai, malop

‘Ti01’and phai=‘Nam’ (SinhVien))

Truy vấn cơ bản (tt)

Truy vấn cơ bản (tt)

• Tên bí danh:

– Có thể đặt lại tên cho ds các thuộc tính trong bảng kết

quả (gọi là tên bí danh) bằng cách sử dụng cú pháp

sau:

Select <tên cột> AS <tên mới cho cột>

– Ví dụ

SELECT masv AS ma, hoten AS ‘Ho ten’,

ngaysinh, phai, malop

FROM SinhVien

WHERE malop = ‘Ti01’ and phai = ‘Nam’

Truy vấn cơ bản (tt)

• Ví dụ: Cho biết mã số, họ tên, ngày sinh, tên lớp

của danh sách sinh viên lớp "công nghệ thông tin

01"

SELECT

FROM

WHERE

maso, hoten, ngaysinh, tenlop

SinhVien, LopHoc

tenlop = ‘Cong nghe thong tin

01’ AND SinhVien.malop = LopHoc.malop

Truy vấn cơ bản (tt)

• Tên bí danh cho bảng

– Ví dụ: Cho biết mã số, họ tên, ngày sinh, tên lớp của

danh sách sinh viên lớp "công nghệ thông tin 01"

Select

From

maso, hoten, ngaysinh, tenlop

SinhVien sv, LopHoc lh

Where tenlop = =‘Cong nghe thong

tin 01’

and sv.malop = lh.malop

Truy vấn cơ bản (tt)- Toán tử between, not between, like, not like

• BETWEEN

– Sử dụng để kiểm tra giá trị dữ liệu nằm trong (ngoài)một khoảng nào đó.

SELECT MANV, TENNV

FROM NHANVIEN

WHERE LUONG > 20000 AND LUONG < 30000

• Có thể viết:

SELECT MANV, TENNV

FROM NHANVIEN

WHERE LUONG BETWEEN 20000 AND 30000

• Sử dụng NOT BETWEEN tương tự

Truy vấn cơ bản (tt)- Toán tử between, not between, like, not like

• LIKE

– Từ khóa LIKE (NOT LIKE) được sử dụng trong câu

lệnh select nhằm mô tả khuôn dạng dữ liệu cần tìm

kiếm.

– Thường được kết hợp với các ký tự đại diện sau:

• %: chuỗi ký tự bất kỳ (có thể là không có hoặc nhiều ký tự)

• _: ký tự đơn bất kỳ

• []: ký tự đơn bất kỳ trong giới hạn được chỉ định (ví dụ [a-f])

hay một tập (ví du: [abcdef])

• [^]: ký tự đơn bất kỳ không nằm trong giới hạn được chỉ định

(ví dụ [^a-f]) hay một tập (ví dụ [^abcdef]).

Truy vấn cơ bản (tt)- Toán tử between, not between, like, not like

• LIKE (tt)

– Ví dụ:

SELECT masv, hoten, ngaysinh

FROM SinhVien

WHERE hoten LIKE ‘Nguyen _ _ _ _’

– Hoặc

SELECT masv, hoten, ngaysinh

FROM SinhVien

WHERE hoten LIKE ‘Nguyen %’

• Sử dụng NOT LIKE tương tự

– Lưu ý:

• Like “ab\%cd%” cho ra những chuỗi bắt đầu với “ab%cd”

• Like “ab\\cd%” cho ra những chuỗi bắt đầu với “ab\cd”

Truy vấn cơ bản (tt)

- Ví dụ

• Với những đề án ở "Ha Noi", cho biết mã đề án, mã

phòng ban chủ tri đề án, họ tên trưởng phòng cùng

với ngày sinh và địa chỉ của người ấy

Truy vấn cơ bản (tt)

- Ví dụ

• Cho biết họ tên của nhân viên phòng số 5 có tham

gia vào đề án “Sản phẩm X” với số giờ làm việc trên

10 giờ

Truy vấn cơ bản- Mệnh đề ORDER BY

• Dùng để hiển thị kết quả câu truy vấn theo một thứ

tự nào đó

• Cú pháp:SELECT <ds các cột>

FROM <ds các bảng>

WHERE <điều kiện>

ORDER BY <danh sách các cột><kiểu sắp>

– Trong đó <kiểu sắp> có thể là:

• ASC: tăng (mặc định)

• DESC: giảm

Truy vấn cơ bản- Mệnh đề ORDER BY (tt)

• Ví dụ:SELECT MANVIEN, SODA

FROM PHANCONG

ORDER BY MANVIEN DESC, SODA

SODA

10

30

10

30

10

20

30

MANVIEN

999887777

999887777

987987987

987987987

987654321

987654321

987654321

Nội dung chương IV

• Câu lệnh thao tác dữ liệu

Truy vấn dữ liệu cơ bản

Truy vấn lồng

Hàm kết hợp và gom nhóm

Một số dạng truy vấn khác

• Khung nhin

Truy vấn lồng

• Các câu lệnh SELECT có thể lồng nhau ở nhiềumức

• Các câu truy vấn con trong cùng một mệnh đềWHERE được kết hợp bằng phép nối logic

• Câu truy vấn con thường trả về một tập các giá trị

• Cú pháp:

SELECT <danh sách các cột>

FROM <danh sách các bảng>

WHERE <so sánh tập hợp> (

SELECT <danh sách các cột>

FROM <danh sách các bảng>

WHERE <điều kiện>)

IN, NOT IN

ALL

ANY hoặc SOME

– Kiểm tra sự tồn tại

EXISTS

NOT EXISTS

Truy vấn lồng (tt)

• Mệnh đề WHERE của câu truy vấn cha

– <biểu thức> <so sánh tập hợp> <truy vấn con>

– So sánh tập hợp thường đi cùng với một số toán tử

Mệnh đề WHERE của truy vấn con không tham chiếu đến

thuộc tính của các quan hệ trong mệnh đề FROM ở truy vấn

cha

Khi thực hiện, câu truy vấn con sẽ được thực hiện trước, 1 lần

– Lồng tương quan

Mệnh đề WHERE của truy vấn con tham chiếu ít nhất một

thuộc tính của các quan hệ trong mệnh đề FROM ở truy vấn

cha

Khi thực hiện, câu truy vấn con sẽ được thực hiện nhiều lần,

mỗi lần tương ứng với một bộ của truy vấn cha

Truy vấn lồng (tt)

• Có 2 loại truy vấn lồng

– Lồng phân cấp

SELECT MANV, TENNV

FROM NHANVIEN, DDPhong

WHERE DIADIEM = ‘TP HCM’ AND phong = maphong

• Tương đương với câu truy vấn lồng sau:

SELECT MANV, TENNV

FROM NHANVIEN

WHERE PHONG IN (SELECT MAPHONG

FROM DDPHONG

WHERE DIADIEM = ‘TP HCM’

)

Truy vấn lồng (tt)- Ví dụ lồng phân cấp

• Ví dụ:

• Ví dụ: Tim những nhân viên không có thân nhân

nào

Truy vấn lồng (tt)- Ví dụ lồng phân cấp

• Ví dụ:SELECT MANV, TENNV

FROM NHANVIEN

WHERE EXISTS (

SELECT *

FROM PHONGBAN

WHERE TENPHONG=‘Nghien cuu’ AND PHONG=MAPHONG)

Câu truy vấn trên cho kết quả gi? Tương đương với

câu truy vấn đơn giản nào?SELECT MANV, TENNV

FROM NHANVIEN, PHONGBAN

WHERE TENPHONG=‘Nghien cuu’ AND PHONG=MAPHONG

Truy vấn lồng (tt)- Ví dụ lồng tương quan

• Tim nhân viên có người thân cùng tên và cùng giới

tính với nhân viên đó

Truy vấn lồng (tt)- Ví dụ

• Tim những nhân viên có lương lớn hơn lương của ít

nhất một nhân viên phòng 4

• Tim những nhân viên có lương lớn hơn lương của

tất cả nhân viên phòng 4

Truy vấn lồng (tt)- Ví dụ

Truy vấn lồng (tt)- Nhận xét

• IN

– <tên cột> IN <câu truy vấn con>

– Thuộc tính ở mệnh đề SELECT của truy vấn con phải

có cùng kiểu dữ liệu với thuộc tính ở mệnh đề

WHERE của truy vấn cha

• EXISTS

– Không cần có thuộc tính, hằng số hay biểu thức nào

khác đứng trước

– Không nhất thiết liệt kê tên thuộc tính ở mệnh đề

SELECT của truy vấn con

– Những câu truy vấn có = ANY hay IN đều có thể

chuyển thành câu truy vấn có EXISTS

Nội dung chương IV

• Câu lệnh thao tác dữ liệu

Truy vấn dữ liệu cơ bản

Truy vấn lồng

Hàm kết hợp và gom nhóm

Một số dạng truy vấn khác

• Khung nhin

Hàm kết hợp và gom nhóm

• Hàm kết hợp:

– Được sử dụng trong mệnh đề SELECT

– Có các hàm kết hợp sau:

• COUNT

– COUNT(*) đếm số dòng

– COUNT(<tên thuộc tính>) đếm số giá trị khác NULL của

thuộc tính

– COUNT(DISTINCT <tên thuộc tính>) đếm số giá trị khác

nhau và khác NULL của thuộc tính

– MIN

• MAX

• SUM

• AVG

Hàm kết hợp và gom nhóm (tt)

• Ví dụ:

– Tìm tổng lương, lương cao nhất, lương thấp nhất và

lương trung bình của các nhân viên

– Select sum(luong) as ‘tong luong’,

min(luong)

max(luong)

as

as

‘luong

‘luong

nho

lon

nhat’,

nhat’,

avg(luong) as ‘luong tb’

From NhanVien

– Cho biết số lượng nhân viên của phòng "Nghien cuu"

Hàm kết hợp và gom nhóm (tt)

• Gom nhóm:

– Nhóm các bộ có cùng giá trị ở một tập các thuộc tính

lại với nhau

– Cú pháp:

SELECT <danh sách các cột>

FROM <danh sách các bảng>

WHERE <điều kiện>

GROUP BY <danh sách các cột gom nhóm>

Hàm kết hợp và gom nhóm (tt)

• Ví dụ:

– Cho biết số lượng nhân viên của từng phòng ban

– Cho biết thông tin của những phòng ban có nhiều hơn

10 nhân viên

Hàm kết hợp và gom nhóm (tt)

• Ví dụ:

– Với mỗi nhân viên cho biết mã số, họ tên, số lượng đề

án và tổng thời gian mà họ tham gia

SELECT

FROM

WHERE

GROUP BY

MANV, HONV, TENNV,

COUNT(*) AS SL_DA,SUM(THOIGIAN) AS TONG_TG

PHANCONG, NHANVIEN

MANVIEN=MANV

MANV, HONV, TENNV

– Cho biết những nhân viên tham gia từ 2 đề án trở lên

Hàm kết hợp và gom nhóm (tt)

• Cú pháp:

SELECT <danh sách các cột>

FROM <danh sách các bảng>

WHERE <điều kiện>

GROUP BY <danh sách các cột gom nhóm>

HAVING <điều kiện trên nhóm>

• Ví dụ: Cho biết những nhân viên tham gia từ 2 đề

án trở lên

Hàm kết hợp và gom nhóm (tt)

• Ví dụ:

– Cho biết những phòng ban (TENPHONG) có lương

trung bình của các nhân viên lớn lơn 20000

Hàm kết hợp và gom nhóm (tt)- Nhận xét

• Mệnh đề GROUP BY

– Các thuộc tính trong mệnh đề SELECT (trừ những

thuộc tính trong các hàm kết hợp) phải xuất hiện trong

mệnh đề GROUP BY

• Mệnh đề HAVING

– Sử dụng các hàm kết hợp trong mệnh đề SELECT để

kiểm tra một số điều kiện nào đó

– Chỉ kiểm tra điều kiện trên nhóm, không là điều kiện

lọc trên từng bộ

– Sau khi gom nhóm điều kiện trên nhóm mới được

thực hiện

Hàm kết hợp và gom nhóm (tt)- Nhận xét

• Thứ tự thực hiện câu truy vấn có mệnh đề GROUP

BY và HAVING

– (1) Chọn ra những dòng thỏa điều kiện trong mệnh đề

WHERE

– (2) Những dòng này sẽ được gom thành nhiều nhóm

tương ứng với mệnh đề GROUP BY

– (3) Áp dụng các hàm kết hợp cho mỗi nhóm

– (4) Bỏ qua những nhóm không thỏa điều kiện trong

mệnh đề HAVING

– (5) Rút trích các giá trị của các cột và hàm kết hợp

trong mệnh đề SELECT

Hàm kết hợp và gom nhóm (tt)

• Ví dụ:

– Tìm phòng ban có lương trung bình cao nhất

– Tìm 3 nhân viên có lương cao nhất

– Tìm tên các nhân viên được phân công làm tất cả các

đồ án

Nội dung chương IV

• Câu lệnh thao tác dữ liệu

Truy vấn dữ liệu cơ bản

Truy vấn lồng

Hàm kết hợp và gom nhóm

Một số dạng truy vấn khác

• Khung nhin

203

Điều kiện kết ở mệnh đề FROM

• Thông thường điều kiện của phép kết nối được chỉ

định trong mệnh đề where của câu truy vấn.

• Chuẩn SQL2 đưa ra một cách khác để biểu diễn

cho phép nối. Trong cách biểu diễn này:

– Điều kiện của phép kết nối được chỉ định ngay trong

mệnh đề From.

– Ưu điểm: Cho phép biểu diễn phép nối và điều kiện

nối rõ ràng (đặc biệt trong trường hợp phép nối được

thực hiện từ 3 bảng trở lên)

41

Điều kiện kết ở mệnh đề FROM (tt)

• Kết nối bằng (kết nối trong)

– Cú pháp:

SELECT <danh sách các cột>

<biểuFROM

WHERE

R1 [INNER] JOIN R2 ON

thức>

<điều kiện>

42

Điều kiện kết ở mệnh đề FROM (tt)

• Kết nối bằng (kết nối trong)

- Ví dụ: Hiển thị họ tên đầy đủ, ngày sinh, địa chỉ củacác nhân viên phòng “Nghien cuu“.

Có thể viết theo 2 cách như sau:

select

From

honv, tenlot, tennv, ngaysinh, diachi

NhanVien, PhongBan

Where phong = maphong

and tenphong = ‘Nghien cuu’

- Hoặc có thể viết:select honv, tenlot, tennv, ngaysinh, diachi

From NhanVien INNER JOIN PhongBan ON

phong = maphong

Where tenphong = ‘Nghien cuu’

43

Điều kiện kết ở mệnh đề FROM (tt)

Nhận xét

- Kết nối trong trả về những dòng có giá trị trong các cột đượcchỉ định thỏa mãn điều kiện kết nối, không trích xuất các dòng

không thỏa mãn.

- Để hiển thị cả những thông tin thỏa mãn và không thỏa

mãn điều kiện nối ta có thể sử dụng phép nối ngoài.

(những thông tin không thỏa mãn có giá trị NULL)

44

Điều kiện kết ở mệnh đề FROM (tt)

• Kết nối ngoài

– Cú pháp:

SELECT <danh sách các cột>

FROM R1 LEFT|RIGHT|FULL [OUTER] JOIN R2

<biểu thức>WHERE <điều kiện>

ON

45

Điều kiện kết ở mệnh đề FROM (tt)

• Kết nối ngoài– Ví dụ: Ta có 2 bảng PhongBan và DDPhong như sau:

• Kết nối ngoài trái 2 bảng trên cho kết quả sau:

select *

from PhongBan left join

DDPhong on

PhongBan.maphong =

DDPhong.maphong

Điều kiện kết ở mệnh đề FROM (tt)

• Kết nối ngoài– Ví dụ: Ta có 2 bảng PhongBan và DDPhong như sau:

• Kết nối ngoài phải 2 bảng trên cho kết quả sau:

select *

from PhongBan right join

DDPhong on

PhongBan.maphong =

DDPhong.maphong

Điều kiện kết ở mệnh đề FROM (tt)

• Kết nối ngoài– Ví dụ: Ta có 2 bảng PhongBan và DDPhong như sau:

• Kết nối ngoài đầy đủ 2 bảng trên cho kết quả sau:

select *

from PhongBan full join

DDPhong on

PhongBan.maphong =

DDPhong.maphong

Điều kiện kết ở mệnh đề FROM (tt)

• Ví dụ:

– Tìm mã và tên các nhân viên làm việc tại phòng

“Kinh doanh"

– Cho biết họ tên nhân viên và tên phòng ban mà họ là

trưởng phòng

49

Điều kiện kết ở mệnh đề FROM (tt)

• Ví dụ:

– Tìm họ tên các nhân viên và tên các đề án nhân viên

tham gia (nếu có)

– Tìm họ tên các nhân viên không có thân nhân nào(not exists / left joint)

50

Một số dạng câu truy vấn khác

• Tìm họ tên của những trưởng phòng không có

thân nhân nào.

• Danh sách những trưởng phòng có tối thiểu một thân

nhân (có ít nhất một thân nhân, có từ một thân nhân trở.

51

Nội dung chương IV

• Câu lệnh thao tác dữ liệu

Truy vấn dữ liệu cơ bản

Truy vấn lồng

Hàm kết hợp và gom nhóm

Một số dạng truy vấn khác

• Khung nhìn

52

Khung nhìn (View)

• Bảng là một quan hệ được tổ chức lưu trữ vật lý

trong CSDL

• Khung nhin cũng là một quan hệ

Không được lưu trữ vật lý (bảng ảo)

Không chứa dữ liệu

Được định nghĩa từ những bảng khác

Có thể truy vấn hay cập nhật thông qua khung nhìn

53

Khung nhìn (View)- Định nghĩa

• Tạo khung nhin

– CREATE VIEW <tên khung nhìn> AS <câu

truy vấn>

– Bảng ảo này có

• Danh sách thuộc tính trùng với các thuộc tính trong mệnh đề

SELECT

• Số dòng phụ thuộc vào điều kiện ở mệnh đề WHERE

• Dữ liệu được lấy từ các bảng ở mệnh đề FROM

• Xóa bỏ khung nhin:

DROP VIEW <tên khung nhìn>

54

Khung nhìn (View)- Ví dụ

• Tạo khung nhìn NVP3 chứa danh sách các nhân

viên phòng số 3

CREATE VIEW NVP3 AS

SELECT MANV, HONV, TENLOT, TENVN, LUONG

FROM NHANVIEN

WHERE PHONG=3

• Sử dụng khung nhin như một bảng

SELECT TENNV

FROM NVP3

WHERE luong > 2000

55

Khung nhìn (View)- Cập nhật, bổ sung và xóa dữ liệu qua view

• SV tự tìm hiểu (tương tự như cập nhật, bổ sung và xóa

dữ liệu trên table)

56

• Cho csdl sau:

Tacgia(matg, hotentg, namsinh, quequan, madv)

Donvi(madv, tendv, socb)

Tapchi(matc, tentc, noixb)

Chitiettc(macttc, matc, sora, sotrang)

Baibao(mabb, tenbb, macttc, ngaydang)

Tacgia_baibao(matg, mabb)

• Cho biết ds bài báo đăng vào ngày 19/2/2009

• Cho biết ds các chi tiết tạp chí của tạp chí “Khoa

học công nghệ”

• Cho biết danh sách tác giả (matg, hoten, namsinh,

tendv) là tác giả của bài báo có mã "bbcntt01"

• Cho biết ds tác giả (matg, hoten) của những tác giả

không có bài báo nào57

• Cho csdl sau:

Tacgia(matg, hotentg, namsinh, quequan, madv)

Donvi(madv, tendv, socb)

Tapchi(matc, tentc, noixb)

Chitiettc(macttc, matc, sora, sotrang)

Baibao(mabb, tenbb, macttc, ngaydang)

Tacgia_baibao(matg, mabb)

• 1. Cho biết ds các bài báo (mabb, tenbb, ngaydang,

tentc, sora), của tạp chí “khoa học và công nghệ”

số 4)

• 2. Cho biết ds tác giả (matg, hoten, quequan, tendv)

có đăng bài trên tạp chí “Khoa học và ứng dụng”

58

– NhanVien(manv, honv, tenlot, tennv, ngaysinh, diachi,

phai, luong, manql, phong)

– PhongBan(maphong,tenphong,trphong, ngnhanchuc)

– DDPhong(maphong, diadiem)

– DeAn(tenda, mada, ddiemda, phong)

– PhanCong(manvien, soda, thoigian)

– ThanNhan(manvien, tentn, phai, ngaysinh, quanhe)

• Tim những nhân viên có lương lớn hơn lương của ít

nhất một nhân viên phòng 4

• Tim những nhân viên có lương lớn hơn lương của

tất cả nhân viên phòng 4

59

BÀI TẬP chương IV

• Cho lược đồ csdl QLBanHang được mô tả như sau:

60

BÀI TẬP chương IV (tt)

• Thực hiện các yêu cầu sau bằng SQL

Tạo csdl và tạo các bảng, nhập dữ liệu cho các bảng trong csdl

Cho biết mã và tên của các mặt hàng có giá lớn hơn 10 và số

lượng hiện có ít hơn 20

Cho biết thông tin những khách hàng nào đã mua mặt hàng áo

Việt Tiến

Cho biết thông tin những mặt hàng nào chưa từng được khách

hàng đặt mua?

Cho biết tổng số lượng bán được của mỗi mặt hàng

Bổ sung ràng buộc cho bảng DONDATHANG rang buộc kiểm

tra ngày giao hàng và ngày chuyển hàng phải sau hoặc bằng

với ngày đặt hàng.

Cho biết thông tin những khách hàng có cùng ngày sinh

Thống kê số lượng hóa đơn đã lập của mỗi nhân viên

61

CHƯƠNG 5:

LẬP TRÌNH VỚI TRANSACT- SQL

1

Phạm Thị Thu Thúy

Khoa CNTT, Đại học NhaTrang

[email protected]

THỦ TỤC LƯU TRỮ (STORE

PROCEDURE)2

BIẾN CỤC BỘ

Biến là một đối tượng có thể chứa dữ liệu

Dữ liệu có thể đưa vào các câu lệnh SQL dùng cục

bộ

Tên các biến cục bộ phải bắt đầu bằng @

Từ khóa SET hay SELECT được dùng để gán giá trị

cho biến cục bộ.

3

BIẾN CỤC BỘ (TT)

DECLARE @Tên_biến Kiểu_dữ_liệu [, ...]

Kiểu dữ liệu text, ntext hoặc image không đượcchấp nhận khi khai báo biến

Ví dụ: Để khai báo các biến lưu trữ giá trị tổng sốlượng đặt hàng, họ tên nhà cung cấp, ngày xuất

hàng. Sử dụng lệnh DECLARE như sau:

DECLARE @Tongsldat INT, @Hotenncc CHAR(50)DECLARE @Ngayxh DATETIME

4

BIẾN CỤC BỘ (TT) – GÁN GIÁ TRI CHO BIẾN

Từ khóa SET hay SELECT được dùng để gán

giá trị cho biến.

Cú pháp: SET @<tên biến cục bộ> = <giá trị>

Hoặc là:

SELECT @<Tên biến cục bộ> = <giá trị>

Chú ý: Phạm vi hoạt động của biến chỉ nằm

trong một thủ tục hoặc một lô có chứa lệnhkhai báo biến đó

5

BIẾN CỤC BỘ (TT) – GÁN GIÁ TRI CHO BIẾN

Ví dụ:

Để tính ra số lượng đặt hàng cao nhất của mặt hàng“Đầu DVD Hitachi 1 đĩa” có mã vật tư là “DD01”. Sử

dụng lệnh SELECT như sau:

DECLARE @MaxSldat INT

SELECT @MaxSldat=MAX(SLDAT)

FROM CTDONDH

WHERE MAVTU=‘DD01’

6

BIẾN CỤC BỘ (TT) – XEM GIÁ TRI HIÊN HÀNH

CỦA BIẾN

Để tính đồng thời giá trị số lượng đặt hàng thấpnhất và cao nhất, hiển thị kết quả ra màn hình. Ta

sử dụng lệnh SELECT và PRINT :

DECLARE @MinSldat INT, @MaxSldat INT

SELECT @MinSldat=MIN(SLDAT),@MaXSldat=MAX(SLDAT)

FROM CTDONDH

PRINT "Số lượng thấp nhất là : "

PRINT @MinSldat

PRINT "Số lượng cao nhất là : " +CONVERT(VARCHAR(10), @MaxSldat)

7

THỦ TỤC LƯU TRƯ

Tập hợp biên dịch các câu lệnh T-SQL được lưu trữ

với một tên xác định

Sử dụng để thực hiện các nhiệm vụ quản trị, hoặc áp

dụng các luật giao dịch phức tạp

Có hai loại thủ tục lưu trữ:

Thủ tục lưu trữ hệ thống đề cập đến phương pháp quản

trị dữ liệu và cập nhật thông tin vào các bảng (thường

bắt đầu bằng sp_).

Thủ tục lưu trữ do người dùng định nghĩa.

8

Sự nhất quán.

THỦ TỤC LƯU TRƯ - LỢI ÍCH

Tăng tốc độ thực hiện:

Thực thi tại server, biên dịch một lần

Tốc độ truy nhập dữ liệu nhanh hơn:

SQl không phải lựa chọn cách tốt nhất để xử lý các lệnhSQL và truy suất csdl mỗi khi chúng được biên dịch

Modular programming:

Một thủ tục có thể phân thành các thủ tục nhỏ hơn, cácthủ tục này có thể được dùng chung giữa các thủ tụckhác->giảm thời gian thiết kế và thực thi các thủ tục

đồng thời cũng dễ quản lý và gỡ rối.

Cải thiện sự bảo mật:

Nâng cao an toàn bảo mật. Có thể chỉ ra quyền thực thicho các thủ tục vì vậy nó thực hiện đúng tác vụ người

dùng.9

TAO THỦ TỤC LƯU TRƯ BẰNG SQL

SERVER MANAGEMENT

10

TAO THỦ TỤC LƯU TRƯ BẰNG SQL SERVER

MANAGEMENT (TT)

Tên thủ tục

Nội dung thủ

tục (thân thủtục)

11

TAO THỦ TỤC LƯU TRƯ BẰNG T-SQL

Tạo thủ tục lưu trữ trong csdl hiện thời bằng Cú pháp:

CREATE PROC[EDURE] <tên thủ tục>

[(<DSách tham số>) ]

[WITH ECOMPILE| ENCRYPTION| RECOMPILE,ENCRYPTION]

AS

[DECLARE <biến cục bộ>] <Các câu lệnh của thủ tục>

Các thủ tục lưu trữ có quyền truy cập tới tất cả các đối

tượng khi thủ tục được gọi.

2100 tham số có thể được sử dụng trong một thủ tục lưu

trữ. Tham số bắt đầu bởi @, cần chỉ ra kiểu dliệu của

tham số

Có thể tạo lập nhiều biến cục bộ trong thủ tục

Dung lượng tối đa của thủ tục lưu trữ là 128 MB.12

TAO THỦ TỤC LƯU TRƯ BẰNG T-SQL (TT)

Ví dụ: Cho CSDL quản lý điểm thi như sau:

13

TAO THỦ TỤC LƯU TRƯ BẰNG T-SQL (TT)

Giả sử ta cần thực hiện một chuỗi các thao tác trên

cơ sở dữ liệu 1. Bổ sung thêm môn học cơ sở dữ liệu có mã CST005

và số đơn vị học trình là 5 vào bảng MONHOC

2. Lên danh sách nhập điểm thi môn cơ sở dữ liệu cho

các sinh viên học lớp có mã CDT002 (bổ sung thêm vào

bảng DIEMTHI các bản ghi với cột MAMONHOC nhận

giá trị CST005, cột MASV nhận giá trị lần lượt là mã các

sinh viên học lớp có mã CDT002 và các cột điểm làNULL).

14

TAO THỦ TỤC LƯU TRƯ BẰNG T-SQL (TT)

Theo cách thông thường ta sẽ viết 2 lệnh như sau:

INSERT INTO monhoc

VALUES(‘CST005’, N‘Cơ sở dữ liệu’,5)

INSERT INTO diemthi(mamh,masv)

SELECT ‘CST005’, masv

FROM sinhvien

WHERE malop = ‘CDT002’

Lưu ý: ở đây bạn có cú pháp câu lệnh chèn dữ liệu vàomột bảng có tên banga với dữ liệu lấy từ bảng có tên

bangb khác như sau:INSERT INTO banga (cot1, cot2)

SELECT cot1, cot2 FROM bangb

15

Đây là mã

môn học, đã

cho trước

nên ghi cụ

thể ra luôn

TAO THỦ TỤC LƯU TRƯ BẰNG T-SQL (TT)

Thay vì phải viết 2 câu lệnh như trên, ta có thể định

nghĩa một thủ tục với các tham số sau @mamh,@tenmh, @sodvht, @malop để nhập dữ liệu chomột môn học bất kỳ và một lớp bất kỳ do người

dùng nhập vào khi sử dụng thủ tục.

16

TAO THỦ TỤC LƯU TRƯ BẰNG T-SQL (TT)

CREATE PROC sp_LenDanhSachDiem(@mamh NVARCHAR(10),

@tenmh@sodvht

@malop

NVARCHAR(50),SMALLINT,

CHAR(4)

ASBEGIN

INSERT INTO monhoc

VALUES(@mamh,@tenmh,@sodvht)

INSERT INTO diemthi(mamh,masv)SELECT @mamh,masv

FROM sinhvien

WHERE malop=@malop

END

Khi thủ tục trên đã được tạo ra, thực hiện được hai yêu cầutrên qua lời gọi thủ tục:

sp_LenDanhSachDiem ‘CST005','Cơ sở dữ liệu',5,‘L002' 17

THỰC THI CÁC THỦ TỤC NGƯỜI DÙNG

Lời gọi thủ tục có dạng:<tên_thủ_tục> [<danh_sách_các_đối_số>]

Số lượng các đối số và thứ tự của chúng phải phù hợp vớisố lượng và thứ tự của các tham số hình thức.

Nếu lời gọi thủ tục được thực hiện bên trong một thủ tụckhác, bên trong một trigger hay kết hợp với các câu lệnh

SQL khác, ta sử dụng cú pháp như sau:[EXECUTE] <tên_thủ_tục> [<danh_sách_các_đối_số>]

vdụ:

sp_LenDanhSachDiem ‘CST005','Cơ sở dữEXECUTEliệu',5,‘L002'

Thứ tự của các đối số được truyền cho thủ tục có thểkhông cần phải tuân theo thứ tự của các tham số như khi

định nghĩa thủ tục nếu tất cả các đối số được viết dướidạng:

@<tên_tham_số> = <giá_trị>

18

VD SỬ DỤNG BIẾN TRONG THỦ TỤC:

CREATE PROC sp_Vidu(@malop1 CHAR(4),@malop2CHAR(4))

ASDECLARE @tenlop1 NVARCHAR(30)

DECLARE @namnhaphoc1 INTDECLARE @tenlop2 NVARCHAR(30)

DECLARE @namnhaphoc2 INT

SELECT @tenlop1=tenlop,@namnhaphoc1=namnhaphocFROM lop WHERE malop=@malop1

SELECT @tenlop2=tenlop, @namnhaphoc2=namnhaphocFROM lop WHERE malop=@malop2

PRINT @tenlop1+' nhap hoc nam '+str(@namnhaphoc1)print @tenlop2+' nhap hoc nam '+str(@namnhaphoc2)

IF @namnhaphoc1=@namnhaphoc2PRINT 'Hai lớp nhập học cùng năm'

ELSEPRINT 'Hai lớp nhập học khác năm' 19

GIÁ TRI TRA VỀ CỦA THAM SỐ TRONG THỦ

TỤC

Trường hợp cần giữ lại giá trị của đối số sau khi kết thúc

thủ tục, khai báo tham số của thủ tục theo cú pháp:

@tên_tham_số kiểu_dữ_liệu OUTPUT

Hoặc:

@tên_tham_số kiểu_dữ_liệu OUT

Trong lời gọi thủ tục, sau đối số được truyền cho thủ tục,

cũng phải chỉ định thêm từ khoá OUTPUT (hoặc OUT)

CREATE PROCEDURE sp_Conghaiso(

@a

@b

@c

INT,

INT,

INT OUTPUT)

AS

SELECT @c=@a+@b20

GIÁ TRI TRA VỀ CỦA THAM SỐ TRONG THỦ TỤC

(TT)

Thực hiện lời gọi thủ tục trong một tập các câu

lệnh như sau:DECLARE @tong INT

SELECT @tong=0EXECUTE sp_Conghaiso 100,200,@tong OUTPUT

SELECT @tong

=> câu lệnh “SELECT @tong” sẽ cho kết quả là:

300

21

THỦ TỤC LƯU TRƯ - THAM SỐ GIÁ TRI MẶC

ĐINH

Tham số với giá trị mặc định được khai báo theo cú

pháp như sau:

@<tên_tham_số> <kdl> = <giá_trị_mặc_định>

22

THỦ TỤC LƯU TRƯ - THAM SỐ GIÁ TRI MẶC

ĐINH

CREATE PROC sp_TestDefault(AS

BEGIN

@tenlop NVARCHAR(30)=NULL,

@noisinh NVARCHAR(100)=‘Khánh Hòa’)

IF @tenlop IS NULLSELECT hodem,ten

FROM sinhvien INNER JOIN lopON sinhvien.malop=lop.malop

WHERE noisinh=@noisinhELSE

SELECT hodem,tenFROM sinhvien INNER JOIN lop

ON sinhvien.malop=lop.malopWHERE noisinh=@noisinh AND

tenlop=@tenlop

END23

THỦ TỤC LƯU TRƯ - THAM SỐ GIÁ TRI MẶC ĐINH

(TT)

Cho biết họ tên của các sinh viên sinh tại Huế:

sp_testdefault

Cho biết họ tên của các sinh viên lớp 54CTH sinh

tại Khánh Hòa: sp_testdefault @tenlop=‘54CTH‘

Cho biết họ tên của các sinh viên sinh tại Nghệ An:

sp_testDefault @noisinh=N'Nghệ An‘

Cho biết họ tên của các sinh viên lớp 53TH sinh

tại Đà Nẵng: sp_testdefault @tenlop=‘53TH',@noisinh='Đà Nẵng'

24

THỦ TỤC LƯU TRƯ - BIÊN DICH LAI THỦ

TỤC

Các thủ tục lưu trữ được biên dịch lại để phản ánh

sự thay đổi tới các chỉ số

Có ba cách để biên dịch lại các thủ tục: Sử dụng thủ tục hệ thống sp_recompile

RECOMPILE CREATEvới lệnhChỉ rõ WITH

PROCEDURE

Chỉ rõ WITH RECOMPILE với lệnh EXECUTE

25

THỦ TỤC LƯU TRƯ - THAY ĐỔI THỦ TỤC

LƯU TRƯ

Câu lệnh ALTER PROCEDURE được sử dụng để

sửa một thủ tục lưu trữ

Cú pháp giống như lệnh CREATE PROCEDURE

Sự thay đổi này vẫn giữ lại các quyền người dùng

Cp:

tên_thủ_tụcALTER PROCEDURE

[(danh_sách_tham_số)]

[WITH RECOMPILE|ENCRYPTION|

RECOMPILE,ENCRYPTION] AS

<Các_câu_lệnh_Của_thủ_tục>

26

THỦ TỤC LƯU TRƯ - XÓA THỦ TỤC

Sử dụng câu lệnh DROP PROCEDURE với cú pháp

như sau: DROP PROCEDURE <tên_thủ_tục >

27

THỦ TỤC LƯU TRƯ - TỔNG KẾT

Một thủ tục lưu trữ là một nhóm các câu lệnh SQL

được biên dịch lại.

Người phát triển CSDL hoặc người quản trị hệ

thống viết thủ tục để chạy các nhiệm vụ quản trịthông thường, hoặc để ứng dụng các luật giao dịch

phức tạp. Thủ tục lưu trữ chứa các thao tác hoặc cáccâu lệnh truy vấn dữ liệu.

Các thủ tục lưu trữ tăng tốc độ thực thi của truy

vấn, hỗ trợ truy cập dữ liệu nhanh, hỗ trợ việc lập

trình theo mô đun, duy trì tính nhất quán, và tăngtính bảo mật.

28

THỦ TỤC LƯU TRƯ - TỔNG KẾT (TT)

Có ba cách để biên dịch lại các thủ tục lưu trữ: Sử dụng thủ tục hệ thống sp_recompile

RECOMPILE CREATEvới lệnhChỉ rõ WITH

PROCEDURE

Chỉ rõ WITH RECOMPILE với lện EXECUTE

Câu lệnh ALTER PROCEDURE được sử dụng để

sửa chữa một thủ tục lưu trữ.

29

HÀM (FUNCTION)30

Hàm là đối tương CSDL tương tự như thủ tục

Có thể sử dụng hàm như một thành phần của

HÀM

Điểm khác biệt giữa hàm và thủ tục:

Hàm trả về một giá trị thông qua tên hàm còn thủ tụcthì không.

một biểu thức (chẳng hạn, trong danh sách chọn củalệnh SELECT).

Hàm do HQT CSDL cung cấp sẵn

Người sử dụng có thể định nghĩa các hàm nhằmphục vụ cho mục đích riêng của mình

31

HÀM

Hàm gồm 3 loại: Các hàm thao tác tập hợp

Hàm thao tác bản ghi

Hàm vô hướng

32

HÀM

Các hàm thao tác với tập bản ghi có thể đượcdùng thay cho tên các bảng trong SQL.

Các hàm tập hợp tính toán cho ra kết quả là mộtgiá trị đơn nhất (ví dụ tính tổng hay trung bình).

Các hàm vô hướng thao tác trên một giá trị và trảvề một giá trị. Các hàm này có thể được dùng

trong các biểu thức.

33

HÀM – ĐINH NGHĨA HÀM

CREATE FUNCTION tên_hàm ([danh_sách_tham_số])

RETURNS (kiểu_trả_về_của_hàm)AS

BEGINcác_câu_lệnh_của_hàm

END

34

HÀM – ĐINH NGHĨA HÀM (TT)

CREATE FUNCTION thu(@ngay DATETIME)

RETURNS NVARCHAR(10)

AS

BEGIN

DECLARE @st NVARCHAR(10)

SELECT @st=CASE DATEPART(DW,@ngay)

WHEN 1 THEN 'Chủ nhật'

WHEN 2 THEN 'Thứ hai'

WHEN 3 THEN 'Thứ ba'

WHEN 4 THEN 'Thứ tư'

WHEN 5 THEN 'Thứ năm'

WHEN 6 THEN 'Thứ sáu'

ELSE 'Thứ bảy' END

RETURN (@st) /* Trị trả về của hàm */

END35

HÀM – SỬ DỤNG HÀM

SELECT masv, hodem, ten,

dbo.thu(ngaysinh), ngaysinh

FROM sinhvien

WHERE malop=’C24102’

36

HÀM – HÀM VỚI GIÁ TRI TRA VỀ LÀ DƯ LIÊU

KIỂU BANG

tên_hàmCREATE FUNCTION

([danh_sách_tham_số]) RETURNS TABLE

AS

RETURN (câu_lệnh_select)

Qui tắc:

Kiểu trả về của hàm được chỉ định bởi mệnh đề

RETURNS TABLE.

Trong phần thân của hàm chỉ có duy nhất một câu lệnh

RETURN xác định giá trị trả về của hàm thông qua duy

nhất một câu lệnh SELECT (không sử dụng bất kỳ câu

lệnh nào khác trong phần thân của hàm).

37

HÀM – HÀM VỚI GIÁ TRI TRA VỀ LÀ DƯ LIÊU

KIỂU BANG (TT)

Vd: định nghĩa hàm xemsv

CREATE FUNCTION func_XemSV(@khoa

SMALLINT) RETURNS TABLE

AS

RETURN(SELECT masv,hodem,ten,ngaysinh

FROM sinhvien INNER JOIN lop

ON sinhvien.malop=lop.malop

WHERE khoa=@khoa)

38

HÀM – HÀM VỚI GIÁ TRI TRA VỀ LÀ DƯ LIÊU

KIỂU BANG (TT)

Khi cần sử dụng nhiều câu lệnh trong phần thân

hàm, sử dụng cú pháp sau:

<tên_hàm>CREATE FUNCTION([<danh_sách_tham_số>])

RETURNS @<biến_bảng> TABLE <định_nghĩa_bảng>

AS

BEGIN

<các_câu_lệnh_trong_thân_hàm>

RETURN

END

39

HÀM – HÀM VỚI GIÁ TRI TRA VỀ LÀ DƯ LIÊU

KIỂU BANG (TT)

Lưu ý:

Cấu trúc bảng trả về bởi hàm được xác địnhdựa vào định nghĩa của bảng trong mệnh đề

RETURNS.

Biến @<biến_bảng> trong mệnh đềRETURNS có phạm vi sử dụng trong hàm và

được sử dụng như một tên bảng.

Câu lệnh RETURN trong thân hàm không chỉđịnh giá trị trả về. Giá trị trả về của hàm chính

là các dòng dữ liệu trong bảng có tên là@<biếnbảng> được định nghĩa trong mệnh đề

RETURNS

40

HÀM – HÀM VỚI GIÁ TRI TRA VỀ LÀ DƯ LIÊU

KIỂU BANG (TT) – VÍ DỤ

CREATE FUNCTION Func_Tongsv(@khoa SMALLINT) RETURNS

@bangthongke TABLE (

makhoa

tenkhoa

tongsosv

NVARCHAR(5),

NVARCHAR(50),

INT

) AS

BEGIN

IF @khoa=0

INSERT INTO @bangthongke

SELECT khoa.makhoa,tenkhoa,COUNT(masv)

FROM (khoa INNER JOIN lop

ON khoa.makhoa=lop.makhoa) INNER JOIN sinhvien

ON lop.malop=sinhvien.malop

GROUP BY khoa.makhoa,tenkhoa

ELSE41

HÀM – HÀM VỚI GIÁ TRI TRA VỀ LÀ DƯ LIÊU

KIỂU BANG (TT)

INSERT INTO @bangthongke

SELECT khoa.makhoa,tenkhoa,COUNT(masv)

FROM (khoa INNER JOIN lop

ON khoa.makhoa=lop.makhoa)

INNER JOIN sinhvien

ON lop.malop=sinhvien.malop

WHERE khoa=@khoa

GROUP BY khoa.makhoa,tenkhoa

RETURN /*Trả kết quả về cho hàm*/

END

42

HÀM – HÀM VỚI GIÁ TRI TRA VỀ LÀ DƯ LIÊU

KIỂU BANG (TT)

Câu lệnh:

SELECT * FROM dbo.func_TongSV(25)

Sẽ cho kết quả thống kê tổng số sinh viên khoá 25 của

mỗi khoa:

Còn câu lệnh:

SELECT * FROM dbo.func_TongSV(0)

Cho ta biết tổng số sinh viên hiện có (tất cả các khoá)

của mỗi khoa

43

TRIGGER44

TRIGGER – TRIGGER LÀ GÌ?

Cấu trúc gần giống như một thủ tục nội tại nhưng Không có tham số đầu vào và đầu ra

Phải được liên kết với một bảng/ bảng ảo trong CSDL

Không thể gọi mà được thực hiện tự động. Sử dụng

trong việc: Tính toán, cập nhật giá trị tự động

Kiểm tra dữ liệu nhập

Khai báo sử dụng Kết hợp với các hành động INSERT/UPDATE/DELETE

trên bảng hay bảng ảo

Khi tạo ra, tham gia vào transaction khởi tạo bởi câu

lệnh cập nhật dữ liệu tương ứng

45

CÁC XỬ LÝ BÊN TRONG TRIGGER

Kiểm tra các ràng buộc dữ liệu phức tạp

Các ràng buộc mô tả phức tạp, không thể dùngconstraint

Gọi hành động Rollback Tran để hủy thao tác cập nhậtkhi vi phạm ràng buộc

Bảo đảm dữ liệu luôn được toàn vẹn

Bảo đảm việc kiểm thử ứng dụng không làm hư dữ liệucó sẵn

Tính toán, tự động cập nhật giá trị Bổ sung các hành động cập nhật dữ liệu để đảm bảo

tính toàn vẹn dữ liệu

Đơn giản hoá việc xây dựng ứng dụng

Chỉ định các bẫy lỗi dễ hiểu

Tăng tính thân thiện của ứng dụng

Dễ dàng nhận ra các lỗi khi lập trình46

CÁC HAN CHẾ TRÊN TRIGGER

Không được tạo và tham chiếu bảng tạm

Không tạo hay thay đổi, xoá cấu trúc các đối tượng

sẵn có trong CSDL CREATE/ALTER/DROP

Không gán, cấp quyền cho người dùng

GRAND/REVOKE

47

CÁC LOạI TRIGGER

Có 2 loại trigger: Trigger thông thường: AFTER (FOR) trigger

Chạy sau các hành động kiểm tra dữ liệu của các Rule

Constraint.

Dữ liệu đã bị tạm thời thay đổi trong bảng

INSTEAD OF trigger Chạy trước các hành động kiểm tra dữ liệu

Dữ liệu chưa hề bị thay đổi

Có thể thay thế hành động cập nhật dữ liệu bằng các hành

động khác.

48

CÁC BANG TRUNG GIAN INSERTED VÀ

DELETED

Inserted

Chứa dữ liệu được thêm mới trong hành động

INSERT/UPDATE

Có ở cả hai loại trigger

Cấu trúc bảng giống với bảng thực sự được cập nhật dữ

liệu

Deleted Chứa dữ liệu bị xoá trong hành động DELETE/UPDATE

Có ở cả hai loại trigger

Cấu trúc bảng giống với bảng thực sự được cập nhật dữ

liệu

Hành động update trong SQL Server Xoá dòng dữ liệu cũ

Thêm vào dòng dữ liệu mới với thông tin đã cập nhật 49

LÀM VIỆC VỚI TRIGGER50

TAO MỚI TRIGGER

Trigger có thể được tạo bằng câu lệnh hoặc bằng

SQL Server Management Studio

Trong cả hai trường hợp, câu lệnh CREATE

TRIGGER được sử dụng để tạo ra trigger.

CREATE TRIGGER Tên_Trigger ON Tên_bảng

{ [ INSTEAD OF ] | [ FOR | AFTER ] }

{ [ INSERT [, UPDATE [,DELETE ] ] ] }

AS

[DECLARE Biến_cục_bộ]

Các_lệnh

51

MÔ TA

Tên bảng Tên bảng mà trigger tạo mới sẽ liên kết

INSTEAD OF: chỉ định đây là trigger loại instead of

trigger Mỗi bảng chỉ có quyền tạo một instead of trigger cho

một hành động cập nhật

FOR hoặc AFTER

Nếu tạo trigger thông thường

INSERT, UPDATE, DELETE

Hành động cập nhật dữ liệu tác động vào bảng để kích

hoạt trigger.

52

XÓA TRIGGER

Cú pháp

DROP TRIGGERTên_trigger

53

SỬA NỘI DUNG TRIGGER

Sửa nội dung

ALTERTRIGGER Tên_Trigger ON Tên_bảng

FOR INSERT [, UPDATE [,DELETE ]]AS

[DECLAREBiến_cục_bộ]

Các_lệnh

54

TRIGGER LỒNG NHAU

Trigger có thể lồng nhau

Hành động cập nhật Trigger Cập nhật bảng khác

Trigger trên bảng tương ứng

Instead Of trigger không phát sinh lại trên chính bảng

mà nó liên kếtCập nhật Instead of Trigger Gọi câu lệnh cập nhật xuống

bảng Instead of trigger

Số cấp lồng tối đa 32 cấp

Sử dụng biến @@NestedLevel

Cấu hình cho phép trigger lồng nhau EXECsp_configure 'nested triggers', [0 | 1]

55

TRIGGER - KIỂM TRA RÀNG BUỘC

DỮ LIỆU56

KHI THÊM MỚI MẪU TIN

Thường dùng để kiểm tra Khóa ngoại, Miền giá trị, Liên thuộc tính trong cùng

một bảng

Liên thuộc tính của nhiều bảng khác nhau

3 loại đầu tiên, chỉ dùng trigger nếu muốn cung cấp

các báo lỗi cụ thể bằng tiếng Việt Nếu đã khai báo các ràng buộc này bằng constraint

Các cấu trúc lệnh thường dùng khi kiểm tra If Else

If Exists

Raiserror

Rollback Tran

57

KHI HỦY BỎ MẪU TIN

Tương tự, kiểm tra các ràng buộc như trigger

INSERT

Nên kiểm tra ràng buộc khoá ngoại

Thông thường ràng buộc này dẫn đến việc phải cập nhật

một số dữ liệu trên bảng khác

Chú ý: SQL Server 2000 có thuộc tính CASCADE

DELETE

58

KHI SỬA ĐỔI MẪU TIN

Tương tự, kiểm tra các ràng buộc như trigger

INSERT Ràng buộc khoá ngoại có thể sử dụng CASCADE

UPDATE để thực hiện tự động

Xác định cột đang được cập nhậtIf Update(Tên_cột)

Xử lý

59

TRIGGER CẬP NHẬT GIÁ TRI TỰ ĐỘNG

Sau khi kiểm tra ràng buộc trigger có thể Rollback nếu dữ liệu không hợp lệ

Thực hiện tiếp các hành động cập nhật trên bảng khác

để đảm bảo toàn vẹn dữ liệu: Cập nhật giá trị tự động

Vd: Insert CTGiaoHang Cập nhật bảng TONKHO

Các hành động cập nhật thường thực hiện Hủy bỏ dữ liệu do quan hệ khoá ngoại

Tính lại các cột 'tính toán' trong các bảng liên quan

Vị trí thực hiện Trong cùng trigger kiểm tra ràng buộc đã định nghĩa

Sau khi kiểm tra dữ liệu đã hợp lệ (thoả mãn các ràng

buộc)

60

INSTEAD OF TRIGGER

Bảng ảo thông thường có thể được cập nhật nhưng

có nhiều giới hạn Group By, Order By, Distinct

Ràng buộc khoá ngoại

Thiếu các cột NOT NULL trong bảng

Trigger Instead of Xảy ra trước khi SQL Server kiểm tra ràng buộc

Thay đổi hành động cập nhật vào bảng ảo bằng hành

động thích hợp trên bảng gốc

61

VÍ DỤ

Tạo bảng ảo sauSelect D.SoDH, NgayDH, MaNhaCC, V.MaVTu, TenVTu,SoLuong, DonGia From CTDONDH CT, DONDH D, VATTUV Where CT.SoDH = D.SoDH And CT.MaVTu = V.MaVTu

CREATE TRIGGER tg_vw_CTDONDH_BIINSTEAD OF INSERT ON vw_CTDONDH

AS

-- Nếu chưa có đơn đặt hàng, thêm đơn đặt hàng vào DONDHInsert Into DONDH Select SoDH, NgayDH, MaNhaCCFrom Inserted Where SoDH Not In (Select SoDH

From DonDH)

-- Nếu chưa có vật tư, thêm vật tư vào bảng VATTUInsert Into VATTU(MaVTu, TenVTu) Select MaVTu,TenVTu From Inserted Where MaVTu Not In (Select

MaVTu From VATTU)

-- Thêm các chi tiết đặt hàng vào CTDONDHInsert Into CTDONDH Select SoDH, MaVTu, SoLuong,

DonGia From Inserted

62

END.GOOD LUCK!

Phạm Thị Thu Thúy

Khoa CNTT, Đại học Nha Trang

[email protected]