1

我正在努力实现这一目标:

INSERT INTO `tbl_result` (`var1`, `var2`, `var3`, `year`, `result`) 
VALUES (%f, %f, %d, %d, %f)
ON DUPLICATE KEY UPDATE result=%f;

这些是实时计算器的结果,我想唯一地存储在 tbl_result 数据库表中,并且即使计算结果发生变化也保持更新。以上在我看来是最好的方法。

但是,要使其正常工作var1var2, 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。

PS这对我来说听起来像是一个合理的场景,是否可以向MySql报告建议?

4

1 回答 1

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约束将防止重复插入您的字段。

于 2013-05-11T19:21:22.863 回答