-1

를 작동하지 않는있는 테이블을 업데이트 나는 다음과 같은 테이블이 있습니다 당신이 볼 수 있듯이, 날짜와 침대 복합 기본 키를 형성 enter image description here복합 키가 제대로

합니다.

나는이 쿼리를 실행하려고 :

INSERT INTO days (date, operating_time, bed) VALUES ('2016-11-07', 6.55, 1) ON duplicate key update operating_time=VALUES(operating_time); 

문제는 날짜 열에서만을 기반 업데이트 보인다는 것이다. 예를 들어, 다음 1의 침대 값에 대한 위의 쿼리를 실행하고, 그래서 그것을 다시 실행하지만 2의 침대 값이 실제로 원래 기록을 업데이트합니다 (하나의 어디 침대 = 1)

어떻게 ON DUPLICATE KEY 명세서에서 날짜와 침대 열을 모두 확인합니다. 여기에 편집

이 (가) 테이블에 대한 문 만드는 것입니다 : 당신이 동일한 날짜하지만 서로 다른 bed와 함께 INSERT을 그래서 만약

CREATE TABLE `days` (
    `date` date NOT NULL, 
    `operating_time` float DEFAULT '0', 
    `bed` int(11) NOT NULL DEFAULT '0', 
    PRIMARY KEY (`date`,`bed`), 
    UNIQUE KEY `date_UNIQUE` (`date`), 
    KEY `bed_idx` (`bed`), 
    KEY `date` (`date`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 
+0

이것이 작동하지 않았습니까? – barudo

+0

@barudo 난 그냥 위와 같은 정확한 구조로 완전히 빈 테이블에 다시 시도했다. 그것은 작동하지 않았다. –

+0

재생할 수 없습니다. 나를 위해 예상대로 작동합니다. – Plutonix

답변

0

UNIQUE 키가 날짜 열로 만 구성되어 있었기 때문에 테이블에 대한 create 문을 게시 한 후. 침대 열을 추가 한 후 예상대로 작동했습니다. 다른 유형의 키를 읽어야하고 특히 UNIQUE 키에 복합 키에 사용 된 두 열이 모두 포함되어 있어야하는 이유는 무엇입니까?

1

days 날짜에 UNIQUE 인덱스가를, 그것은 원 UNIQUE 때문에 삽입되지 않습니다 (그렇지 않으면 고유 색인에 실패합니다).

동일한 beddate (그러나 다른 문자는 operating_time)을 삽입하려고하면 업데이트됩니다.