我知道我可以取消选中“安全更新”模式,但我想了解为什么MySQL服务器即使在所有内容看起来都正确的情况下也会返回此错误?
我正在尝试调用更新过程以使用语句
更新表country
中的行
call sellcontroller.country_update(1, 'United Kingdom', 'GB', 'GBR', 'GBR');
但它抛出异常“错误代码:1175。您正在使用安全更新模式,并且您尝试更新没有使用KEY列的WHERE的表。” 我肯定肯定我正在使用带表主键和正确数据类型的WHERE子句。而在程序之外使用的更多相同的更新语句也能正常工作。
程序代码是
CREATE PROCEDURE `country_update` (
in idCountry int(6),
in nameCountry varchar(255),
in codeISO2 varchar(2),
in codeISO3 varchar(3),
in codeCitizen varchar(5))
BEGIN
UPDATE `sellcontroller`.`country`
SET
`nameCountry` = nameCountry,
`codeISO2` = codeISO2,
`codeISO3` = codeISO3,
`codeCitizen` = codeCitizen
WHERE `idCountry` = idCountry;
END
现在的表创建语句是
CREATE TABLE `country` (
`idCountry` int(6) NOT NULL AUTO_INCREMENT,
`nameCountry` varchar(255) DEFAULT NULL,
`codeISO2` varchar(2) DEFAULT NULL,
`codeISO3` varchar(3) DEFAULT NULL',
`codeCitizen` varchar(5) DEFAULT NULL,
PRIMARY KEY (`idCountry`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;