2016-12-04 2 views
0

LOAD DATA INFILE REPLACE INTO 명령으로 테이블에 CSV 파일을로드하는 스크립트가 있습니다.다른 열을 기반으로하는 MYSQL 고유 열

파일은 다른 "상점"에서 가져오고 다른 모든 상점은 모두이 테이블에 저장됩니다.

내 질문은 내가 고유하게 된 두 개의 열을 어떻게 결합 할 수 있는지, 아니면 다른 생각을 가지고 있는지 궁금합니다.

storeid은 = 각 상점 ID 목표는 테이블에 CSV 파일을로드하고 뭔가가 변경된 경우 행을 업데이트하는 것입니다

에 대해 고유합니다 = 각 행

code 고유되지 않습니다, storeid 및 코드를 기반으로합니다. 이 점은 각 상점마다 다른 데이터베이스를 사용하고 code을 고유하게 사용했을 때 모두 작동했지만 지금은 모든 상점을 동일한 데이터베이스에두고 싶습니다.

예 : 1 + 123 = 1123 = 새로운 유일한 접근법? http://dev.mysql.com/doc/refman/5.7/en/load-data.html에 따르면 사전

+0

''코드 '를 생성 하시겠습니까? 이게 니가 찾고있는거야? –

+0

'code'는 csv 파일에있는 각 저장소의 고유 한 열입니다. – Tronik

+0

아무 것도 결합 할 필요가 없다고 생각합니다. 대신 복합 기본 키를 사용할 수 있습니다. 그것은 당신이 원하는 것을 해줍니다! –

답변

1

나는 그들 고유 한 내 테스트에서 작동하는 것 같다 만드는 두 개의 필드를 결합

CREATE TABLE stock(
    storeid int, 
    code int, 
    PRIMARY KEY (storeid , code) 
); 

로 두 개의 기본 키를 사용하여 끝났다.

1

에서

감사 :

If you specify REPLACE, input rows replace existing rows. 
In other words, rows that have the same value for a primary key or unique index as an existing row. 

당신은 고유 인덱스를 당신의 열을 만들어야합니다도 할 수있는이 두 컬럼에

CREATE UNIQUE INDEX name_of_the_index ON table_name (storeid, code); 

결합 된 기본 키를 일.

+0

예,하지만 storeid '와'code'는 같은 테이블에로드 할 때 절대 고유하지 않습니다.'code'는 storeid에서만 유일합니다. – Tronik

+0

infile = unique에 concatening store + code가 유일한 방법이라고 가정합니다. – Tronik

+0

코드가 storeid마다 고유 한 경우 고유 한 쌍 (storeid, code)이 있으며 이는 열 쌍의 고유 색인을위한 것입니다. 또는 나는 무엇인가 놓치고 있냐? –

관련 문제