2013-05-11 4 views
1

나는이 달성하기 위해 노력하고있어이 내가 유일하게 tbl_result 데이터베이스 테이블에 저장할 실시간 계산의 결과이며, 업데이트를 유지한다복합 기본 키 및 자동 증가 컬럼이 아닌 기본 키

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

을 계산 결과가 변경 되더라도. 위의 내용은이 작업을 수행하는 가장 좋은 방법 인 것 같습니다. 나는 또한 여러 사용자와 참조 결과를 십자가에 고유 ID를 저장해야하기 때문에

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`) 
); 

을하지만 :

그러나이 var1, var2, var3, year는 기본 키해야 작동하려면. 다음 오류가 나타납니다.

오류 코드 : 1075. 잘못된 테이블 정의입니다. 하나의 자동 열만있을 수 있으며 키로 정의해야합니다.

MySql 버전은 5.5.31-0ubuntu0.12.04.1입니다. guid 값이있는 열의 기본값을 설정할 수 있습니까?

감사합니다, P.

P.S. 이것은 나에게 그럴듯한 시나리오처럼 들리지만, MySql에 제안을보고 할 수 있습니까? 이것에

+0

현재 'PRIMARY KEY'를 'UNIQUE' 제약 조건으로 변경할 수없는 이유는 무엇입니까? – dan04

+0

MySQL에는 실제 시퀀스가 ​​없습니다. 시퀀스 (PostgreSQL, Oracle) 또는 ID (MSSQL)가있는 다른 데이터베이스로 전환 할 수 있다면 그렇게 할 수 있습니다 – mvp

답변

2

하나 개의 솔루션은 기본 키로 ID을 사용하고,

있도록 UNIQUE KEY 제약 조건을 사용하여 다른 키와 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 (`ID`), 
    UNIQUE KEY (`var1`, `var2`, `var3`, `year`) 
); 

UNIQUE KEY 제약 조건은 입력란이 중복 삽입되는 것을 방지합니다.