Как сказать MySQL для запуска хэша перед обновлением / вставкой? - PullRequest
4 голосов
/ 20 августа 2011

Я изо всех сил пытаюсь создать триггер в MySQL, чтобы каждый раз, когда я вставлял значение в столбец с именем title, хеш создавался и сохранялся в столбце title_hash.Поскольку я не знаю, как это работает, я нашел этот код во время поиска в Google:

CREATE TRIGGER insertModelHash
BEFORE
  INSERT
ON
  products
FOR EACH ROW SET
  NEW.model_hash = CONV(RIGHT(MD5(NEW.products_model), 16), 16, 10)

MySQL-ссылка говорит мне, что это означает:

  1. Создать триггер с именем insertModelHash ...
  2. ... перед вставкой строки int в таблицу products ...
  3. используйте функции MD5, RIGHT, CONV в столбце products_model в каждой новой строке, которую я намереваюсьinsert.

3. Точка нуждается в дополнительном объяснении:

  • Полагаю, что NEW является своего рода идентификатором новых строк.Таким образом, NEW.products_model указывает на столбец products_model в текущей (новой) строке.
  • Затем выдается MD5.Поскольку я хочу использовать SHA-2, для меня очевидно, что нужно изменить MD5(NEW.products_model), 16) ===> SHA2(NEW.products_model), 224).
  • И теперь я борюсь: почему этот парень использует CONV(RIGHT(...)...)?Это действительно необходимо?

Дополнительная информация: Сейчас я делаю

hashlib.sha224(title).hexdigest()

в Python и сохраняю это значение.

Я ценюлюбые предложения / объяснения!

1 Ответ

5 голосов
/ 20 августа 2011

Чтобы ответить на три вопроса:

Ключевое слово NEW ссылается на псевдотаблица для вставляемой записи.В обновленном триггере вы можете получить доступ как к «NEW», так и к «OLD», а для удаления - просто «OLD».

Да, MD5 используется для создания хэша.Однако в вашем вопросе у вас есть часть параметра для функции 'RIGHT'.Это только MD5(NEW.products_model) (нет , 16). И да, вы можете заменить SHA2 на MD5, если он доступен (он доступен только в том случае, если MySQL настроен на поддержку SSL).

RIGHT(string, number) просто занимаетправильные «числовые» символы из «строковых». Функция CONV () используется для преобразования числа между основаниями. Комбинация этих двух последних функций берет правильные 16 символов хеш-кода и преобразует их из 16-го основания (шестнадцатеричное)к основанию 10 (десятичное число).

И ответ - нет, они вам не нужны, если все, что вы хотите сделать, это сохранить сам хэш.

  NEW.model_hash = SHA2(NEW.products_model)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...