Ошибка записи Дубликата Mysql на НА ДУБЛИРУЮЩЕМСЯ КЛЮЧЕВОМ ОБНОВЛЕНИИ

char[] characters;
...
string s = new string(characters);
5
задан Nir 25 June 2009 в 10:05
поделиться

4 ответа

Это может произойти, если вы обновите поле, помеченное UNIQUE , и второе нарушение ключа произойдет при UPDATE .

Обновление :

Судя по структуре вашей таблицы, это именно ваш случай.

Вот что происходит:

INSERT INTO linked_mem
        ( id1, id2, id31, id4 cnt)
        VALUES (31316, 0, 557158967, 261470594, 1)

-- inserts

INSERT INTO linked_mem
        ( id1, id2, id31, id4 cnt)
        VALUES (31316, 0, 557158967, 261470594, 1)

-- updates `cnt` to 2

INSERT INTO linked_mem
        ( id1, id2, id31, id4 cnt)
        VALUES (31316, 0, 557158967, 261470594, 1)

-- tries again to update `cnt` to 2 and fails

Удалите cnt из определения PRIMARY KEY .

10
ответ дан 13 December 2019 в 05:41
поделиться

cnt находится в первичном ключе, возможно, именно поэтому возникла ошибка / невозможность ОБНОВИТЬ его.

1
ответ дан 13 December 2019 в 05:41
поделиться

Are you sure that the primary key is correct? Using this primary key identifies a line also by the value of cnt, which is supposed to be a counter.

I've not tested this, but I think the following query will give the error if you start with an empty table.

INSERT INTO linked_mem
    ( id1, id2, id31, id4, cnt)
VALUES 
    (1, 1, 1, 1, 1),                  // (1, 1, 1, 1, 1) added
    (1, 1, 1, 1, 1),                  // (1, 1, 1, 1, 1) -> (1, 1, 1, 1, 2)
    (1, 1, 1, 1, 1),                  // (1, 1, 1, 1, 1) added (now two rows)
    (1, 1, 1, 1, 1)                   // error
ON DUPLICATE KEY UPDATE cnt = cnt+1

at the fourth row, the (1, 1, 1, 1, 1) would be updated to (1, 1, 1, 1, 2), but this already exists.

1
ответ дан 13 December 2019 в 05:41
поделиться

Трудно сказать по вашим неинформативным именам столбцов, но этот первичный ключ настолько широк, что выглядит чертовски бесполезным. Что он на самом деле делает и почему был выбран этот набор столбцов? Есть ли лучший выбор? Я предполагаю, что другие плакаты правы, и ваше обновление нарушает неявную константу уникальности PK; поскольку count является одним из столбцов PK, этого вполне ожидаемо.

0
ответ дан 13 December 2019 в 05:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: