MySQL: Practical 8
1. Tạo một file có tên Lab8.sql.
2. Tạo một CSDL có tên DBLab8.
3. Tạo ba bảng và chèn dữ liệu như sau:
Bảng Food lưu danh sách các món ăn gồm mã món ăn (fID), tên món ăn (Name), giá món ăn (Price):
fID (int, PK) |
Name (nvarchar(30)) |
Price (money) |
---|---|---|
1 |
Gà hấp xì dầu |
27000 |
2 |
Sườn nõn sốt chanh |
33000 |
3 |
Bò xào hành tỏi |
23000 |
4 |
Cá thu sốt |
31000 |
Bảng FoodStuff lưu danh sách thực phẩm dùng để chế biến món ăn gồm mã thực phẩm (sID), tên thực phẩm (Name), loại thực phẩm (Type):
sID (int, PK) |
Name (nvarchar(30)) |
Type (int) |
---|---|---|
1 |
Thịt gà |
1 |
2 |
Thịt lợn |
1 |
3 |
Thịt bò |
1 |
4 |
Cá thu |
1 |
5 |
Hành |
2 |
6 |
Tỏi |
2 |
7 |
Cà chua |
2 |
8 |
Xì dầu |
2 |
9 |
Chanh |
2 |
10 |
Hạt tiêu |
2 |
Bảng FoodDetail mô tả các thực phẩm dùng để chế biến thành mỗi món ăn gồm fID, sID:
fID (int, FK tham chiếu tới fID của Food) |
sID (int, FK tham chiếu tới sID của FoodStuff) |
---|---|
1 |
1 |
1 |
8 |
2 |
2 |
2 |
9 |
2 |
7 |
2 |
5 |
3 |
3 |
3 |
5 |
3 |
6 |
4 |
4 |
4 |
7 |
4. Hiển thị tên các món ăn và tên các thực phẩm dùng để chế biến các món ăn đó:
|
Món ăn |
Thực phẩm |
---|---|---|
1 |
Bò sào hành tỏi |
Thịt bò |
2 |
Bò sào hành tỏi |
Hành |
3 |
Bò sào hành tỏi |
Tỏi |
4 |
Cá thu sốt |
Cá thu |
5 |
Cá thu sốt |
Cà chua |
6 |
Gà hấp xì dầu |
Thịt gà |
7 |
Gà hấp xì dầu |
Xì dầu |
8 |
Sườn nõn sốt chanh |
Thịt lợn |
9 |
Sườn nõn sốt chanh |
Hành |
10 |
Sườn nõn sốt chanh |
Cà chua |
11 |
Sườn nõn sốt chanh |
Chanh |
sID |
Name |
Type |
---|---|---|
10 |
Hạt Tiêu |
2 |
|
Name |
---|---|
1 |
Hành |
2 |
Cà chua |
|
Name |
---|---|
1 |
Sườn nõn sốt chanh |
Name |
Type |
---|---|
Thịt gà |
Thực phẩm chính |
Thịt lợn |
Thực phẩm chính |
Thịt bò |
Thực phẩm chính |
Cá thu |
Thực phẩm chính |
Hành |
Gia vị |
Tỏi |
Gia vị |
Cà chua |
Gia vị |
Xì dầu |
Gia vị |
Chanh |
Gia vị |
Hạt tiêu |
Gia vị |
|
fID |
Name |
Price |
---|---|---|---|
1 |
2 |
Sườn nõn sốt chanh |
33000.000 |
2 |
4 |
Cá thu sốt |
31000.000 |
3 |
1 |
Gà hấp xì dầu |
27000.000 |
4 |
3 |
Bò sào hành tỏi |
23000.000 |
10. Tăng giá các món ăn lên 10%. Sau đó hiển thị danh sách các món ăn và giá lên màn hình. Cuối cùng phục hồi lại giá ban đầu cho tất cả các món ăn.
11. Viết một thủ tục lưu trữ là sp_FoodChoice nhận vào 1 tham số là số tiền, thủ tục lữu trữ này sẽ hiển thị tất cả các món ăn có giá tiền nhỏ hơn số tiền được truyền vào.
12. Sửa thủ tục lưu trữ ở câu trên để nó có thể nhận vào 2 tham số, tham số thứ nhất là tên thực phẩm, tham số thứ 2 là phân loại món ăn theo 2 giá trị 'Rẻ' và 'Đắt'. Thủ tục lưu trữ sẽ hiện ra màn hình tất cả các món ăn và giá tiền thỏa mãn cả 2 điều kiện sau:
Điều kiện 1: Món ăn được chế biến từ các loại thực phẩm mà có tên tương tự tham số thứ nhất.
Điều kiện 2: Nếu tham số thứ 2 là 'Rẻ' thì chỉ lấy món ăn có giá nhỏ hơn 30000, nếu tham số thứ 2 là 'Đắt' thì chỉ lấy món ăn có giá lớn hơn hoặc bằng 30000, nếu tham số thứ 2 là '*' thì lấy các món ăn với giá bất kỳ.
Ví dụ, nếu chạy câu lệnh Exec FoodChoice 'Thịt', 'Rẻ' thì kết quả sẽ hiện ra như sau:
|
Name |
Price |
---|---|---|
1 |
Gà hấp xì dầu |
27000.000 |
2 |
Bò xào hành tỏi |
23000.000 |
13. Tạo một trigger tên là tg_NoUpdatePrice trên bảng Food, trigger này sẽ ngăn cản ko cho phép sửa (Update) giá món ăn thành giá trị lớn hơn hoặc bằng 40000, nếu người dùng cố tình sửa giá món ăn thành giá trị lớn hơn thì sẽ nhận được một thông báo 'Giá phải nhỏ hơn 40000'.
14. Tạo một trigger tên tg_delFood trên bảng Food sao cho khi 1 món ăn trong bảng Food bị xóa, trigger này sẽ xóa các thông tin liên quan đến món ăn đó trong bảng FoodDetail.