сбой триггера для обновления другого столбца таблицы, имеющего внутренний выбор таблицы - PullRequest
0 голосов
/ 09 апреля 2020

При вставке данных в таблицу позиций с триггером после вставки выдается следующая ошибка:

java. sql .SQLException: невозможно обновить таблицу 'devices' в сохраненной функции / триггере, поскольку она уже используется оператором, который вызвал эту сохраненную функцию / триггер.

Запрос - это INSERT INTO позиции (протокол, deviceid, devicetime, fixtime, действительный, широта, долгота, высота, скорость, курс, адрес, атрибуты, Точность, сеть) ЗНАЧЕНИЯ ('osmand', (ВЫБЕРИТЕ идентификатор из устройств ГДЕ uniqueid = 'kl49k8565'), '2020-04-10 00:23:57', '2020-04-10 00: 23: 57', 1 , 10.5641384,76.5989235,0.0,0.0,0.0, '', '', 34.791, '')

таблица позиций CREATE TABLE positions (id INT (11) NOT NULL AUTO_INCREMENT, protocol VARCHAR (128) NULL DEFAULT NULL, deviceid INT (11) NOT NULL, servertime TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP при обновлении CURRENT_TIMESTAMP, devicetime TIMESTAMP НЕ ПУСТОЙ ПО УМОЛЧАНИЮ '0000-00-00 00:00:00', fixtime TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00', valid BIT (1) НЕ NULL, latitude DOUBLE NOT NULL, longitude DOUBLE NOT NULL, altitude FLOAT NOT NULL, speed FLOAT NOT NULL, course FLOAT NOT NULL, address VARCHAR (512) NULL DEFAULT NULL, attributes VARCHAR (4000) NULL ПО УМОЛЧАНИЮ NULL, accuracy DOUBLE NOT NULL ПО УМОЛЧАНИЮ '0', network VARCHAR (4000) NULL ПО УМОЛЧАНИЮ NULL, ПЕРВИЧНЫЙ КЛЮЧ (id), ИНДЕКС position_deviceid_fixtime (deviceid, fixtime), CONSTRAINT fk_position_deviceid ИНОСТРАННЫЙ КЛЮЧ (deviceid) ССЫЛКИ devices (id) НА УДАЛИТЬ КАСКАД)

триггер CREATE TRIGGER positions_after_insert ПОСЛЕ ВСТАВКИ НА positions ДЛЯ КАЖДОГО НАЧАЛА СТРОКИ ОБНОВЛЕНИЕ устройств УСТАНОВИТЬ positionid = NEW.id ГДЕ NEW.deviceid = devices.id; END

таблица устройств CREATE TABLE devices (id INT (11) NOT NULL AUTO_INCREMENT, name VARCHAR (128) NOT NULL, uniqueid VARCHAR (128) NOT NULL, lastupdate TIMESTAMP NULL DEFAULT NULL, positionid INT (11) NULL DEFAULT NULL, groupid INT (11) NULL DEFAULT NULL, attributes VARCHAR (4000) NULL DEFAULT NULL, phone VARCHAR (128) NULL DEFAULT NULL, 1047 * VARCHAR (128) NULL ПО УМОЛЧАНИЮ NULL, contact VARCHAR (512) NULL ПО УМОЛЧАНИЮ NULL, category VARCHAR (128) NULL ПО УМОЛЧАНИЮ NULL, ПЕРВИЧНЫЙ КЛЮЧ (id), УНИКАЛЬНЫЙ ИНДЕКС uk_device_uniqueid (uniqueid) , INDEX fk_devices_groupid (groupid), CONSTRAINT fk_devices_groupid FOREIGN KEY (groupid) Ссылки groups (id) ON DELETE SET NULL);

Я думаю, что внутри "SELECT id Запрос с устройств ... "создает проблемы, но не позволяет получить идентификатор устройства. Может присоединиться решить проблему?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...