TRIGGER (SQL)
1.
Момору (20.04.2013 / 18:39)
Доброго времени суток, уважаемые Форумчане)
Друзья, пытаюсь создать триггер который удалял бы хвосты файлов при удалении директории но, пред моим взором навязчиво возникает мною заскриненая и к посту прикрепленная ошибка. Может это Денвер лагает и лучше его заменить 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 (Они взаимосвязаны, посему - неразлучны
))
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;
2.
Момору (20.04.2013 / 18:41)
Таблица фотоальбомов
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;
3.
Момору (20.04.2013 / 18:42)
Собственно сами файлы (снимки)
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]
4.
Secret (20.04.2013 / 20:00)
Загрузи скриншот сюда
http://upwap.ru/upload/ а то с депозита мало кто будет его смотреть.
5.
Момору (20.04.2013 / 20:10)
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;
Вот, вставил не достающие строки. Но, суть не изменилась, ошибка та-же.
6.
Момору (20.04.2013 / 20:59)
Вопрос решен. Тему можно крыть.
Просто надо было убрать круглые скобки вокруг конструкции delete
URL:
https://visavi.net/topics/37591