powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Тригер на Insert, выполняющий ряд операций над строкой
5 сообщений из 5, страница 1 из 1
Тригер на Insert, выполняющий ряд операций над строкой
    #38845164
zuu.dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте! Я – новичок в MySql. Прошу помочь!

Есть таблица table. Нужно, чтобы после вставки в нее новой записи, срабатывал тригер, который бы для добавленного в поле field (varchar(40) utf8_bin) слова любой длины выполнял следующие операции:
1) переводил его в нижний регистр;
2) затем разбивал на удлиняющиеся на 1 символ части слова, начиная с 3-го символа и заканчивая последним;
3) затем делал бы из этих частей md5 хэши;
4) формировал бы строку из этих хэшей, разделенных запятыми;
5) и записывал бы эту строку в поле hash.

Пример :

В поле field таблицы table добавлено слово «Ноутбук». Последовательность операций:
1. ноутбук
2. ноу,ноут,ноутб,ноутбу,ноутбук
3. md5(ноу), md5(ноут), md5(ноутб), md5(ноутбу), md5(ноутбук)
4. 4c4252274730c5b675b110586781106c,5f58457e1d9c7d4abe9bc8f110ee4b8a,f5aead5b18c9d39d8af4157ece65d4f4, 2c598ddb40daa80ce9477adee696dfea,2de979c6305dd4196a74432544dce088
5. Строка из п.4 должна записаться в поле hash той же таблицы.
...
Рейтинг: 0 / 0
Тригер на Insert, выполняющий ряд операций над строкой
    #38845281
JeStone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
zuu.dev,
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
USE license_import;

DELIMITER $$


CREATE TRIGGER my_db.my_trigger
BEFORE INSERT
ON my_db.my_table
FOR EACH ROW
BEGIN
  DECLARE idx int DEFAULT 3;
  DECLARE hash_ text DEFAULT '';
  SET NEW.field = LOWER(NEW.field);
  WHILE idx <= LENGTH(NEW.field) DO
    SET @tmp_str = SUBSTRING(NEW.field, 1, idx);
    SET hash_ = CONCAT(hash_, IF(hash_ <> '', ',', ''), MD5(@tmp_str));
    SET idx = idx + 1;
  END WHILE;
  SET NEW.hash = hash_;
END
$$

DELIMITER ;


Но работает медленно.
...
Рейтинг: 0 / 0
Тригер на Insert, выполняющий ряд операций над строкой
    #38845346
zuu.dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
JeStone, огромное спасибо! Работает так, как мне нужно! Скорость не важна в данном случае!
...
Рейтинг: 0 / 0
Тригер на Insert, выполняющий ряд операций над строкой
    #38845427
zuu.dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Узнал, что LENGTH() определяет размер в байтах, а CHAR_LENGTH() - в символах. Еще раз - спасибо!
...
Рейтинг: 0 / 0
Тригер на Insert, выполняющий ряд операций над строкой
    #38848482
alex564657498765453
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
zuu.devJeStone, огромное спасибо! Работает так, как мне нужно! Скорость не важна в данном случае!

ну именно сдесь вообще ничего не важно!!!

чем для выборки не устраивал like 'xxx%'
ведь всёравно куски слова сначала. индекс на таком лайке сработает.

длина мд5, да ещо не одного а нескольких(лучше сказать дофигища) да ещо в строку записано... короче может я конечно чегото не допонял, но сама идея - эти мд5 полученные таким образом да таким способом хранить , я лично вообще смысла не нахожу.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Тригер на Insert, выполняющий ряд операций над строкой
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]