Đọc bảng cha trước khi nhập
Trong CSDL **thực hành** `btvn19_lab`, mở `nhacsi` để biết mã của tên hư cấu “Mai An”. Trên máy thử, người này có `idNhacsi = 1`; trên máy khác phải đọc mã thực tế. Mở `bannhac` → **Data/Dữ liệu**, kiểm ba cột `idBannhac`, `tenBannhac`, `idNhacsi`. Bảng đã có khóa ngoại `bannhac.idNhacsi → nhacsi.idNhacsi` từ Bài 20.
**Nhiệm vụ:** thêm bài hư cấu “Ngày nắng” của Mai An. Nhấn **Insert/thêm hàng**, để trống ô `idBannhac` tự tăng, nhập tên bài; tại ô `idNhacsi`, mở danh sách và chọn **Mai An (mã hiện trên máy)**. Ở HeidiSQL 12.21 bản Linux thử nghiệm, cần nhấn **Enter hoặc Tab để chốt ô khóa ngoại**, rồi bấm **Post/dấu kiểm xanh**. Đọc lại hàng đã lưu: tên “Ngày nắng” và mã nhạc sĩ phải cùng nằm trên một hàng. Nếu đang làm trên CSDL đã có bài ấy thì không thêm lặp; dùng hàng sẵn để kiểm.
Danh sách giúp chọn mã, ràng buộc giữ quan hệ
Danh sách trong HeidiSQL có thể hiện tên kèm mã để người nhập dễ chọn; **giá trị lưu ở cột khóa ngoại là mã**, không phải tên. MySQL từ chối mã nhạc sĩ chưa tồn tại. Khi thử nhập tên mà bỏ mã, máy thử báo thiếu `idNhacsi`; khi nhập mã 99 chưa có, máy thử báo vi phạm khóa ngoại. Hãy sửa dữ liệu nhập rồi lưu lại, không tạo nhạc sĩ giả chỉ để vượt lỗi.
Mã `idBannhac` do máy cấp. Trong một lần thử, hai lệnh thêm bị lỗi trước khi hàng hợp lệ được lưu nên mã hàng mới là **6** dù trước đó chỉ thấy mã 1 và 2. Vì vậy không đoán mã tiếp theo bằng cách lấy mã lớn nhất cộng 1. Sau khi Post, đọc mã vừa được cấp trên bảng của mình. Danh sách chỉ giúp chọn **một hàng có thật**; nó không chứng minh bài hát thực tế thuộc về đúng người. Dữ liệu ví dụ ở đây đều hư cấu.
Bài luyện
Thêm “Ngày nắng” vào bannhac, idBannhac tự tăng. Cần nhập gì?
Bảng còn yêu cầu tên và khóa ngoại.
Mã bài được tự cấp, còn mã nhạc sĩ phải tham chiếu hàng có thật.
idBannhac là mã số bản nhạc.
Mã chưa có ở nhacsi bị từ chối.
Lời giải
Nhập tenBannhac, chọn idNhacsi đã tồn tại và để idBannhac tự tăng. Sau Post, đọc lại mã bài vừa được cấp.
Bài luyện
Danh sách khóa ngoại hiển thị “Mai An (1)”. Giá trị nào được lưu ở bannhac.idNhacsi?
Tên nằm ở bảng nhacsi.
Cột idNhacsi lưu mã tham chiếu.
Tên bài thuộc tenBannhac.
Mã bài nằm ở idBannhac.
Lời giải
HeidiSQL cho thấy tên để dễ chọn; bảng bannhac lưu mã 1 để tham chiếu tới hàng Mai An trong nhacsi.
Bài luyện
Bảng đã có mã bài 1 và 2; sau một lần thêm lỗi, bài hợp lệ nhận mã 6. Kết luận nào đúng?
Không sửa khóa chính chỉ để lấp khoảng trống.
Lần cấp mã có thể để lại khoảng trống.
Không có quy tắc tăng cố định theo khóa ngoại.
Khoảng trống không chứng minh đã từng có hàng được lưu.
Lời giải
AUTO_INCREMENT định danh hàng mới, không hứa các mã liên tiếp. Hãy đọc mã thật trên hàng đã lưu.
Đang học