Nano Hash - криптовалюты, майнинг, программирование

Странное поведение mysql с триггерами

У меня есть таблица discussions, в которой хранятся данные постов на моем сайте.

Теперь у меня есть 2 триггера, один из которых вставляет столбец path при добавлении новой строки, а другой обновляет path при обновлении строки следующим образом:

CREATE TRIGGER discussions_trigger BEFORE INSERT ON discussions FOR EACH ROW
BEGIN
DECLARE next_id INT;
SET next_id = (SELECT AUTO_INCREMENT FROM information_schema.TABLES WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='discussions');
IF(NEW.visibility<1)
THEN
SET NEW.path = CONCAT('discussions.php?id=',next_id);
ELSEIF(NEW.visibility>=1)
THEN
SET NEW.path = CONCAT('private.php?id=',next_id);
END IF;

CREATE TRIGGER discussions_update_trigger BEFORE UPDATE ON discussions FOR EACH ROW
BEGIN
DECLARE next_id INT;
SET next_id = OLD.id;
IF(NEW.visibility<1)
THEN
SET NEW.path = CONCAT('discussions.php?id=',next_id);
ELSEIF(NEW.visibility>=1)
THEN
SET NEW.path = CONCAT('private.php?id=',next_id);
END IF;

Хотя это работает так, как должно, время от времени, когда я пытаюсь вставить или обновить таблицу discussions, я получаю следующую ошибку:

Пользователь abhishek@'An unknown IP' не определен.

Однако пользователь abhishek разрешен только с localhost.

Перепробовав все, я обнаружил, что удаление триггеров, а затем их повторное создание решает проблему. Когда я снова получил ошибку, я заново создал триггеры, и это сработало. В чем проблема?

20.05.2014

  • Как вы создаете триггер? Это через mysqli? Кроме того, можете ли вы перечислить детали триггера в БД? Использовать how triggers\G и проверить значение definer? Это user@localhost? 20.05.2014
  • @visakh Я создаю триггеры, используя клиент mysql по умолчанию. Кажется, я не могу использовать how triggers\G в клиенте mysql. Это дает ошибку. 20.05.2014
  • Извините, это был тип с моей стороны... команда show triggers\G 20.05.2014
  • Я вижу, что определитель не установлен на user@localhost , вместо этого он равен user@some ip 20.05.2014
  • Я думаю, вы можете посмотреть настройки файла hosts. 20.05.2014
  • @visakh, могу ли я установить определитель в файле конфигурации mysql? 20.05.2014
  • CREATE DEFINER='root'@'localhost' TRIGGER trigger_name должно работать. 20.05.2014
  • @visakh да, это работает. Спасибо! 20.05.2014
  • Дайте мне знать, если проблема с подключением повторяется. Если нет, я соберу все эти комментарии и опубликую в качестве ответа. 20.05.2014
  • @visakh да, сейчас это не повторяется. Вы можете опубликовать это как ответ. 20.05.2014

Ответы:


1

Запустите show triggers\G и проверьте, установлено ли DEFINER значение user@localhost.

Если нет, то измените DEFINER из TRIGGER на user@localhost. Синтаксис следующий:

CREATE DEFINER='username'@'localhost' TRIGGER trigger_name trigger definition

Подробное обсуждение смотрите в комментариях к вопросу.

20.05.2014
Новые материалы

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

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..