我正在努力实现这一目标:
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。表定义不正确; auto列只能有一个,必须定义为key
MySql 版本是5.5.31-0ubuntu0.12.04.1,是否可以用guid值设置列的默认值?
谢谢,
附言这对我来说听起来像是一个合理的场景,是否可以向 MySql 报告建议?
最佳答案
一个解决方案是使用 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
约束将防止重复插入您的字段。
关于mysql - 复合主键和自动增量列但不是主键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16500712/