30/09/2018, 23:54
Em có 1 câu sql muốn nhờ mọi ng giúp ạ
Chào mọi ng, e là thành viên mới, hiện tại e mới học Procedure, Function và Trigger nên muốn nhờ mọi ng giúp 1 tí ạ. Hiện tại e đang có 1 câu hỏi về Trigger như này ạ:
Viết 1 … tư động update tất cả Điểm Trung Bình của bảng Điểm ạ. Tức là k cần làm gì nó cũng tự update ấy ạ. Moi ng giúp e với ạ.
Bài liên quan
k cần làm gì thì nó vẫn tự update là sao? * đoạn này mình bị nhầm lẫn * chắc bạn nhầm với hành động của trigger, trigger chạy tự động, chứ k phải là k làm gì nó cũng chạy
trigger phân ra 2 loại, dml (thao tác) và ddl (định nghĩa ) trigger
dạng của bạn cần viết là dml , trên bảng DIEM
trigger dml thì có 3 hành động, INSERT , DELETE, UPDATE
bạn làm gì đó với bảng DIEM thì trigger nó mới chạy
ví dụ sau mỗi lần xóa điểm,thêm điểm, sửa điểm 1 môn học thì phải cập nhật lại điểm tb
Thực ra cái này cũng phải xem logic thì mới có hướng viết trigger được. Vì bạn thiết kế mỗi học sinh có quan hệ 1-1 với điểm nên có thể có 1 số action sau:
1- Chỉ có vài điểm như Toán, hoặc Lý, … còn các điểm # null thì vẫn có record và lúc đó có tính trung bình không? Hay phải full 4 điểm thì mới tính.
2- Có delete row trong bảng điểm không?
3- Có cho phép 1 điểm cập nhật thành null không?
4- Ngoài ra, có thể có logic là nếu cập nhật nhưng điểm không đổi thì k cần tính trung bình nữa.
Trong đoạn trigger trên có kiểm tra logic là giá trị mới phải # với giá trị cũ, nếu không cần thì chỉ lấy MaHS xong dùng câu lệnh UPDATE là được.
Dạ tức là mình nhập tất cả điểm Toán Lý Hóa Anh vào cho 100 bản ghi rồi xong chỉ cần chạy 1 trigger nó sẽ tự tính hết 100 điểm trung bình chứ k cần update hay gì ấy ạ
Như này thì mình vẫn phải update 1 điểm nào đó thì nó mới tính ĐTB cho mình đúng k ạ?
Theo mình đọc cái bảng SQL này thì để tính điểm trung bình bạn chỉ cần dùng function chứ sao lại dùng trigger. Trigger là là ràng buộc khi INSERT, UPDATE hay DELETE 1 cột nào đó (Ví dụ bạn nhập điểm vào là 11 thì Trigger nó sẽ báo sai).
Trigger chỉ cần kết hợp trong function để kiểm tra điều kiện là các đầu điểm đều được nhập
dạ vâng ạ. Hình như phải dùng function ạ. Để e xem sao ạ. Cô giáo e gợi ý dùng con trỏ ^^
Nếu chỉ cần tính toán điểm trung bình thì làm một cái Query là đủ
nó sẽ update cả table luôn, kể cả những record đã được tính toán từ trước.
Còn nếu chỉ muốn update 100 cái mới được insert vào thì bảng điểm bạn nên có một id auto-increment, sau đó xem cái id lần cuối là bao nhiêu, rồi dùng:
Chứ cần gì viết procedure / function làm gì.