При вставке данных в таблицу позиций с триггером после вставки выдается следующая ошибка:
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 Запрос с устройств ... "создает проблемы, но не позволяет получить идентификатор устройства. Может присоединиться решить проблему?