2014-11-26 3 views
1

Я использую MySQL для тихого времени. Но я абсолютно не знаком с MySQL-триггерами.MySQL Триггер для вставки суммы двух полей в другую

 
Student Table 
--------------------------------------------------------- 
| midterm | final | second_chance | third_chance | total | 
--------------------------------------------------------- 
| 20 | 80 |    |    | 100 | 
--------------------------------------------------------- 
| 15 | 70 |    |    | 85 | 
--------------------------------------------------------- 

Учитывая приведенную выше таблицу Я хочу триггер, который выполняет следующие действия:
1- После каждой вставки или обновления таблицы на триггер должен проверить, если third_chance значения устанавливается, если так, то вставки (промежуточный + third_chance) в total OTHERWISE, он должен проверить, установлено ли значение second_chance; если установлен второй шанс, вставьте (second_chance + midterm) в общую сумму; наконец, если эти два (second_chance и third_chance) не устанавливают вставку (промежуточная + финальная) в общую.
Кто-нибудь может помочь?

ответ

0

ли эта проверка BEFORE INSERT и BEFORE UPDATE, а не после.

Например, что-то вроде этого:

DELIMITER $$ 

CREATE TRIGGER mytable_bu 
BEFORE UPDATE ON mytable 
FOR EACH ROW 
BEGIN 
    IF NEW.third_chance IS NOT NULL THEN 
     SET NEW.total = NEW.midterm + NEW.third_chance; 
    ELSEIF NEW.second_chance IS NOT NULL THEN 
     SET NEW.total = NEW.midterm + NEW.second_chance; 
    ELSE 
     SET NEW.total = NEW.midterm + NEW.final; 
    END IF; 
END$$ 

DELIMITER ; 

Вы бы также нужен подобный BEFORE INSERT курок.

0

Это может быть сделано с помощью триггера:

DELIMITER $$ 

CREATE TRIGGER mytable_bu 
BEFORE UPDATE ON mytable 
FOR EACH ROW 
BEGIN 
    SET NEW.total = NEW.midterm + 
        COALESCE(NEW.third_chance, NEW.second_chance, NEW.final); 
END$$ 

DELIMITER ; 

Но тот факт, что total является всегда рассчитывается на основе других столбцов может указывать это не должно быть действительно колонку в таблице вообще. Вместо этого он может быть рассчитанным столбцом на вид:

CREATE students_view AS 
SELECT s.*, 
     midterm + COALESCE(third_chance, second_chance, final) AS total 
FROM students.s 
Смежные вопросы