Предисловие:
У меня внешний интерфейс MS Access 2010 работает с внутренним MySQL.
У меня есть компании, у которых есть сайты и сотрудники, связанные с этими сайтами компаний, и я хочу разрешить пользователям удалять сайты, если это необходимо, НО это будет возможно только в том случае, если там, где нет сотрудников, связанных с этими сайтами, что хорошо, как Внешние ключи MySQL применяют это в любом случае, поэтому, если я пытаюсь удалить сайт, и все еще есть сотрудники, связанные с этим сайтом, это приводит к ошибкам.
НО единственный способ, которым я должен проверить, чтобы проверить, действительно ли удаление (будет работать), состоит в том, чтобы попытаться удалить его, НО тогда он выполнит удаление, ЕСЛИ все в порядке. Но я хочу иметь возможность проверить, возможно ли удаление перед выполнением удаления, чтобы я мог определить, должен ли выполняться весь другой код, который также происходит непосредственно перед удалением.
Я думал об использовании «Начать транзакцию; ..... Откат;» но это не может быть сделано с помощью доступа к MySQL любым способом, который я могу придумать. Я пробовал:
1) Passthrough Query (но, очевидно, вы можете пропустить только один запрос на операцию, чтобы я мог передать удаление, но не "Start Transaction;" или Rollback; "): (
2) Хранимая процедура - Передача удаления в хранимую процедуру, которая выполняет ее между «Начать транзакцию»; и "RollBack;" как:
DELIMITER $$
CREATE DEFINER=`root`@`%` PROCEDURE `SP_TestStatementExecution`(
IN SQLString TEXT
)
BEGIN
START TRANSACTION;
SET @query := SQLString;
PREPARE stmt FROM @query;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
ROLLBACK;
END
НО, который не кажется ошибочным, когда он недействителен: (
Мне бы хотелось, чтобы можно было несколько заявлений за один раз, поэтому я думал о чем-то вроде этого:
------------------------------------------------------------------------------
-- Routine DDL
-- Note: comments before and after the routine body will not be stored by the server
-- --------------------------------------------------------------------------------
DELIMITER $$
CREATE DEFINER=`root`@`%` PROCEDURE `SP_TestStatementsExecution`(
IN SQLString TEXT
)
BEGIN
SET @Delim = ";";
SET @Pos2 = INSTR(SUBSTRING(SQLString,@Pos1), @Delim);
START TRANSACTION;
WHILE @Pos2 > 0 DO
SET @query = SUBSTRING(
SQLString,
1,
@Pos2
);
PREPARE stmt FROM @query;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
SET SQLString = SUBSTRING(SQLString,@Pos2 + 1);
SET @Pos2 = INSTR(SUBSTRING(SQLString,1), @Delim);
END WHILE;
ROLLBACK;
END
НО, пока я не получу ошибку, чтобы остановить выполнение и вернуть ошибку для доступа, который не годится ...
Вопрос:
Как я могу проверить, будет ли серия операторов SQL выполняться в MySQL без фиксации в БД?
В настоящее время я работаю над прямым откатом Access с книгами, но предпочел бы иметь возможность сделать это в MySQL напрямую, если это возможно