Chọn đến phần học sinh cần nhanh chóng thông qua mục lục bằng cách click đến phần đó
I. Lý thuyết trọng tâm
Khi cập nhật một bảng có khoá ngoài, dữ liệu của trường khoá ngoài phải là dữ liệu tham chiếu đến trường khoá chính của bảng tham chiếu. HeidiSQL hỗ trợ kiểm soát điều này thông qua hai cơ chế:
- Hỗ trợ nhập dữ liệu trường khoá ngoài theo tham chiếu: Khi nhập giá trị cho trường khoá ngoài (ví dụ idNhacsi trong bảng bannhac), HeidiSQL cho phép chọn giá trị từ danh sách các giá trị hợp lệ của khoá chính trong bảng tham chiếu (bảng nhacsi).
- Ngăn chặn xoá dữ liệu vi phạm toàn vẹn tham chiếu: Nếu một giá trị khoá chính đã được tham chiếu bởi khoá ngoài ở bảng khác, MySQL sẽ ngăn chặn việc xoá dòng dữ liệu chứa giá trị đó.
Lưu ý quan trọng: Hệ quản trị CSDL chỉ có thể ngăn chặn được các lỗi theo lôgic đã được khai báo (ví dụ lôgic tham chiếu khoá ngoài). Nó không thể ngăn chặn được các lỗi không liên quan đến lôgic nào. Ví dụ: chọn tên nhạc sĩ sáng tác bản nhạc “Hà Nội niềm tin và hi vọng” là Phan Nhân hay Đỗ Nhuận thì không sai về lôgic; nếu nhập sai tên nhạc sĩ, ca sĩ thì lỗi này sẽ xuất hiện ở tất cả các danh sách kết xuất liên quan. Vì vậy người làm việc với CSDL luôn phải có sự cẩn thận, mẫn cán trong công việc của mình.
Nhiệm vụ: Cập nhật bảng bannhac – bảng có trường khoá ngoài idNhacsi tham chiếu đến bảng nhacsi.
II. Hướng dẫn thực hành
Nhiệm vụ 1: Cập nhật bảng bannhac
a) Thêm mới dữ liệu vào bảng bannhac
Chọn bảng bannhac, nháy chuột chọn thẻ Dữ liệu. Bảng dữ liệu hiện ra với các trường idBannhac, tenBannhac, idNhacsi nhưng chưa có dữ liệu.

Thực hiện nhập dữ liệu: Trường idBannhac có kiểu INT, AUTO_INCREMENT nên không cần nhập dữ liệu cho trường này. Nháy đúp chuột vào ô ở trường tenBannhac để nhập tên bản nhạc.

Nhập dữ liệu cho trường khoá ngoài idNhacsi: Trường idNhacsi là trường khoá ngoài, đã được khai báo tham chiếu đến trường idNhacsi của bảng nhacsi. Vì vậy, để đảm bảo tính nhất quán, giá trị hợp lệ chỉ có thể lấy từ các giá trị của idNhacsi trong bảng nhacsi.
Thao tác: Nháy đúp chuột vào ô nhập idNhacsi – một hộp danh sách sẽ hiện ra liệt kê các nhạc sĩ đã có trong bảng nhacsi. Chọn tên nhạc sĩ tương ứng trong danh sách.

Tiếp tục nhập các bản nhạc còn lại theo dữ liệu ở Bảng 18.1 (Bài 18).
b) Sửa chữa, cập nhật dữ liệu trong bảng bannhac
Thao tác sửa chữa dữ liệu trong bảng bannhac nếu phát hiện có sai sót, tương tự như đã được giới thiệu ở Bài 21: chỉ cần nháy đúp chuột vào ô dữ liệu muốn sửa và nhập lại giá trị đúng.
Đối với trường idNhacsi (khoá ngoài), khi nháy đúp chuột để sửa, hộp danh sách các nhạc sĩ sẽ hiện ra để chọn lại giá trị tham chiếu hợp lệ.

c) Xoá dữ liệu trong bảng bannhac
Thực hiện tương tự các bước ở Bài 21 để xoá các dòng dữ liệu trong bảng bannhac: đánh dấu các dòng muốn xoá (giữ Shift hoặc Ctrl khi nháy chuột), nhấn Ctrl+Delete, chọn OK để xác nhận.
d) Xoá dữ liệu trong bảng nhacsi
Chú ý rằng bây giờ bảng bannhac đã có dữ liệu với trường idNhacsi tham chiếu đến trường idNhacsi của bảng nhacsi. Do vậy, ta sẽ không thể tuỳ tiện xoá các dòng trong bảng nhacsi.
Ví dụ: idNhacsi của nhạc sĩ Văn Cao là 2, giá trị này đã có trong bảng bannhac ở các bản nhạc “Trường ca Sông Lô”, “Tiến về Hà Nội”. MySQL sẽ ngăn chặn việc xoá dòng tương ứng với nhạc sĩ Văn Cao ở bảng nhacsi.

Nếu cố xoá (chọn OK), hệ thống sẽ hiển thị thông báo lỗi cho biết không thể xoá vì vi phạm ràng buộc khoá ngoài (foreign key constraint), làm mất tính toàn vẹn dữ liệu.

e) Truy xuất dữ liệu trong bảng bannhac
Việc truy xuất dữ liệu trong bảng bannhac là hoàn toàn tương tự như truy xuất dữ liệu trong bảng nhacsi ở Bài 21, bao gồm:
- Truy xuất đơn giản: Chọn bảng bannhac, chọn thẻ Dữ liệu để xem toàn bộ.
- Sắp xếp: Nháy chuột vào tiêu đề cột để sắp xếp theo thứ tự tăng/giảm dần. Ví dụ: truy xuất theo thứ tự giảm dần của trường idBannhac, hoặc theo thứ tự tên các bản nhạc.
- Tìm kiếm bằng bộ lọc: Nháy nút phải chuột vào vùng dữ liệu, chọn Quick Filter để lọc. Ví dụ: lấy ra danh sách tên các bản nhạc của nhạc sĩ Văn Cao có trong bảng bannhac.
- Truy vấn SQL: Sử dụng thẻ Truy vấn để viết câu SQL linh hoạt hơn.
Nhiệm vụ 2: Tìm hiểu ứng dụng quản lí dữ liệu âm nhạc

SGK giới thiệu một phần mềm ứng dụng Quản lí dữ liệu âm nhạc với giao diện chuyên biệt. Phần mềm này cũng hoạt động như một chương trình khách của MySQL (giống HeidiSQL), nhưng được thiết kế chuyên biệt cho bài toán quản lí dữ liệu âm nhạc.
Cách tương tác với giao diện:
- Nhập mới: Nhập tên bản nhạc, chọn nhạc sĩ từ hộp danh sách phía dưới, sau đó chọn Nhập.
- Tìm kiếm: Nhập vài từ của tên bản nhạc, cũng có thể chọn nhạc sĩ nếu biết, sau đó chọn Tìm.
- Xem danh sách: Danh sách các bản nhạc đã có trong CSDL được thể hiện ở bảng phía dưới, thành nhiều trang (mỗi trang 10 dòng), có thể nháy chuột vào hộp danh sách trang để chọn trang.
- Sửa chữa: Muốn sửa một bản nhạc, nháy chuột vào phím radio (○) trên dòng đó, thông tin bản nhạc sẽ hiển thị ở phần phía trên giao diện để sửa chữa, thay đổi,… Nháy chuột chọn Nhập để lưu lại kết quả.
- Xoá: Muốn xoá một hay nhiều bản nhạc, nháy chuột vào các checkbox (☐) ở đầu các dòng tương ứng và chọn Xoá.
Nhận xét so sánh với HeidiSQL:
Ứng dụng Quản lí dữ liệu âm nhạc là một ứng dụng được thiết kế chuyên biệt cho bài toán quản lí dữ liệu âm nhạc. Giao diện được thiết kế hướng vào những nghiệp vụ mà người quản lí thường phải làm hàng ngày (không phải là giao diện hướng vào từng bảng dữ liệu như HeidiSQL). Tất cả các chức năng nhập mới, sửa chữa, xoá, tìm kiếm được tích hợp vào một giao diện duy nhất.
- Giao diện dễ hiểu, dễ sử dụng, hướng vào nghiệp vụ hàng ngày của người quản lí website âm nhạc.
- Giao diện có hỗ trợ nhập dữ liệu vào trường khoá ngoài theo tham chiếu (chọn nhạc sĩ từ hộp danh sách).
- Người sử dụng phần mềm không cần biết đến cấu trúc của các bảng dữ liệu (không cần biết bảng bannhac, nhacsi,…), vì giao diện đã che giấu đi các chi tiết kỹ thuật bên dưới.
III. Hướng dẫn giải bài tập SGK
Bài 1 (Luyện tập)
Đề bài: Cập nhật dữ liệu vào bảng banthuam.
Hướng dẫn thực hành:
Bảng banthuam có cấu trúc: banthuam(idBanthuam, idBannhac, idCasi). Trong đó idBanthuam là khoá chính AUTO_INCREMENT, idBannhac là khoá ngoài tham chiếu đến bảng bannhac, idCasi là khoá ngoài tham chiếu đến bảng casi.
Thêm dữ liệu: Chọn bảng banthuam, chọn thẻ Dữ liệu. Nhấn Insert để thêm hàng mới. Trường idBanthuam tự động tăng nên không cần nhập.
- Với trường idBannhac (khoá ngoài): nháy đúp chuột vào ô idBannhac, hộp danh sách hiện ra liệt kê các bản nhạc đã có trong bảng bannhac. Chọn bản nhạc tương ứng.
- Với trường idCasi (khoá ngoài): nháy đúp chuột vào ô idCasi, hộp danh sách hiện ra liệt kê các ca sĩ đã có trong bảng casi. Chọn ca sĩ tương ứng.
Nhập lần lượt 10 bản thu âm theo dữ liệu ở Bảng 18.5 (Bài 18):
| idBanthuam | idBannhac | idCasi |
|---|---|---|
| 1 | 1 (Du kích Sông Thao) | 5 (Doãn Tần) |
| 2 | 2 (Trường ca Sông Lô) | 2 (Lê Dung) |
| 3 | 3 (Tình ca) | 1 (Trần Khánh) |
| 4 | 4 (Xa khơi) | 3 (Tân Nhàn) |
| 5 | 5 (Việt Nam quê hương tôi) | 4 (Quốc Hương) |
| 6 | 6 (Tiến về Hà Nội) | 5 (Doãn Tần) |
| 7 | 7 (Nhạc rừng) | 4 (Quốc Hương) |
| 8 | 8 (Tiếng hát giữa rừng Pác Bó) | 2 (Lê Dung) |
| 9 | 2 (Trường ca Sông Lô) | 1 (Trần Khánh) |
| 10 | 6 (Tiến về Hà Nội) | 4 (Quốc Hương) |
Sửa chữa: Nháy đúp chuột vào ô cần sửa. Với trường khoá ngoài, hộp danh sách sẽ hiện ra để chọn lại giá trị.
Xoá: Tương tự Bài 21.
Bài 2 (Luyện tập)
Đề bài: Truy xuất dữ liệu bảng banthuam theo các tiêu chí khác nhau.
Hướng dẫn thực hành:
Truy xuất đơn giản: Chọn bảng banthuam, chọn thẻ Dữ liệu.
Sắp xếp: Nháy chuột vào tiêu đề cột idBanthuam để sắp xếp theo thứ tự giảm dần.
Tìm kiếm bằng bộ lọc: Ví dụ, lọc các bản thu âm của ca sĩ có idCasi = 2 (Lê Dung): nháy nút phải chuột vào vùng dữ liệu idCasi, chọn Quick Filter → nhập điều kiện lọc.
Truy vấn SQL: Chọn thẻ Truy vấn. Ví dụ, lấy danh sách các bản thu âm của ca sĩ có idCasi = 4 (Quốc Hương), sắp xếp theo idBannhac:
SELECT idBanthuam, idBannhac, idCasi
FROM banthuam
WHERE idCasi = 4
ORDER BY idBannhac
;
Chọn nút chạy (▶) để xem kết quả.
Bài Vận dụng
Đề bài: Hãy thực hành cập nhật và truy xuất bảng Phường/Xã trong CSDL quản lí danh sách tên phường/xã, tỉnh/thành phố.
Hướng dẫn thực hành:
Bảng phuongxa có cấu trúc:
phuongxa(idPhuongxa, tenPhuongxa, idTinhtp)
Trong đó idTinhtp là khóa ngoài tham chiếu đến bảng tinhtp. Đảm bảo bảng tinhtp đã có dữ liệu (đã nhập ở Bài 21 – Vận dụng).
Thêm dữ liệu
Chọn bảng phuongxa, chọn thẻ Dữ liệu. Nhấn Insert, trường idPhuongxa tự động tăng nên không cần nhập.
- Nháy đúp chuột vào ô tenPhuongxa, nhập tên phường/xã.
- Nháy đúp chuột vào ô idTinhtp (khóa ngoài), hộp danh sách sẽ hiển thị các tỉnh/thành phố đã có trong bảng tinhtp. Chọn tỉnh/thành phố tương ứng.
Ví dụ nhập:
- Phường Ba Đình → Hà Nội
- Phường Hoàn Kiếm → Hà Nội
- Phường Bến Thành → TP. Hồ Chí Minh
- Phường Hải Châu → Đà Nẵng
Sửa dữ liệu
Nháy đúp chuột vào ô cần sửa để chỉnh sửa nội dung. Đối với trường idTinhtp, hộp danh sách sẽ hiện ra để chọn lại tỉnh/thành phố tương ứng.
Xóa dữ liệu
Thực hiện tương tự Bài 21. Lưu ý: không thể xóa một dòng trong bảng tinhtp nếu giá trị idTinhtp đó đang được tham chiếu trong bảng phuongxa.
Truy xuất bằng SQL
Ví dụ: lấy danh sách các phường/xã thuộc Hà Nội (giả sử idTinhtp của Hà Nội bằng 1):
SELECT idPhuongxa, tenPhuongxa, idTinhtp
FROM phuongxa
WHERE idTinhtp = 1
ORDER BY tenPhuongxa;
Nhấn nút Chạy (▶) để xem kết quả truy vấn.

Thầy Phạm Thành Danh
(Người kiểm duyệt, ra đề)
Chức vụ: Trưởng ban biên soạn môn Tin Học THPT
Trình độ: Cử nhân Sư phạm Tin học, Chứng chỉ hạng II, Chứng chỉ Tin học, Ngoại ngữ B1
Kinh nghiệm: 8+ năm kinh nghiệm tại Trường THPT Thuận Hóa
