Professional Documents
Culture Documents
QTCSDL - T NG Hơp C1234
QTCSDL - T NG Hơp C1234
Xác định yêu cầu, nghiệp vụ: Luôn đặt ra câu hỏi
- CSDL sẽ được sử dụng như thế nào?
- Những thông tin gì cần được lưu vào CSDL?
Xây dựng lược đồ thực thể - liên kết (ER)
- Thuộc tính (Attributes)
- Mối quan hệ/ liên kết (Relationship)
- Khóa
Ví Dụ
• CSDL quản lý theo dõi nhân viên, dự án,
phòng ban; Công ty có nhiều phòng ban,
mỗi phòng ban có một tên và mã đơn vị
duy nhất, đia điểm. Mỗi dự án có một tên
và mã dự án duy nhất, do một phòng ban
quản lý. Mỗi dự án có nhiều nhân viên
tham gia. Nhân viên có mã số NV, tên, địa
chỉ, mỗi nhân viên làm việc ở một phòng
ban, tham gia dự án với số giờ khác nhau.
Lược đồ ER
Chương 3: Các hoạt động quản trị cơ
sở dữ liệu
• 3.1. Kiểm soát dữ liệu
– 3.1.1. Đánh giá khả năng sử dụng của dữ liệu (Data
availability)
– 3.1.2. Toàn vẹn dữ liệu (Data integrity)
• 3.2. Quản lý thay đổi CSDL
– 3.2.1. Sao lưu và phục hồi CSDL
– 3.2.2. An toàn và bảo mật CSDL
• 3.3. Tối ưu hóa hiệu suất và kế hoạch phòng ngừa
rủi ro cho CSDL
– 3.3.1. Tối ưu hóa hiệu suất
– 3.3.2. Đánh giá và lập kế hoạch phòng ngừa rủi ro.
3.1. Kiểm soát dữ liệu
• 3.1.1. Đánh giá khả năng sử dụng của dữ liệu (Data
availability)
• Khái niệm: Data Availability hay tính khả
dụng của dữ liệu là quá trình đảm bảo
rằng dữ liệu có sẵn cho người dùng cuối
và ứng dụng, ở bất cứ thời điểm nào và ở
đâu khi họ cần
Data Availability là quá trình đảm bảo
rằng dữ liệu có sẵn cho người dùng cuối
Những thách thức khi đảm bảo tính
sẵn sàng của dữ liệu tốt
• Máy chủ lưu trữ hoặc lỗi lưu trữ
• Lỗi mạng hoặc sự cố
• Chất lượng dữ liệu kém
• Những vấn đề tương thích
• Cảnh báo an ninh
• Truy xuất hoặc trao đổi dữ liệu chậm
Để đạt được tính khả dụng của dữ
liệu
• Có một kế hoạch
• Sử dụng dự phòng
• Loại bỏ các điểm thất bại duy nhất
• Viện chuyển đổi dự phòng tự động
• Tận dụng lợi thế của ảo hóa
• Sử dụng đúng công cụ
3.1.2. Toàn vẹn dữ liệu (Data integrity)
• Phép chọn
• Phép chiếu
• Phép nối
• Một số các phép toán khác
Phép chọn (SELECT)
• Phép chọn được sử dụng để chọn một tập hợp
các bộ thoả mãn điều kiện chọn từ một quan hệ.
Ta có thể xem phép chọn như một bộ lọc, nó chỉ
giữ lại các bộ thoả mãn điều kiện đặt ra.
• Phép chọn được ký hiệu là:
• Cú pháp:
– Create Database <Tên CSDL>
• Ví dụ: Tạo một cơ sở dữ liệu có tên là
QLTV _ Quản lý thư viện:
– Create Database QLTV;
Tạo một bảng
• Cú pháp:
• Ví dụ:
Thay đổi kiểu của một thuộc tính
• Cú pháp:
• Ví dụ:
Xóa một thuộc tính
• Cú pháp:
• Ví dụ:
Xoá đối tượng
• Cú pháp:
• Ví dụ:
4.2.5. Các lệnh cập nhật cơ sở dữ liệu
• INSERT được dùng khi bạn muốn thêm
(hoặc chèn) dữ liệu mới.
• UPDATE được sử dụng khi bạn muốn thay
đổi (hoặc cập nhật) dữ liệu sẵn có.
• DELETE được sử dụng khi bạn muốn loại bỏ
(hoặc xóa) dữ liệu sẵn có.
• REPLACE được sử dụng khi bạn muốn thêm
hoặc thay đổi (hoặc đổi chỗ) dữ liệu mới
hoặc dữ liệu đã có.
• TRUNCATE được sử dụng khi bạn muốn làm
trống (hoặc xóa) tất cả dữ liệu từ mẫu.
Thêm mới bản ghi (INSERT)
Cú pháp:
INSERT INTO <tênbảng>([<danh sách các cột>])
VALUES (<danh sách các giá trị>)
Chú ý: Nếu các giá trị sau từ khoá VALUES hoàn toàn phù hợp về thứ tự với các
cột trong bảng, thì danh sách các cột có thể được bỏ qua.
Ví dụ: thêm một sinh viên mới vào bảng SINHVIEN không có danh sách
cột
INSERT INTO SINHVIEN VALUES ("561205", "Nguyễn Tiến", "Minh", "3/8/92",
"nam", "Hà Nội","K57CNSHA")
Thêm mới bản ghi (INSERT) (tiếp)
• Ta có thể thêm các bản ghi vào bảng từ câu lệnh
truy vấn (Select)
• Cú pháp:
– INSERT INTO <tênbảng> <Câu lệnh Select>
• Ví dụ: Ví dụ: thêm tất cả các dòng trong bảng
DSSV vào bảng SINHVIEN
– INSERT INTO SINHVIEN SELECT * FROM
DSSV ;
– Trong trường hợp các cột không giống nhau thì phải
chỉ rõ tên cột.
Câu lệnh sửa bản ghi – SQL Update
• Cú pháp:
• UPDATE <tên bảng>
SET
<tên cột 1> = <giá trị 1>,
<tên cột 2> = <giá trị 2>, ...,
<tên cột n> = < giá trị n>
[WHERE <điềukiện>];
Ví dụ: sửa hộ khẩu của các sinh viên từ Hà Tây thành
Hà Nội. Ví dụ
UPDATE SINHVIEN
SET
Tinh = "Hà Nội"
WHERE Tinh = "Hà Tây";
UPDATE SINHVIEN
SET
Tinh = REPLACE(Tinh, “Tây”, “Nội”)
WHERE Tinh = “Hà Tây”
Câu lệnh xoá bản ghi – SQL Delete
• Cú pháp:
• DELETE FROM <tên bảng>
[WHERE <điều kiện>];
• Ý nghĩa:
– Các bản ghi thoả mãn điều kiện WHERE sẽ bị xoá khỏi
bảng.
– Nếu không có mệnh đề WHERE thì tất cả các bản ghi của
bảng sẽ bị xóa khỏi bảng.
Ví dụ
• Ví dụ: xóa tất cả các bản ghi trong bảng DSSV
• DELETE FROM DSSV;
• Nhóm dữ liệu lại theo từng nhóm để thực hiện các phép toán thống
kê.
• Cú pháp:
• GROUP BY <Danh sách Tên cột>
• Ví dụ: In ra danh sách các lớp và số sinh viên trong mỗi lớp từ bảng
SinhVien
• Ví dụ: Hiển thị thông tin về các sinh viên với các kết quả
học tập của họ. Khi hiển thị cột KetQua đổi tên thành
cột DiemTB
RETURN v_customer_id;
END $$
Quản lý store procedure
• Hiển thị tất cả những Stored procedure đang
tồn tại trong tất cả các cơ sở dữ liệu
END IF;
END $$
DELIMITER ;
# thực thi procedure
CALL displayFilmInfo(1,1);
Kết quả
• mysql> CALL displayFilmInfo(1,1);
• +---------+
• | film_id |
• +---------+
• | 19 |
• | 21 |
• | 29 |
• | 38 |
• | 56 |
• | 67 |
• ....
• 64 rows in set (0.00 sec)
call total_movies(1,2,2006);
Kết quả
mysql> call total_movies(1,2,2006);
+--------+------------------------------------+
| store | count(rental.inventory_id) |
+--------+------------------------------------+
| 1| 92 |
+--------+-------------------------------------+
1 row in set (0.03 sec) Query OK, 0 rows affected
(0.03 sec)
• Function:
DELIMITER $$
DROP FUNCTION IF EXISTS total_inventory;
CREATE FUNCTION total_inventory (p_store_id INT, p_month INT, p_year INT)
RETURNS int
BEGIN
DECLARE v_out INT;
SELECT count(rental.inventory_id) INTO v_out FROM inventory
JOIN rental ON inventory.inventory_id = rental.inventory_id AND
month(rental.rental_date)=p_month AND year(rental.rental_date)=p_year
GROUP BY inventory.store_id
HAVING inventory.store_id=p_store_id;
return v_out;
END$$
DELIMITER ;
CREATE TRIGGER `upd_film` AFTER UPDATE ON `film` FOR EACH ROW BEGIN
IF (old.title != new.title) or (old.description != new.description)
THEN
UPDATE film_text
SET title=new.title,
description=new.description,
film_id=new.film_id
WHERE film_id=old.film_id;
END IF;
END;;
DELIMITER ;
Ví dụ: Tạo trigger trên bảng payment, mỗi khi thêm, sửa bảng
payment sẽ cập nhật thông tin đó cùng với thông tin là thời gian
thêm, sửa vào bảng payment_log (tạo thêm)
drop table payment_log;
show create table payment;
CREATE TABLE payment_log (
payment_id smallint(5) DEFAULT NULL,
customer_id smallint(5) DEFAULT NULL ,
staff_id tinyint(3) unsigned DEFAULT NULL,
rental_id int(11) DEFAULT NULL,
amount decimal(5,2) DEFAULT NULL,
payment_date datetime DEFAULT NULL,
changedate DATETIME DEFAULT NULL,
action VARCHAR(50) DEFAULT NULL
);
DELIMITER $$
DROP TRIGGER if exists update_payment;
CREATE TRIGGER update_payment AFTER UPDATE ON payment
FOR EACH ROW
BEGIN
INSERT INTO payment_log
SET action = 'update',
payment_id = OLD.payment_id,
customer_id = OLD.customer_id,
staff_id = OLD.staff_id,
rental_id = OLD.rental_id,
amount = OLD.amount,
payment_date = OLD.payment_date,
changedate = NOW();
END$$
DELIMITER ;
Quản lý trigger
• Trigger được lưu trữ trong file:
/data_folder/database_name/table_name.trg,
• Để hiển thị các trigger gắn với 1 bảng dữ liệu
SELECT * FROM
`Information_Schema`.`Triggers`
WHERE Trigger_schema = 'database_name'
• Xóa một trigger
DROP TRIGGER tablename.triggername
• Thay đổi một trigger
ALTER TRIGGER, SHOW CREATE TRIGGER,
hoặc SHOW TRIGGER STATUS.
4.3.2. Phân quyền
• Quyền hạn ở đây dùng để chỉ quyền truy
cập cơ sở dữ liệu (CSDL). Bạn có thể tạo,
xóa hoặc từ chối quyền trong MS SQL
Server.
• Để phân quyền, sử dụng 1 trong 2 cách
sau.
– Cách 1: Dùng T-SQL
– Cách 2: Dùng SQL Server Management Studio
SSMS
Cách 1: Dùng T-SQL
• Cú pháp:
SELECT *
FROM Drivers
WHERE driverslicensenr = 123456 AND
ROWNUM <= 3;
• 3. Không làm cho truy vấn phức tạp hơn
mức cần thiết
• Xem xét câu truy vấn:
SELECT driverslicensenr, name
FROM Drivers
WHERE driverslicensenr = 123456 OR driverslicensenr = 678910
OR driverslicensenr = 345678;