MySQL при обновлении дублированного ключа не обновляется - PullRequest
0 голосов
/ 22 марта 2019

Я пытаюсь использовать при обновлении дубликата ключа, но это не влияет на строки.

Моя инструкция создания таблицы, где вы можете видеть, что я создал уникальный ключ для childid и даты.

CREATE TABLE `history_childfees` (
    `childid` int(11) DEFAULT NULL,
    `date` date DEFAULT NULL,
    `amount` decimal(10,2) DEFAULT NULL,
    `feetypecode` varchar(45) DEFAULT NULL,
    UNIQUE KEY `key_childdate` (`childid`,`date`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Это две строки, которые у меня есть в таблице.

enter image description here

Строка, которую я пытаюсь обновить, является первой строкой путем изменения суммы для ребенка 86615 на 2019-03-22.

insert into history_childfees (childid,date,amount,feetypecode)
values(86615,'2019-03-22',50,'DAY')
on duplicate key update childid = 86615, date = '2019-03-22';

Я также пробовал этот синтаксис.

insert into history_childfees (childid,date,amount,feetypecode)
values (86615,'2019-03-22',50,'DAY')
on duplicate key update childid = values(childid), date = values(date);

В любом случае, он не выполняет вставку, и нет ошибки при выполнении, но это влияет на 0 строк. Что мне здесь не хватает?

1 Ответ

1 голос
/ 23 марта 2019

Рассмотрим:

CREATE TABLE `history_childfees` (
    ...  
    UNIQUE KEY `key_childdate` (`childid`,`date`)
);

И

insert into history_childfees
...
on duplicate key update childid = 86615, date = '2019-03-22'

Столбцы, которые вы обновляете для дубликата ключа, в точности совпадают со столбцами UNIQUE KEY, которые вы используете для идентификации дубликатов. По замыслу мы уже знаем, что значения совпадают ... Как следствие, запрос оставляет дублирующиеся записи без изменений.

Если я следил за вами правильно, вы, вероятно, захотите:

insert into history_childfees
...
on duplicate key update amount = 50
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...