2012-05-10 2 views
0

어디서나이 항목을 찾을 수 없습니다 (올바른 질문을하지 않을 수도 있음). 누군가가 올바른 방향으로 나를 가리 키시겠습니까.3 열의 기본값으로 2 열의 MySQL 복합 기본 키 값을 표시하려면 어떻게해야합니까?

MySQL에서 2 열 복합 기본 키를 사용하고 있습니다. 동일한 값을 다른 테이블의 세 번째 열에 기본값으로 표시하고 싶습니다.

Col_1 value = ABC, 
Col_2 value = 123, 
PK   = ABC123, 

Col_3 default value = ABC123 

누구든지이 작업을 수행하는 방법을 설명 할 수 있습니까?

가능한 경우 트리거 또는 삽입 문을 사용하지 않는 것이 좋습니다.

감사합니다,

테드

+0

['CONCAT()'] (http://dev.mysql.com/doc/refman/5.5/en/string-functions.html#function_concat)을 고려 했습니까? – Ami

+0

안녕하세요, Ami 님, 답장을 보내 주셔서 감사합니다. CONCAT을 기본값으로 사용하려면 어떻게해야합니까? – user1224675

+0

케빈의 대답을 참조하십시오. 나는 당신이 코드에서 의미가 있다고 생각했다. – Ami

답변

1

실제로 에는 실제로 열에 값이이 많이 필요하지 않습니다. 데이터를 가져 오는 데 사용하는 select 문에서 값을 만들거나 PHP, 루비 또는 데이터를 표시하는 데 사용하는 코드를 사용하여 여러 번 동일한 효과를 얻을 수 있습니다. 예를 들어

는 : 트리거 및 다른 공상 SQL 트릭을 피하면서

SELECT Col_1, Col_2, CONCAT(NEW.Col_1,NEW.Col_2) as Col_3 
FROM my_table; 

이 당신을 위해 문제를 해결합니다.

누군가가 Col_1 또는 Col_2의 값을 변경하려는 경우에 더 나은 방법이라고 생각합니다.이 값 중 하나가 변경되면 두 값의 조합을 보유한 열도 있어야합니다. 업데이트되었습니다. 그것은 필요한 것들보다 더 복잡한 것들을 만듭니다.

이유가있는 경우 이어야합니다. 알려 주시면 알려드립니다.

+0

안녕하세요, 케빈, 답장을 보내 주셔서 감사합니다. 사람들이 손에 들고 사용할 웹 앱의 고유 한 memberID로이 PK를 사용하고 있습니다. 처음에는 간단한 PHP 양식을 사용하여 온라인에 가입합니다. 그들은 ABC 부분을 제공 할 것이고 MySQL은 auto_increment 부분을 제공하여 고유하게 만듭니다. 전체 PK가 생성되면 핸드 헬드로 전달되어 핸드 헬드의 SQLite DB에 memberID로 저장됩니다. 내가 완전한 PK를 어딘가에 만들지 않으면 어떻게 그것을 핸드 헬드에 전달할 수 있습니까? 2 부분으로? – user1224675

+0

나는 당신이하고있는 것을 지금 보았다. 나는 당신이 여전히 SELECT CONCAT (NEW.Col_1, '-', NEW.Col_2) 같은 것을 사용하여 키를 핸드 헬드로 푸시 할 수 있다고 믿는다. my_key FROM my_table; 그리고 그것들을 다시 보낸다. (키를 쉽게 조각으로 나누기 위해 하이픈 '-'을 추가했습니다.) 기본 키를 정수 부분으로 유지할 수 있다는 이점이 추가되어 데이터에 훨씬 빠르게 액세스 할 수 있습니다. 그런 다음 핸드 헬드가 나중에 키를 보냈을 때 코드에서 '-'를 분리하고 두 부분을 찾으면됩니다. –

+0

케빈, 나는 너의 생각을 머리 속에 쓰는 데 어려움을 겪고있다. 관심이 있으시면이 게시물 (회원 ID를 만드는 방법에 대한 대답)을 살펴보십시오. [link] (http://stackoverflow.com/questions/8021084/how-to-get-next-alpha-numeric-id-based-on-existing-value-from-mysql.) 도움을 주셔서 감사합니다. 따라 잡으려고 계속 노력할 것입니다. DB는 결코 20K 이상으로 성장하지 않으므로 속도는 주요 관심사는 아닙니다. 자동 증가 값을 이해하는 방식은 고유하지 않습니다. 예 : 'abc001, abc002, def001, def002 등' – user1224675

0

를 사용하여 트리거. 아직 테스트하지는 않았지만 시도해 볼 가치가 있습니다.

CREATE TRIGGER `auto_default` 
BEFORE INSERT ON `table` FOR EACH ROW 
SET NEW.Col_3=CONCAT(NEW.Col_1,NEW.Col_2); 
+0

안녕하세요 조나스, 시간을내어 회신 해 주셔서 감사합니다. 트리거를 사용하는 것보다 간단한 방법이있을 거라고 생각했습니다. 다른 아이디어? – user1224675

0

나는 이것을 보지 못했습니다. 아마도 트리거를 사용해야 할 것입니다 (이것은 사용자가 선택하지 않았 음을 나타냄) 또는 테이블에 삽입하는 응용 프로그램에 빌드해야합니다.

MYSQL의 자료를 스캔 할 때 "기본 값은 상수 여야하며 함수 또는 표현식이 될 수 없습니다"라는 메시지가 표시됩니다. 조나 sugested 의해 트리거가 작동해야하는 트리거를 사용하기 위해 참고로

"http://dev.mysql.com/doc/refman/5.6/en/data-type-defaults.html"

..

+0

안녕하세요. payyans, 당신이 추천 한 페이지를 읽었습니다. PK는 상수입니다. 이 요청을 다른 것으로 만드는 유일한 방법은 상수 값이 2 열에서 오는 것입니다. 따라서이 작업을 쉽게 수행 할 수있는 방법이 있어야한다고 생각했습니다. 너는 제안한다."테이블에 삽입 할 응용 프로그램에 빌드하십시오."... JS를 사용하여 위대한 작품을 만드는 JSite를 사용하여 SQLite에서 javascript 변수를 참조하는 것과 비슷한 작업을 수행했습니다. 이것은 PHP와 함께 염두에두고있는 유형입니까? – user1224675

관련 문제