23.05.2019 08:41
Более 80 магазинов работает нормально.
А запустили на 81 - бяда!
Проблема в следующем:запрос из 1С-а вида
SQL код:
REPLACE INTO trm_in_external_orders (store_id,order_id,order_date,ext_order_type,ext_order_id,status,sale_type,client_name,check_structure,changeable,version,amount,deleted) 
values('3001','61220','2019-05-22 15:55:00','3','01903924-2','1','0','Василий','0','0','380','100','0') 
дает ошибку
SQL код:
1 Duplicate entry '3001-61220' for key 'PRIMARY' SQL12.sql 1 1 
, хотя по логике - должен был УДАЛИТЬ существующую запись и вставить новую.
Вероятно - отличается MySQL конкретно этого магазина от остальных. Что смотреть?
23.05.2019 11:33
так он же пишет, что в результате замены образуется дубликат первичного ключа с этим вот значением .. может, такая уже есть...
23.05.2019 11:39
Запись ТОЧНО есть до запуска запроса.
Даже если вручную удаляю эту запись - выдает такую ошибку.
На этой таблице еще триггер висит - может в нем дело (тогда непонятно, почему в остальных восьмидесяти магазинах все работает):
SQL код:
CREATE 
    DEFINER = 'ukm_server'@'localhost'
TRIGGER ukmserver.trm_in_external_orders_upd_tr
    BEFORE INSERT
    ON ukmserver.trm_in_external_orders
    FOR EACH ROW
BEGIN
    DECLARE oldStatus INT;
    DECLARE oldDate DATETIME;
        
    IF (NEW.status = 2 OR NEW.status = 5 OR NEW.status = 6) THEN
        SELECT `status`, `status_change_date` INTO oldStatus, oldDate 
            FROM trm_in_external_orders WHERE store_id = new.store_id 
                AND order_id = new.order_id AND deleted = 0;
        IF (oldStatus IS NULL OR oldStatus != new.status) THEN
            SET new.status_change_date = NOW();
        ELSE
            IF (oldDate IS NOT NULL) THEN
                SET new.status_change_date = oldDate;
            END IF;
        END IF;
    END IF;
END 
23.05.2019 13:44
Ну так вот и получается, что ты вставляешь запись и replace бы поменял на новую, но этот странный триггер подтягивает уже существующую запись... Мозговынос, конечно, я бы на время замены бы убрал триггер, на мой взгляд попахивает каким-то багом на имеющихся данных, но и архитектура действия немного странная.
27.05.2019 10:41
Нашел "бяду" - подвесил на нее еще триггер. Вот он и давал нарушение ключа...
Часовой пояс GMT +3, время: 16:43.

Форум на базе vBulletin®
Copyright © Jelsoft Enterprises Ltd.
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.