MySQL 重复键更新未更新
MySQL on duplicate key update is not updating
我正在尝试使用重复键更新,但它不会影响任何行。
我的 table create 语句,您可以在其中看到我在 childid 和 date 上创建了一个唯一键。
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;
这些是我在 table 中的两行。
我要更新的行是第一行,方法是更改 2019-03-22 子项 86615 的金额。
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 行。我在这里错过了什么?
考虑:
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
我正在尝试使用重复键更新,但它不会影响任何行。
我的 table create 语句,您可以在其中看到我在 childid 和 date 上创建了一个唯一键。
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;
这些是我在 table 中的两行。
我要更新的行是第一行,方法是更改 2019-03-22 子项 86615 的金额。
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 行。我在这里错过了什么?
考虑:
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