#mysql #sql
#mysql #sql
Вопрос:
у меня проблема с триггером, который мне нужно создать, я показываю вам, что у меня есть, а затем в чем заключается вопрос.
CREATE TABLE IF NOT EXISTS `book` (
`ISBN` bigint(13) NOT NULL,
`Title` varchar(128) NOT NULL,
`Version` smallint(6) DEFAULT NULL,
`Year` year(4) DEFAULT NULL,
`Price` decimal(10,2) DEFAULT NULL,
PRIMARY KEY (`ISBN`)
)
CREATE TABLE IF NOT EXISTS `bookauthor` (
`ISBN` bigint(13) NOT NULL,
`BSN` int(9) NOT NULL,
PRIMARY KEY (`ISBN`,`BSN`),
KEY `bookauthor_ibfk_2` (`BSN`)
)
CREATE TABLE IF NOT EXISTS `publisher` (
`name` varchar(48) NOT NULL,
`location` varchar(48) NOT NULL,
`sales volume` double NOT NULL,
`logo` longblob NOT NULL
)
CREATE TABLE IF NOT EXISTS `sales` (
`date` date NOT NULL,
`publisher` varchar(48) NOT NULL,
`isbn` int(48) NOT NULL,
`amount_sold` int(48) NOT NULL
);
мой вопрос в том,
что я хочу иметь триггер, который обновляет объем продаж в таблице publisher с объемом продаж, полученным при обновлении таблицы продаж. это должно произойти у определенного издателя, и триггеру нужно что-то вроде (amount_sold * price), но я понятия не имею, как это сделать: (
Комментарии:
1. Что произойдет, если
book
будет обновлено?2. пока ничего не происходит, когда книга обновляется.
Ответ №1:
CREATE TRIGGER
trg_sales_ai
AFTER INSERT
ON sales
FOR EACH ROW
BEGIN
UPDATE publisher p
CROSS JOIN
book b
SET p.`sales volume` = p.`sales volume` NEW.amount_sold * b.price
WHERE p.name = NEW.publisher
AND b.ISBN = NEW.isbn
END;
Комментарии:
1. спасибо за помощь: D
2. @user3541687: если ответ вам помог, пожалуйста, отметьте его выбранным (установите зеленый флажок под подсчетом голосов)
3. @user3541687: проверьте разделитель. Однако я не проверял синтаксис, поэтому может потребоваться некоторая доработка.
4. что нужно разделить с помощью разделителя, чем?? потому что нет ничего с двойным результатом. или я не получаю функцию разделителя сейчас?
5. @user3541687: используйте что-то другое, кроме точки с запятой, для разделителя запросов на вашем
MySQL
клиенте.