2015-05-15 4 views
3

Возможно ли, что mysql автоматически обновит поле в таблице после достижения определенного числа?Автоматические обновления Mysql

У меня есть таблица с именем badges и имеет следующие поля

ID,name,image,level, percent 

Могу ли я сделать это так, что если поле процент получает определенное число (например, 50), поле уровня обновляется до 2 ,

Я думаю, что это будет триггер?

ответ

0

Да может это сделать с помощью сценария, и это запустить и выполнить на сервере автоматически ..

следовать этим шагам:

1) в первую очередь написать код, что вы хотите обновить в поле базы данных ,

2) установить cronjob для сервера, выполнить свой запрос сам.

+0

Хорошо. Я знаю, как обновить поле с помощью кода sql. Я не знаю, как обновить поле, когда другое поле достигнет определенной точки. Кроме того, работа cron выглядит прямолинейно. – Jess

+0

Который будет очень неэффективным, и обновления не будут выполняться в реальном времени :( – symcbean

3

Вы можете сделать несколько вещей.

В синтаксисе

Вы можете даже записать его в синтаксисе, Allthough значение не изменяется в таблице, то отображается только что-то другое. Как это

SELECT ID, 
     name, 
     image, 
     CASE WHEN percent > 50 THEN 2 ELSE level END AS Level, 
     percent FROM.... 

В Trigger

После каждой вставки вы должны рассчитывать значение, а затем обновить соответствующим образом. Может быть что-то вроде этого

DELIMITER $$ 

DROP TRIGGER IF EXISTS databasename.badges_AUPD$$ 
USE databasename$$ 
CREATE TRIGGER `badges_AUPD` AFTER UPDATE ON `badges` FOR EACH ROW 

// Added this line from Andreas Wederbrands answer which is the correct way 

set new.level := case when percent < 50 then 0 
        when percent < 75 then 1 
        else 2; 
    $$ 
DELIMITER ; 

В хранимых процедурах

Вы можете просто запланировать событие, которое выполняет хранимую процедуру. Это, однако, не будет работать, если вам действительно нужно значение, которое будет изменено, когда он достигает 50.

CREATE PROCEDURE `updateLevel`() 
BEGIN 
UPDATE badges set level=2 WHERE precentage > 50; 
END 
+0

Получение этой ошибки - Обновление новой строки не допускается после запуска триггера – Jess

+0

Удалите созданный TRIGGER и создайте его, но с 'AFTER INSERT' ,Вам нужно это на 'AFTER UPDATE', потому что когда строка новая и вставлена, она автоматически имеет значение уровня справа? –

+0

Не было создано триггера. Я хотел бы ввести это под вкладкой SQL? – Jess

1

Производные значения лучше всего вычисленный при чтении вместо хранения, таким образом, вы можете изменить свои пороги, когда вы хотите

select ID, 
     name, 
     image, 
     case when percent < 50 then 0 
      when percent < 75 then 1 
      else 2 
      as level, 
     percent 
    from some_table; 

другой Вашей альтернативы установить значение уровня в триггере

create trigger set_level 
before insert on some_table 
for each row begin 
    set new.level := case when percent < 50 then 0 
         when percent < 75 then 1 
         else 2; 
end 

Сделайте то же самое для before update.

Вы не должны пересчитывать все уровни таблиц вставки/обновления только одной или нескольких строк.

+0

вы правы, я забыл об этом. Повлияет на все «INSERT». Скажи мне! –

Смежные вопросы