2009-04-08 2 views
0

Я стараюсь, чтобы увеличить поле в MySQL, но кажется, что он на самом деле не работает по некоторым причинам ...Приращение в MySQL

То есть запрос я бегу в MySQL Query:

UPDATE profil_perso 
SET profile_views = profile_views +1 
WHERE id = 30537 

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

SELECT * 
FROM profil_perso 
WHERE id = 30537 

И нашли 1 строку и поле profile_views еще при 0 ...

Любые идеи, почему это должно быть так?

profile_views = 1 (устанавливается вручную) в данный момент, и он по-прежнему не работает.

+0

Вы производите выбор в той же сделке? – vartec

+0

Так в чем дело? ;) – Quassnoi

ответ

3

Вы не забыли совершить транзакцию при работе с таблицей InnoDB?

UPDATE:

Поскольку это MyISAM, я задам еще пару глупых вопросов:

  1. Вы абсолютно уверены, что вы выдачи UPDATE и SELECT против одной базы данных?

    У меня когда-то была большая ферма баз данных с идентичными схемами, и раньше это было проблемой, когда кто-то удалял что-то из неправильной базы данных.

    • Не используете ли вы какое-то клиентское кэширование на своем клиенте? Какой клиент вы используете?

И попробуйте REPAIR ваш стол, это также может быть проблемой.

+0

это MyISAM :-) – Erick

+0

Человек ... как фол, я ... он работает полностью нормально. Я выбирал из _dev db вместо _production db. Лол! Странно, dproductions db был смелым одновременно. Сейчас работает. – Erick

+0

Добро пожаловать в клуб :) – Quassnoi

2

Просто для проверки - это profile_views ноль или нуль? Если вы добавите 1 к нулевому, вы все равно получите нуль, так что это может быть вашей проблемой.

ETA:

Не имеет значения. Следующий вопрос был бы, у вас есть autocommit, или, если нет, вы выпустили «commit»? Может быть, он был обновлен, но ваше обновление так и не было выполнено.

+0

Это на нуле. Сначала я подумал, что это будет так, и установите его на 1. Все еще остается в 1 после обновления. – Erick

+0

Таблица MyISAM, поэтому она не должна влиять на нее, не так ли? – Erick

0

Добавьте некоторые скобки и сливаются, чтобы увидеть, если это фиксирует это:

UPDATE profil_perso 
SET profile_views = (COALESCE(profile_views,0) + 1) 
WHERE id = 30537 
+0

Пробовал и остается 1. – Erick

1

Если это нуль, не будет увеличиваться.

UPDATE profil_perso 
SET profile_views = IF(profile_views,profile_views+1,1) 
WHERE id = 30537 
+0

Вы (я) узнаете что-то новое каждый день! –

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