TRIGGER (SQL)

Печать RSS
202

Автор
Пришелец
0
Доброго времени суток, уважаемые Форумчане)
Друзья, пытаюсь создать триггер который удалял бы хвосты файлов при удалении директории но, пред моим взором навязчиво возникает мною заскриненая и к посту прикрепленная ошибка. Может это Денвер лагает и лучше его заменить Xampp(ом)?
А вот собственно и код злополучного триггера.
DELIMITER $$
CREATE OR REPLACE TRIGGER `tg_foto_dir`
AFTER DELETE ON `ac_foto_dir`
BEGIN
IF(SELECT COUNT(*) FROM `ac_foto_file` WHERE `id_dir` = OLD.id LIMIT 1) = 1
THEN (DELETE FROM `ac_foto_file` WHERE `id_file` = OLD.id) END IF;
END $$
DELIMITER;
Триггер №2 (Они взаимосвязаны, посему - неразлучныsmile ))
DELIMITER $$
CREATE OR REPLACE TRIGGER `tg_foto_alb`
AFTER DELETE ON `ac_foto_album` 
BEGIN
IF(SELECT COUNT(*) FROM `ac_foto_album` WHERE `id_album` = OLD.id LIMIT 1) = 1
THEN (DELETE FROM `ac_foto_file` WHERE `id_album` = OLD.id) END IF;
END $$
DELIMITER;

Добавлено через 00:40 сек.
Таблица директорий
/*
		Таблица директорий в фотоальбомах
	*/
	CREATE TABLE IF NOT EXISTS `ac_foto_dir`
	(
		`id` SERIAL,
		`time` TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT 'Время создания директории',
		`time_alter` TIMESTAMP COMMENT 'Время последнего изминения',
		`open` set('0', '1') NOT NULL DEFAULT '0' COMMENT 'Возможность создавать фотоальбомы в директории. 1 - можно, 0 - запрещено',
		`size` bigint UNSIGNED NOT NULL DEFAULT '1024' COMMENT 'Максимальный вес выгружаеиого снимка',
		`dir` varchar(5120) NOT NULL DEFAULT '/' COMMENT 'Адрес текущей директории',
		`dire` varchar(5120) NOT NULL DEFAULT '/' COMMENT 'Адрес предведущей директории',
		`name` varchar(128) NOT NULL DEFAULT '' COMMENT 'Название директории',
		`opis` varchar(1024) NOT NULL DEFAULT '' COMMENT 'Описание директории',
		PRIMARY KEY (`id`),
		UNIQUE KEY (`name`),
		KEY (`time`, `time_alter`, `open`, `size`)
	) ENGINE InnoDB CHARACTER SET UTF8 COLLATE utf8_general_ci;
Автор
Пришелец
0
Таблица фотоальбомов
	CREATE TABLE IF NOT EXISTS `ac_foto_album`
	(
		`id` SERIAL,
		`id_user` bigint UNSIGNED NOT NULL DEFAULT '0' COMMENT 'ID автора',
		`id_dir` bigint UNSIGNED NOT NULL DEFAULT '0' COMMENT 'ID директории',
		`time` TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT 'Время создания',
		`time_alter` TIMESTAMP COMMENT 'Время последнего обращения',
		`open` set('0', '1', '2') NOT NULL DEFAULT '2' COMMENT 'Возможность просмотра снимков альбома другими пользователями. 2 - разрешено всем, 1 - только друзьям, 0 - запрещено всем',
		`pass` varchar(24) NOT NULL DEFAULT '' COMMENT 'Пароль на просмотр снимков альбома',
		`name` varchar(128) NOT NULL DEFAULT '' COMMENT 'Название альбома',
		`opis` varchar(520) NOT NULL DEFAULT '' COMMENT 'Описание альбома',
		PRIMARY KEY (`id`),
		KEY (`time`, `time_alter`, `open`),
		FOREIGN KEY (`id_dir`) REFERENCES `ac_foto_dir` (`id`)
		ON DELETE RESTRICT ON UPDATE CASCADE
	) ENGINE InnoDB CHARACTER SET UTF8 COLLATE utf8_general_ci;
Автор
Пришелец
0
Собственно сами файлы (снимки)
	CREATE TABLE IF NOT EXISTS `ac_foto_file`
	(
		`id` SERIAL,
		`id_user` bigint UNSIGNED NOT NULL DEFAULT '0' COMMENT 'ID автора',
		`id_dir` bigint UNSIGNED NOT NULL DEFAULT '0' COMMENT 'ID директории снимка',
		`id_album` bigint UNSIGNED NOT NULL DEFAULT '0' COMMENT 'ID фотоальбома',
		`time` TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT 'Время создания',
		`time_alter` TIMESTAMP COMMENT 'Время последнего обращения',
		`open` set('0', '1', '2') NOT NULL DEFAULT '2' COMMENT 'Возможность комментировать снимок. 2 - разрешено всем, 1 - только друзьям, 0 - запрещено',
		`let` set('0', '1') NOT NULL DEFAULT '0' COMMENT 'Файл +18. 1 - да, 0 - нет',
		`size` bigint UNSIGNED NOT NULL DEFAULT '0' COMMENT 'Вес снимка',
		`type` set('png', 'jpg', 'jpeg', 'gif') NOT NULL COMMENT 'Формат снимка',
		`name` varchar(128) NOT NULL DEFAULT '' COMMENT 'Название снимка',
		`opis` varchar(5120) NOT NULL DEFAULT '' COMMENT 'Описание снимка',
		PRIMARY KEY (`id`),
		KEY (`time`, `time_alter`, `open`, `size`, `type`),
		FOREIGN KEY (`id_dir`) REFERENCES `ac_foto_dir` (`id`)
		ON DELETE RESTRICT ON UPDATE CASCADE,
		FOREIGN KEY (`id_album`) REFERENCES `ac_foto_album` (`id`)
		ON DELETE RESTRICT ON UPDATE CASCADE
	) ENGINE InnoDB CHARACTER SET UTF8 COLLATE utf8_general_ci;
Заранее благодарен Вам. Спасибо дорогие, Друзья)

Добавлено через 06:49 сек.
[URL=http://dfiles.ru/files/sd0parqcn]Скрин ошибки[/URL]

Землянин
0
Загрузи скриншот сюда http://upwap.ru/upload/ а то с депозита мало кто будет его смотреть.
Автор
Пришелец
0
4. 78884115, СКРИН ОШИБКИ

Добавлено через 03:05 сек.
DELIMITER $$
CREATE OR REPLACE TRIGGER `tg_foto_dir`
AFTER DELETE ON `ac_foto_dir`
ALTER EACH ROW
BEGIN
IF(SELECT COUNT(*) FROM `ac_foto_file` WHERE `id_dir` = OLD.id LIMIT 1) = 1
THEN (DELETE FROM `ac_foto_file` WHERE `id_file` = OLD.id) END IF;
END $$
DELIMITER;
Триггер №2 (Они взаимосвязаны, посему - неразлучны ))
DELIMITER $$
CREATE OR REPLACE TRIGGER `tg_foto_alb`
AFTER DELETE ON `ac_foto_album` 
ALTER EACH ROW
BEGIN
IF(SELECT COUNT(*) FROM `ac_foto_album` WHERE `id_album` = OLD.id LIMIT 1) = 1
THEN (DELETE FROM `ac_foto_file` WHERE `id_album` = OLD.id) END IF;
END $$
DELIMITER;
Вот, вставил не достающие строки. Но, суть не изменилась, ошибка та-же.
Автор
Пришелец
0
Вопрос решен. Тему можно крыть.
Просто надо было убрать круглые скобки вокруг конструкции delete
Стикеры / Теги / Правила / Топ тем / Топ постов / Поиск