Ошибка "The target table *** of the INSERT is not insertable-into" при добавлении данных через VIEW

Использую MySQL. Данные хранятся в двух связанных таблицах и через представление Бронирования2 объединяются через JOIN и становятся доступны программе.

/* Первая таблица */
CREATE TABLE IF NOT EXISTS `Бронирования` (
  `ID` int(11) NOT NULL AUTO_INCREMENT,
  `Дата заезда` date NOT NULL,
  `Дата выезда` date NOT NULL,
  `Источник` int(11) NOT NULL DEFAULT '0',
  `Стоимость за сутки` int(11) NOT NULL DEFAULT '0',
  `Примечания` varchar(2048) NOT NULL DEFAULT '0',
  `Возврат` int(11) NOT NULL DEFAULT '0',
  `Процент комиссии сайта` int(11) NOT NULL DEFAULT '0',
  PRIMARY KEY (`ID`),
  KEY `Источник` (`Источник`),
  CONSTRAINT `FK_Бронирования_Источники` FOREIGN KEY (`Источник`) REFERENCES `Источники` (`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=31 DEFAULT CHARSET=utf8;

INSERT INTO `Бронирования` (`ID`, `Дата заезда`, `Дата выезда`, `Источник`, `Стоимость за сутки`, `Примечания`, `Возврат`, `Процент комиссии сайта`) VALUES
    (24, '2023-04-26', '2023-04-29', 3, 3500, '', 0, 20),
    (25, '2023-04-29', '2023-04-30', 6, 3500, 'Это комментарий...', -100, 0),
    (26, '2023-05-06', '2023-05-07', 1, 3500, '', 0, 0),
    (27, '2023-05-30', '2023-09-09', 1, 2800, '', 0, 0),
    (28, '2023-09-18', '2023-09-21', 5, 3000, 'Это тоже комментарий', 2550, 15),
    (29, '2023-09-21', '2023-09-29', 1, 3000, '', 0, 15),
    (30, '2023-10-13', '2023-10-17', 4, 3000, '', 0, 25);

/* Вторая таблица (связаная) */
CREATE TABLE IF NOT EXISTS `Источники` (
  `ID` int(11) NOT NULL AUTO_INCREMENT,
  `Название` varchar(50) DEFAULT NULL,
  `Процент комиссии` int(11) NOT NULL DEFAULT '0',
  `URL Синхронизации календаря` varchar(1024) DEFAULT NULL,
  `Цена за сутки` int(11) NOT NULL,
  PRIMARY KEY (`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8;

INSERT INTO `Источники` (`ID`, `Название`, `Процент комиссии`, `URL Синхронизации календаря`, `Цена за сутки`) VALUES
    (0, 'Другое', 0, '', 3000),
    (1, 'Авито', 15, 'https://www.avito.ru/calendars-export/******', 3200),
    (2, 'Твил', 30, 'https://tvil.ru/entity/ical/ics/******', 3700),
    (3, 'Суточно', 20, 'https://sutochno.ru/calendar/ical/*******', 3200),
    (4, 'квартиры-посуточно', 0, '', 2800),
    (5, 'Мир Квартир', 0, '', 2800),
    (6, 'Продление', 0, '', 3000),
    (7, 'Яндекс Недвижимость', 0, '', 2900);

/* Представление */
CREATE ALGORITHM=UNDEFINED SQL SECURITY DEFINER VIEW `Бронирования2` AS
SELECT `Бронирования`.`ID` AS `ID`,
       `Бронирования`.`Дата заезда` AS `Дата заезда`,
       `Бронирования`.`Дата выезда` AS `Дата выезда`,
       (to_days(`Бронирования`.`Дата выезда`) - to_days(`Бронирования`.`Дата заезда`)) AS `Дней`,
       `Источники`.`Название` AS `Источник`,
       `Бронирования`.`Источник` AS `ID источника`,
       `Бронирования`.`Стоимость за сутки` AS `Стоимость за сутки`,
       ((to_days(`Бронирования`.`Дата выезда`) - to_days(`Бронирования`.`Дата заезда`)) * `Бронирования`.`Стоимость за сутки`) AS `Полная стоимость`,
       `Бронирования`.`Процент комиссии сайта` AS `Процент комиссии сайта`,
       ((((to_days(`Бронирования`.`Дата выезда`) - to_days(`Бронирования`.`Дата заезда`)) * `Бронирования`.`Стоимость за сутки`) * ifnull(`Бронирования`.`Процент комиссии сайта`, 0)) / 100) AS `Комиссия сайта`,
       `Бронирования`.`Возврат` AS `Возврат`,
       (((((to_days(`Бронирования`.`Дата выезда`) - to_days(`Бронирования`.`Дата заезда`)) * `Бронирования`.`Стоимость за сутки`) * (100 - ifnull(`Бронирования`.`Процент комиссии сайта`, 0))) / 100) - ifnull(`Бронирования`.`Возврат`, 0)) AS `Доход`,
       `Бронирования`.`Примечания` AS `Примечания`
FROM `Бронирования`
JOIN `Источники`
ON `Бронирования`.`Источник` = `Источники`.`ID`
/*order by `Бронирования`.`Дата заезда`*/;

Проблема в том, что не могу добавлять данные через представление.

insert into `Бронирования2` (`ID`, `Дата заезда`,`Дата выезда`,`ID источника`,
    `Стоимость за сутки`,`Процент комиссии сайта`,`Возврат`,`Примечания`)
values (999, '2024-08-01','2024-08-15',6,3000,0,0,'Это новая запись');

Ошибка:

The target table Бронирования2 of the INSERT is not insertable-into

Странно, учитывая что UPDATE-запрос работает. Например:

update `Бронирования2` set `Стоимость за сутки`=999, `Примечания`='Эта запись изменена'
where (`ID`= 30);

Демо: https://onecompiler.com/mysql/42nu9kmsx


Ответы (0 шт):