#c# #mysql #transactions
#c# #mysql #операции
Вопрос:
Я запускаю транзакцию MySQL на C#, и мне не удалось выполнить второй запрос. Я получаю освобождение в следующей строке:
int no = sql_loc.ExecuteNonQuery();
db_local = "SERVER=localhost; Database=sync_r; UID=kandy; Password=kandy500;allow user variables=true"; MySqlConnection con_local = new MySqlConnection(db_local); con_local.Open(); delq = "delete from tbl_recipes"; // all records query = "insert into tbl_recipes(cat_id) values(6)"; MySqlTransaction tran = con_local.BeginTransaction(); MySqlCommand sql_loc = con_local.CreateCommand(); sql_loc.Transaction = tran; sql_loc.CommandText = delq; sql_loc.ExecuteNonQuery(); sql_loc.CommandText = query; int no = sql_loc.ExecuteNonQuery(); if (no == 1) sql_loc.Transaction.Commit(); else sql_loc.Transaction.Rollback();
ошибка, вызванная ниже
{"The user specified as a definer ('root'@'%') does not exist"}
но это не тот пользователь, которого я указал. Как я могу это исправить?? Где может быть реальная проблема?
Комментарии:
1. Проверьте пользователя в базе данных
2. Есть ли у
tbl_recipes
таблицы триггер? Вы можете запуститьSHOW TRIGGERS
в клиенте mysql. Я ожидаю, что триггер был определен,root@%
но этот пользователь больше не существует в вашем экземпляре. Или, возможноtbl_recipes
, это представление, и у представлений также есть определитель.3. @BillKarwin да, был триггер, и это было причиной. Большое спасибо
Ответ №1:
Как обсуждалось в комментариях выше, ошибка возникает из-за триггера, который пытается принять идентификатор своего определителя при выполнении, но определитель («root»@»%») больше не существует в экземпляре MySQL.
Обходной путь заключается в создании этого пользователя (даже если вы создадите его, а затем отключите аутентификацию).
Мы делаем это на моем рабочем месте. Мы определяем триггеры, хранимые процедуры и представления с помощью специального пользователя с СУПЕР привилегиями, хотя мы никогда не используем этого пользователя для доступа к базе данных. Мы создаем других пользователей MySQL для приложений и отдельных разработчиков, но не предоставляем этим пользователям СУПЕР привилегии.