1. Trang chủ
  2. » Giáo án - Bài giảng

Giáo trình hệ quản trị cơ sở dữ liệu

96 10 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 96
Dung lượng 4,45 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Bài 1: Tổng quan về hệ quản trị cơ sở dữ liệuMS SQL Server 1 1. Giới thiệu, cài đặt hệ quản trị cơ sở dữ liệu MS SQL Server 1 2. Các công cụ, kiểu dữ liệu trong MS SQL Server 10 3. Detach và Attach cơ sở dữ liệu 14 4. Import và Export cơ sở dữ liệu 16 5. Backup và Restore cơ sở dữ liệu 28 Bài 2: Định nghĩa dữ liệu trong MS SQL Server 31 1. Tạo, sử dụng, xóa cơ sở dữ liệu 31 2. Tạo bảng dữ liệu 31 3. Tạo các loại ràng buộc dữ liệu 32 3.1. Tạo ràng buộc khóa chính Primary 32 3.2. Tạo ràng buộc khóa ngoại Foreign key 32 3.3. Tạo ràng buộc Default 37 3.4. Tạo ràng buộc Unique 38 3.5. Tạo ràng buộc Check 39 4. Sửa, xóa bảng dữ liệu 41 Bài 3. Thao tác dữ liệu trong MS SQL Server 46 1. Thêm mới một dòng dữ liệu 46 2. Cập nhật dữ liệu 47 3. Xóa các dòng dữ liệu 50 4. Truy xuất dữ liệu 51 4.1. Lấy thông tin từ các cột của bảng bằng mệnh đề SELECT 51 4.2. Chọn các dòng của bảng bằng mệnh đề WHERE 60 4.3. Truy vấn thông tin từ nhiều bảng 64 4.4. Phân nhóm dữ liệu bằng mệnh đề GROUP BY 75 4.5. Lọc nhóm kết quả truy vấn bằng mệnh đề HAVING 78 4.6. Sắp xếp kết quả truy vấn bằng mệnh đề ORDER BY 78 4.7. Truy vấn lồng nhau 80 Bài 4: Khung nhìn (View) 83 1. Tạo khung nhìn 83 2. Cập nhật, bổ sung và xóa dữ liệu thông qua khung nhìn 84 3. Sửa đổi khung nhìn 90 4. Xóa khung nhìn 91

Trang 1

TRƯỜNG CAO ĐẲNG CƠ ĐIỆN HÀ NỘI KHOA CÔNG NGHỆ THÔNG TIN

- -GIÁO TRÌNH

MÔ ĐUN HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU 1

(Tài liệu lưu hành nội bộ)

Hà Nội, 2018

Trang 2

Mục lục

Trang 3

Bài 1: Tổng quan về hệ quản trị cơ sở dữ liệu MS SQL Server

1 Giới thiệu, cài đặt hệ quản trị cơ sở dữ liệu MS SQL Server

1.1 Giới thiệu về hệ quản trị cơ sở dữ liệu MS SQL Server

Hệ quản trị cơ sở dữ liệu (Database Management System – DBMS):

− Là tập hợp các chương trình dùng để quản lý cấu trúc và dữ liệu của cơ sở dữ liệuđồng thời điều khiển việc truy xuất dữ liệu trong cơ sở dữ liệu

− Cung cấp cho người dùng và ứng dụng một môi trường thuận tiện và sử dụng hiệuquả tài nguyên dữ liệu

− Là hệ quản trị cơ sở dữ liệu do Microsoft phát triển

− Hoạt động theo mô hình Client/Server cho phép đồng thời cùng một lúc nhiều ngườidùng truy xuất đến cơ sở dữ liệu

SQL, viết tắt của Structured Query Language (ngôn ngữ hỏi có cấu trúc), là công cụ sửdụng để tổ chức, quản lý và truy xuất dữ liệu đuợc lưu trữ trong các cơ sở dữ liệu SQL làmột hệ thống ngôn ngữ bao gồm tập các câu lệnh sử dụng để tương tác với cơ sở dữ liệu

quan hệ Tên gọi ngôn ngữ hỏi có cấu trúc phần nào làm chúng ta liên tưởng đến một công

cụ (ngôn ngữ) dùng để truy xuất dữ liệu trong các cơ sở dữ liệu Thực sự mà nói, khả năng

Trang 3

Trang 4

của SQL vượt xa so với một công cụ truy xuất dữ liệu, mặc dù đây là mục đích ban đầu khiSQL được xây dựng nên và truy xuất dữ liệu vẫn còn là một trong những chức năng quantrọng của nó SQL được sử dụng để điều khiển tất cả các chức năng mà một hệ quản trị cơ

sở dữ liệu cung cấp cho người dùng bao gồm:

Định nghĩa dữ liệu: SQL cung cấp khả năng định nghĩa các cơ sở dữ liệu, các cấu

trúc lưu trữ và tổ chức dữ liệu cũng như mối quan hệ giữa các thành phần dữ liệu

Truy xuất và thao tác dữ liệu: Với SQL, người dùng có thể dễ dàng thực hiện các

thao tác truy xuất, bổ sung, cập nhật và loại bỏ dữ liệu trong các cơ sở dữ liệu

Điều khiển truy cập: SQL có thể được sử dụng để cấp phát và kiểm soát các thao

tác của người sử dụng trên dữ liệu, đảm bảo sự an toàn cho cơ sở dữ liệu

Đảm bảo toàn vẹn dữ liệu: SQL định nghĩa các ràng buộc toàn vẹn trong cơ sở dữ

liệu nhờ đó đảm bảo tính hợp lệ và chính xác của dữ liệu trước các thao tác cập nhậtcũng như các lỗi của hệ thống

Như vậy, có thể nói rằng SQL là một ngôn ngữ hoàn thiện được sử dụng trong các hệ thống

cơ sở dữ liệu và là một thành phần không thể thiếu trong các hệ quản trị cơ sở dữ liệu Mặc

dù SQL không phải là một ngôn ngữ lập trình như C, C++, Java, song các câu lệnh màSQL cung cấp có thể được nhúng vào trong các ngôn ngữ lập trình nhằm xây dựng các ứngdụng tương tác với cơ sở dữ liệu Khác với các ngôn ngữ lập trình quen thuộc như C, C++,Java, SQL là ngôn ngữ có tính khai báo Với SQL, người dùng chỉ cần mô tả các yêu cầucần phải thực hiện trên cơ sở dữ liệu mà không cần phải chỉ ra cách thức thực hiện các yêucầu như thế nào Chính vì vậy, SQL là ngôn ngữ dễ tiếp cận và dễ sử dụng

SQL Server sử dụng ngôn ngữ lập trình và truy vấn CSDL Transact-SQL (T-SQL), mộtphiên bản của Structured Query Language Ngôn ngữ lập trình và truy vấn T-SQL cho phéptruy xuất dữ liệu, cập nhật và quản lý hệ thống CSDL quan hệ Mỗi máy chủ chỉ có một hệquản trị CSDL SQL Server

1.2 Cài đặt hệ quản trị cơ sở dữ liệu MS SQL Server

- Bước 1 : Tại màn hình cài đặt SQL Server 2008 bạn chọn mục Installation sau đóchọn New SQL Server stand-alone installation or add features to an existing installation

Trang 4

Trang 5

- Bước 2 : Tại màn hình Setup Support Rules chọn OK

Trang 5

Trang 6

- Bước 3 : Tại màn hình "Product Key", chọn Next để tiếp tục

- Bước 4 : Tại màn hình License Term, đánh dấu chọn nút "I accept the licence terms", rồi

Trang 6

Trang 7

- Bước 5 : Tại màn hình "setup support files" nhấn nút "install" để tiếp tục.

- Bước 6 : tại màn hình "Setup Support Rules", nếu mỗi thứ suôn sẽ, thì nhấn nút "Next" đểtiếp tục

Trang 7

Trang 8

- Bước 7 : Trên màn hình "features selection", nhất nút "Sellect All" để chọn tất cả, sau đónhấn nút "Next".

- Bước 8 : tại màn hình "instance Configuratio", có 2 lựa chọn : chọn như hình dưới, rồinhấn nút Next để tiếp tục

Trang 8

Trang 9

- Bước 9 : Chọn Next để tiếp tục.

- Bước 10 : Chọn "Account Name" và chọn là NT AUTHORITY\NETWORK như tronghình sau đây, sau đó nhấn Next để tiếp tục

Trang 9

Trang 10

- Bước 11 : Trên màn hình "Database Engine Configuration", trong phần AccountProvisioning, chọn "Windows Authotication Mode" hoặc "Mixed Mode" + Chọn "Windows Authotication Mode" không cần nhập Password

+ Chọn "Mixed Mode" thì ta phải nhập Password

+ Sau cùng ta nhấn vào nút "Add Current User", rồi nhấn nút Next để tiếp tục

- Bước 12 : nhấn nút "Next" để tiếp tục

Trang 10

Trang 12

- Bước 13 : nhấn nút "Next" để tiếp tục

- Bước 14 : nhấn nút "Install" để tiến hành cài đặt, quá trình cài đặt khoảng 3 phút

Trang 12

Trang 13

- Bước 15 : Nhấn nút "Next" để hoàn thành quá trình cài đặt

2 Các công cụ, kiểu dữ liệu trong MS SQL Server

2.1 Các công cụ trong MS SQL Server

SQL Server Configuration Manager

− Khởi động công cụ: Start / All Programs / Microsoft SQL Server 2008 /Configuration Tools / SQL Server Configuration Manager

Trang 13

Trang 14

− SQL Server Configuration Manager là bộ công cụ cung cấp giao diện cho người quảntrị các công việc sau:

+ Starting and stopping services: Khởi động và dừng các dịch vụ

+ Changing service accounts: Thay đổi các tài khoản dịch vụ

+ Changing service start modes: Thay đổi chế độ khởi động dịch vụ

+ Modifying networking settings: Sửa đổi các thiết lập mạng

SQL Server Management Studio

− Khởi động công cụ: Start / All Programs / Microsoft SQL Server 2008 / SQL ServerManagement Studio

Trang 14

Trang 15

− SQL Server Management Studio bao gồm:

+ Object Explorer: là môi trường trực quan sử dụng hệ thống thực đơn (menu)

+ Transact-SQL queries: cho phép thực hiện những công việc đối với cơ sở dữ

liệu thông qua các lệnh T-SQL

SQL Server Books Online

− Khởi động công cụ:

+ Start / All Programs / Microsoft SQL Server 2008 / Documentation and Tutorials /SQL Server Books Online

Trang 15

Trang 16

+ Hoặc nhấn phím F1 tại màn hình SQL Server Management Studio

− Sử dụng để tra cứu nhanh các thông tin về SQL và SQL Server

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

Bảng dưới đây liệt kê một số kiểu dữ liệu thông dụng được sử dụng trong SQL

CHAR (n) Kiểu chuỗi với độ dài cố định

NCHAR (n) Kiếu chuỗi với độ dài cố định hỗ trợ UNICODE

VARCHAR (n) Kiểu chuỗi với độ dài chính xác

NVARCHAR (n) Kiểu chuỗi với độ dài chính xác hỗ trợ UNICODE

INTEGER Số nguyên có giá trị từ -231đến 231 - 1

INT Như kiểu Integer

TINYTINT Số nguyên có giá trị từ 0 đến 255

SMALLINT Số nguyên có giá trị từ -215đến 215 – 1

BIGINT Số nguyên có giá trị từ - 263đến 263-1

NUMERIC (p,s) Kiểu số với độ chính xác cố định

DECIMAL (p,s) Tương tự kiểu Numeric

Trang 16

Trang 17

FLOAT Số thực có giá trị từ -1.79E+308 đến 1.79E+308

REAL Số thực có giá trị từ -3.40E + 38 đến 3.40E + 38

MONEY Kiểu tiền tệ

BIT Kiểu bit (có giá trị 0 hoặc 1)

DATETIME Kiểu ngày giờ (chính xác đến phần trăm của giây)

SMALLDATETIME Kiểu ngày giờ (chính xác đến phút)

BINARY Dữ liệu nhị phân với độ dài cố định (tối đa 8000 bytes)

VARBINARY Dữ liệu nhị phân với độ dài chính xác (tối đa 8000 bytes)

IMAGE Dữ liệu nhị phân với độ dài chính xác (tối đa 2,147,483,647 bytes)TEXT Dữ liệu kiếu chuỗi với độ dài lớn (tối đa 2,147,483,647 ký tự)NTEXT Dữ liệu kiếu chuỗi với độ dài lớn và hỗ trợ UNICODE (tối đa

1,073,741,823 ký tự)

3 Detach và Attach cơ sở dữ liệu

3.1 Detach cơ sở dữ liệu

- Bước 1: Khởi động Microsoft SQL Server Management Studio, Connect vào Server

- Bước 2: Click chuột phải lên Mục Database, Chọn Attach, nhấn Add

Trang 17

Trang 18

- Bước 3: Tìm đến thư mục chứa file mdf và ldf (chú ý: 2 file này phải để cùng thư mục).Chọn file mdf, rồi nhấn OK

3.2 Attach cơ sở dữ liệu

- Bước 1: Khởi động Microsoft SQL Server Management Studio, Connect vào Server

Trang 18

Trang 19

- Bước 2: Click chuột phải vào database chọn Detach, chọn Tasks, rồi nhấp vào Detach…

- Bước 3: Trong cửa sổ tiếp theo, tích vào ô Drop Connections (để ngắt toàn bộ kết nối đếndatabase), rồi nhấn OK

Trang 19

Trang 20

4 Import và Export cơ sở dữ liệu

4.1 Import cơ sở dữ liệu

- Bước 1: Khởi động Microsoft SQL Server Management Studio, Connect vào Server

- Bước 2: Click chuột phải vào database chọn Tasks, rồi nhấp vào Import Data…

Trang 20

Trang 21

- Bước 3: Tại cửa sổ SQL Server Import and Export Winzard, nhấp vào Next

Trang 21

Trang 22

- Bước 4: Tại cửa sổ SQL Server Import and Export Winzard, chọn Data source, Servername, Database rồi nhấp vào Next

Trang 22

Trang 23

- Bước 5: Tại cửa sổ SQL Server Import and Export Winzard, chọn Data destination, Servername, Database rồi nhấp vào Next

Trang 23

Trang 24

- Bước 6: Tại cửa sổ SQL Server Import and Export Winzard, chọn bảng (view) nguồn, rồinhấn vào next để tiếp tục

Trang 24

Trang 25

- Bước 7: Nhấp chọn Finish để kết thúc

Trang 25

Trang 26

4.2 Export cơ sở dữ liệu

- Bước 1: Khởi động Microsoft SQL Server Management Studio, Connect vào Server

- Bước 2: Click chuột phải vào database chọn Tasks, rồi nhấp vào Export Data…

Trang 26

Trang 27

- Bước 4: Tại cửa sổ SQL Server Import and Export Winzard, chọn Data source, Servername, Database rồi nhấp vào Next

Trang 27

Trang 28

- Bước 5: Tại cửa sổ SQL Server Import and Export Winzard, chọn Data destination, Servername, Database rồi nhấp vào Next

Trang 28

Trang 30

- Bước 6: Tại cửa sổ SQL Server Import and Export Winzard, chọn bảng (view) nguồn, rồinhấn vào next để tiếp tục

Trang 30

Trang 31

- Bước 7: Nhấp chọn Finish để kết thúc

Trang 31

Trang 32

5 Backup và Restore cơ sở dữ liệu

5.1 Backup và Restore cơ sở dữ liệu

- Bước 1: Khởi động Microsoft SQL Server Management Studio, Connect vào Server

Bước 2: Click chuột phải vào database chọn Tasks, rồi nhấp vào Back Up

- Bước 3: Trong cửa sổ Back Up Database:

+ Chọn Backup type: full và Backup to: disk

+ Nhấn Add để thay đổi đường dẫn và tên muốn lưu, file backup sẽ có đuôi là bak

+ Sau đó nhấn OK

Trang 32

Trang 33

5.2 Restore cơ sở dữ liệu

- Bước 1: Khởi động Microsoft SQL Server Management Studio, Connect vào Server

Trang 33

Trang 34

Bước 2: Click chuột phải vào database muốn restore, chọn Tasks > Restore > Database

Bước 3: Trong cửa sổ Restore Database.

Mục From device chọn file database (.bak) mà bạn đã backup trước đó

Trang 34

Trang 35

Sau đó nhấn OK.

Trang 35

Trang 36

Bài 2: Định nghĩa dữ liệu trong MS SQL Server

1 Tạo, sử dụng, xóa cơ sở dữ liệu

1.1 Tạo Cơ sở dữ liệu

Tên_cột_1 Kiểu_dữ_liệu_của_cột NULL/NOT NULL,

Tên_cột_2 Kiểu_dữ_liệu_của_cột NULL/NOT NULL,

Trang 37

Tên_bảng: Tên của bảng cần tạo Quy tắc định danh: là xâu ký tự bất kỳ, không

chứa ký tự đặc biệt

Tên_cột_1, Tên_cột_2, , Tên_cột_n: Tên cột cần định nghĩa Tuân theo quy

tắc định danh Trong một bảng tên cột là duy nhất Thứ tự các cột không quan

trọng

Kiểu_dữ_liệu_của_cột: Đây là thuộc tính bắt buộc phải có đối với mỗi cột Các

kiểu dữ liệu có thể sử dụng đã được giới thiệu tại bài 1

NULL/NOT NULL: Cột có chấp nhận giá trị NULL hay không? Mặc định nếu

không khai báo thì SQL Server sẽ gán cho cột giá trị NULL

Giá trị NULL:

+ Những giá trị không xác định được biểu diễn trong CSDL quan hệ bởi các giá

trị NULL Đây là giá trị đặc biệt và không nên nhầm lẫn với chuỗi rỗng (đối với dữ liệu kiểu chuỗi) hay giá trị không (đối với giá trị kiểu số)

+ Giá trị NULL đóng một vai trò quan trọng trong các CSDL và hầu hết các hệquản trị CSDL quan hệ hiện nay đều hỗ trợ việc sử dụng giá trị này

Ví dụ:

Tạo bảng Sinh viên:

Create table SinhVien

(

MaSV nvarchar(10) NOT NULL ,

TenSV nvarchar(50) NOT NULL ,

GioiTinh bit NOT NULL ,

NgaySinh datetime NULL

)

3 Tạo các loại ràng buộc dữ liệu

3.1 Tạo ràng buộc khóa chính Primary

Ràng buộc PRIMARY KEY được sử dụng để định nghĩa khoá chính của bảng Khoá chínhcủa một bảng là một hoặc một tập nhiều cột mà giá trị của chúng là duy nhất trong bảng.Hay nói cách khác, giá trị của khoá chính sẽ giúp cho ta xác định được duy nhất một dòng(bản ghi) trong bảng dữ liệu Mỗi một bảng chỉ có thể có duy nhất một khoá chính và bảnthân khoá chính không chấp nhận giá trị NULL Ràng buộc PRIMARY KEY là cơ sở cho

Trang 37

Trang 38

việc đảm bảo tính toàn vẹn thực thể cũng như toàn vẹn tham chiếu.

Để khai báo một ràng buộc PRIMARY KEY, ta sử dụng cú pháp như sau:

[CONSTRAINT tên_ràng_buộc]

PRIMARY KEY [(danh_sách_cột)]

Nếu khoá chính của bảng chỉ bao gồm đúng một cột và ràng buộc PRIMARY KEY đượcchỉ định ở mức cột, ta không cần thiết phải chỉ định danh sách cột sau từ khoá PRIMARYKEY Tuy nhiên, nếu việc khai báo khoá chính được tiến hành ở mức bảng (sử dụng khi sốlượng các cột tham gia vào khoá là từ hai trở lên) thì bắt buộc phải chỉ định danh sách cộtngay sau từ khóa PRIMARY KEY và tên các cột được phân cách nhau bởi dấu phẩy

Ví dụ: Câu lệnh dưới đây định nghĩa bảng SINHVIEN với khoá chính là MASV CREATE

TABLE sinhvien

(

Masv NVARCHAR(10) CONSTRAINT pk_sinhvien_masv PRIMARY KEY,

hodem NVARCHAR(25) NOT NULL ,

ten NVARCHAR(10) NOT NULL ,

Với bảng vừa được tạo bởi câu lệnh ở trên, nếu ta thực hiện câu lệnh:

INSERT INTO sinhvien(masv,hodem,ten,gioitinh,malop)

VALUES('0261010001','Lê Hoàng Phương','Anh',0,'C26101')

một bản ghi mới sẽ được bổ sung vào bảng này Nhưng nếu ta thực hiện tiếp câu lệnh:

INSERT INTO sinhvien(masv,hodem,ten,gioitinh,malop)

VALUES('0261010001','Lê Huy','Đan',1,'C26101')

thì câu lệnh này sẽ bị lỗi do trùng giá trị khoá với bản ghi đã có

Trang 38

Trang 39

Ví dụ: Câu lệnh dưới đây tạo bảng DIEMTHI với khoá chính là tập bao gồm hai cột

MAMONHOC và MASV

CREATE TABLE diemthi

(

Mamonhoc NVARCHAR(10) NOT NULL ,

masv NVARCHAR(10) NOT NULL ,

− Mỗi một bảng chỉ có thể có nhiều nhất một ràng buộc PRIMARY KEY

− Một khoá chính có thể bao gồm nhiều cột nhưng không vượt quá 16 cột

3.2 Tạo ràng buộc khóa ngoại Foreign key

Các bảng trong một cơ sở dữ liệu có mối quan hệ với nhau Những mối quan hệ này biểudiễn cho sự quan hệ giữa các đối tượng trong thế giới thực Về mặt dữ liệu, những mối quan

hệ được đảm bảo thông qua việc đòi hỏi sự có mặt của một giá trị dữ

liệu trong bảng này phải phụ thuộc vào sự tồn tại của giá trị dữ liệu đó ở trong một bảngkhác

Ràng buộc FOREIGN KEY được sử dụng trong định nghĩa bảng dữ liệu nhằm tạo nên mốiquan hệ giữa các bảng trong một cơ sở dữ liệu Một hay một tập các cột trong một bảngđược gọi là khoá ngoại, tức là có ràng buộc FOREIGN KEY, nếu giá trị của nó được xácđịnh từ khoá chính (PRIMARY KEY) hoặc khoá phụ (UNIQUE) của một bảng dữ liệukhác

Hình dưới đây cho ta thấy được mối quan hệ giữa 3 bảng DIEMTHI, SINHVIEN vàMONHOC Trong bảng DIEMTHI, MASV là khoá ngoài tham chiếu đến cột MASV củabảng SINHVIEN và MAMONHOC là khoá ngoài tham chiếu đến cột MAMONHOC củabảng MONHOC

Trang 39

Trang 40

Với mối quan hệ được tạo ra như hình trên, hệ quản trị cơ sở dữ liệu sẽ kiểm tra tính hợp lệcủa mỗi bản ghi trong bảng DIEMTHI mỗi khi được bổ sung hay cập nhật Một bản ghi bất

kỳ trong bảng DIEMTHI chỉ hợp lệ (đảm bảo ràng buộc FOREIGN KEY) nếu giá trị củacột MASV phải tồn tại trong một bản ghi nào đó của bảng SINHVIEN và giá trị của cộtMAMONHOC phải tồn tại trong một bản ghi nào đó của bảng MONHOC

Ràng buộc FOREIGN KEY được định nghĩa theo cú pháp dưới đây:

[CONSTRAINT tên_ràng_buộc]

FOREIGN KEY [(danh_sách_cột)]

REFERENCES tên_bảng_tham_chiếu(danh_sách_cột_tham_chiếu)

[ON DELETE CASCADE | NO ACTION | SET NULL | SET DEFAULT]

[ON UPDATE CASCADE | NO ACTION | SET NULL | SET DEFAULT]

Việc định nghĩa một ràng buộc FOREIGN KEY bao gồm các yếu tố sau:

− Tên cột hoặc danh sách cột của bảng được định nghĩa tham gia vào khoá ngoài

− Tên của bảng được tham chiếu bởi khoá ngoài và danh sách các cột được tham chiếuđến trong bảng tham chiếu

− Cách thức xử lý đối với các bản ghi trong bảng được định nghĩa trong trường hợpcác bản ghi được tham chiếu trong bảng tham chiếu bị xoá (ON DELETE) hay cập nhật

Trang 40

Ngày đăng: 28/02/2021, 13:14

TỪ KHÓA LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w