2012-03-16 2 views
4

CustID (고유하지 않음), ProdID (고유하지 않음) 및 Price 필드가있는 3 열 (모든 숫자) 테이블이 있습니다. 유일한 '고유성'은 CustID/ProdID 쌍이 복제되지 않는다는 것입니다. 따라서 모든 고객은 모든 제품에 대해 '가격'이 다릅니다. 나는 3 라인 방법을 사용하고있다. (a) 쌍이 있는지 검색하고, (b) 가격이 맞다면 (c) 가격이없는 새 쌍을 삽입하지 않으면. 이드에 대한 인덱스를 아직 만들지 않았습니다. (개발자 용으로 정상적으로 실행됩니다.)MySql 업데이트 필드 또는 기본 키가없는 경우 삽입

누구나 REPLACE 명령어를 사용하는 방법을 제안 할 수 있습니까? 대부분의 INSERT/ON DUPE 예제는 기본 키가 필요함을 암시하는 것처럼 보입니다. 나는 보통 항상 pk를 가지고 있는데,이 요구 사항에 낭비되는 것처럼 보였다. 나를 도와 줄 수있는 시간을 가진 누군가에게 많은 감사를드립니다. Ken Ashton

죄송합니다. Michael, 당신은 이미 저에게 예제를 주셨습니다. 지금 표를 고를 것입니다. 많은 감사합니다.

+1

실제로 무결성을 유지하기 위해 성능 목적이 아닌'CustID/ProdID'에서 고유 색인을 생성해야합니다. –

+1

'CREATE INDEX idx_unique_custprod on tblname (CustID, ProdID) ' –

+3

아니면 더 나은 방법으로 PK로 생성하십시오 :'ALTER TABLE tblname ADM PRIMARY KEY (CustID, ProdID) ' –

답변

3

Michael과 Tony가 제안한 것처럼 PK는 절대로 낭비되지 않습니다. 따라서 항상 모든 테이블에 PK가있는 것이 좋습니다. 그래서 나는 먼저 당신이 PK를 만들고 INSERT ON DUPLICATE KEY를 사용할 것을 제안 할 것입니다.

PK없이 원하는 것을 얻으려면 먼저 DELETE를 누른 다음 INSERT를 수행 할 수 있습니다. 사실 그것은 REPLACE가 내부적으로하는 일입니다.

+0

여러분 감사합니다. 저는 초보자입니다. 참조 무결성에 대한 필요성에 감사 드렸습니다. 단지 이것이 너무 복잡하여 간단하다고 생각하지 않았지만, 당신은 나를 위해 중요성을 강화 시켰습니다. 두 개의 non.unique id 필드를 하나의 고유 한 필드에 결합하는 예제를 제공 할 수 있습니까? 전에는 사용하지 않았으며, INSERT ON DUPLICATE 명령에서이 필드를 사용하는 방법을 보여줄 수 있습니다. 공통된 고유 한 필드를 생성하기 위해 많은 – KenAshton

+1

을 보내 주셔서 감사합니다. ALTER TABLE tableName ADD UNIQUE INDEX idxName (CustID, ProdID); – Abhay