2014-01-24 2 views
1

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

Я хочу быть в состоянии предотвратить удаление категорий с определенным именем или идентификатором. Это достаточно просто, чтобы выполнить проверку с помощью jquery, но я хочу добавить еще один уровень безопасности, добавив проверку в базу данных. Пара вопросов ...

Trigger или procedure? Я никогда не использовал процедуры раньше, и из того, с каким небольшим срабатыванием триггеров у меня есть триггеры, я не знаю, как решить проблему. Предполагая, что триггеры могут использоваться, как я могу удалить эту категорию? И тогда, как я могу прекратить удаление этой строки в базе данных?

В начале, у меня есть следующий код для триггера.

delimiter $$ 
    CREATE TRIGGER category_delete BEFORE DELETE ON categories 
     FOR EACH ROW 
      BEGIN 

      END$$ 
delimiter ; 

ответ

6

Бросить исключение из триггера для отмены удаления:

delimiter $$ 
CREATE TRIGGER category_delete BEFORE DELETE ON categories 
FOR EACH ROW 
BEGIN 
    IF old.id = 5 THEN -- use whatever condition you need 
     SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'May not delete id 5'; 
    END IF; 
END$$ 
delimiter ; 
0

Просто добавьте триггер и связал его.

Используйте базу данных, чтобы поддерживать бизнес-логику и поддерживать ее согласованность и то, что требуется - несмотря на то, что PHP, JQuery и т. Д. Бросают на нее. Это основной бизнес утверждает

+3

Это прямо на границе, не ответ, вероятно, не ответ. Какой триггер? В точку? Где код? Это в основном комментарий. – Bohemian

+0

@Bohemian - Это лучший ответ, который я мог бы найти в вопросе. Знаете ли вы, каков тип категории и кто ее избегает. Также было немного комментариев, что базы данных являются одним из самых важных и дорогостоящих утверждений компаний. –

+0

Я тоже так думал. Я даже написал производственную систему, используя хранимые процедуры. Теперь я знаю лучше. * Данные * важны. * База данных * почти не имеет значения. Прочитайте [this] (http://stackoverflow.com/questions/8516088/when-to-use-a-stored-procedure-mysql/8516334#8516334) и распространите это на все «свойства» базы данных, за исключением тех, которые поддерживают [ACID ] (http://en.wikipedia.org/wiki/ACID). Реальный актив - это даже не код приложения, это тестовые тесты. Все остальное - это просто выбор реализации. – Bohemian

Смежные вопросы