我正在努力实现这个目标:
INSERT INTO `tbl_result` (`var1`, `var2`, `var3`, `year`, `result`)
VALUES (%f, %f, %d, %d, %f)
ON DUPLICATE KEY UPDATE result=%f;
这些是我想要在tbl_result数据库表中唯一存储的实时计算器的结果,并且即使计算结果发生更改也会保持更新。在我看来,这似乎是最好的方法。
但要使其工作var1
,var2
,var3
,year
必须是主键:
CREATE TABLE `tbl_result` (
`ID` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT ,
`var1` DECIMAL(6,2) UNSIGNED NOT NULL ,
`var2` DECIMAL(3,2) UNSIGNED NOT NULL ,
`var3` INT(11) UNSIGNED NOT NULL ,
`year` INT(4) UNSIGNED NOT NULL ,
`result` DECIMAL(8,4) NOT NULL ,
PRIMARY KEY (`var1`, `var2`, `var3`, `year`)
);
但是因为我还需要存储一个唯一的ID来与多个用户交叉引用结果。我收到以下错误:
错误代码:1075。表定义不正确;只能有一个自动列,必须将其定义为键
MySql版本是5.5.31-0ubuntu0.12.04.1,是否可以设置带有guid值的列的默认值?
谢谢, P上。
P.S。这对我来说听起来似乎是个合理的场景,是否有可能向MySql报告建议?
答案 0 :(得分:2)
对此的一个解决方案是使用ID
作为主键,并使用var1, var2, var3, year
约束将UNIQUE KEY
字段作为备用键
因此,您的表定义应如下所示:
CREATE TABLE `tbl_result` (
`ID` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT ,
`var1` DECIMAL(6,2) UNSIGNED NOT NULL ,
`var2` DECIMAL(3,2) UNSIGNED NOT NULL ,
`var3` INT(11) UNSIGNED NOT NULL ,
`year` INT(4) UNSIGNED NOT NULL ,
`result` DECIMAL(8,4) NOT NULL ,
PRIMARY KEY (`ID`),
UNIQUE KEY (`var1`, `var2`, `var3`, `year`)
);
UNIQUE KEY
约束将阻止您的字段重复插入。