2014-04-16 2 views
0

기존 행이로드 된 'posts'테이블이 있습니다. 이러한 행의 하위 집합에 대해 원래 'posts'테이블의 기존 행에 대한 참조와 함께 'specialposts'라는 새 테이블을 만듭니다. 레거시 이유로 모든 'specialposts'행의 기본 키가 'posts'테이블의 기본 키와 동일하면 내 & 내 고객의 삶을 훨씬 쉽게 만들어줍니다.수동으로 기본 키 값 지정

먼저 해당 게시물 행을 작성하지 않고 SpecialPost를 작성하지 마십시오. autoincrement를 사용하는 대신 수동으로 각 특수 포스트 INSERT에서 기본 키를 지정하면 어떤 문제가 발생할 수 있습니까?

+0

는 다시 외래 키는 무엇을해야합니까? – Mihai

+1

그건 외래 키이고, 특별한 일을하지 않아도됩니다. select last_insert_id(); special_posts ($ last_id)에 삽입하십시오. –

+0

관계가 변경되지 않는 한 아무런 문제가 없습니다. PK/FK (외래 키인 기본 키)는 완벽하게 받아 들일 수 있습니다. 예를 들어, EF 코드는 먼저 1 => 1 또는> => 0-1 관계를 관리합니다. –

답변

1

아무런 값이 제공되지 않으면 AUTO_INCREMENT 열이 자동으로 값으로 채워지지만, 값을 제공하려면 자유롭게 값을 입력하십시오. PRIMARY KEY 열이면 고유 ID를 제공해야하며 충돌로 인해 오류가 발생합니다.

충돌 위험이없는 한 테이블간에 식별자를 동기화하는 것이 좋습니다.

때때로 고정 ID를 지정하는 코드가 있고 다른 시간에 자동으로 문제가 발생하면 문제가 발생할 수 있습니다. 경쟁 조건이있을 수 있습니다. 작업을 단순화하기 위해 기본 테이블에서 보조 테이블의 AUTO_INCREMENT을 해제해야합니다.

1

Q : 자동 증가에 의존하지 않고 각 specialpost INSERT에서 수동으로 기본 키를 지정하면 어떤 문제가 발생할 수 있습니까?

A : PRIMARY KEY 제약 조건 (또는 PRIMARY KEY 제약 조건)으로 정의 된 열에 값을 제공하는 데 문제가 없습니다 (데이터베이스 측면에서).

post 테이블에 삽입 된 행의 auto_increment 값 id 값을 결정/검색하는 것이 문제입니다.

SELECT LAST_INSERT_ID(); 

그리고 당신이 반환 값을 제공 할 수 있습니다 :합니다 (post 테이블에 단일 행을 삽입) 싱글 삽입, 그것이 INSERT 다음의 AUTO_INCREMENT 컬럼에 할당 된 값을 검색 할 수있을만큼 쉽게 들어

specialpost에 대한 INSERT 테이블에 있습니다. 당신은 또한 또한 원하는 것처럼

(다중 행 삽입에 대한 것을 참고, LAST_INSERT_ID (에 의해 반환 된 값)가 행에 할당 값이됩니다.) 당신이 무엇을 설명에서

, 그것은 소리 두 테이블 사이에 FOREIGN KEY 제약 조건을 정의하고 specialpost은 행을 참조하는 post입니다. 예를 들어

:

post 
(id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY 

specialpost 
(post_id INT UNSIGNED PRIMARY KEY 
, CONSTRAINT FK_specialpost_post FOREIGN KEY (post_id) REFERENCES post (id)