Q : 외래 키가 null 인 이유는 무엇입니까?
A : 열에 NULL 값이 포함될 수 있는지 여부는 NOT NULL 제약 조건의 유무에 의해 결정됩니다. 이는 열이 외래 키 제약 조건에서 참조되는지 여부와는 완전히 별개입니다.
행이 삽입 될 때 할당 된 값이기 때문에 열의 값이 NULL입니다. 값이 명시 적으로 설정되었는지 또는 열의 기본값에서 파생되었는지 여부에 관계없이 값이 지정되었습니다. (열이 기존 테이블에 추가 된 경우, 새로운 열의 값은 열의 기본값이었다.)
-
Q : 내가 뭔가 또는 무엇을 그리워 하는가?
대답 : 관찰 한 행동과 결과는 예상대로입니다.
Q : 사용자 테이블에서 id 값을 복사하면 안됩니까?
A : MySQL은 자동으로 post
테이블의 user_id
열을 채우는해야하는지 여부를 묻는 경우는, 그 질문에 대한 대답은해야하지, 아니입니다.
난 당신이 핵심 아이디어에 흘려 주기도했습니다 어쩌면 생각 :
다른 테이블의 행을 하나 개의 테이블에있는 행 사이의 "관계"
공통 값을 저장하여 관계형 데이터베이스에 표시됩니다.
그러나 데이터베이스는 어떤 행이 어떤 행과 관련이 있는지 알지 못합니다. 당신은 그것을 말해야합니다. 그 정보를 제공해야합니다.
post
테이블에 행을 삽입 할 때 user_id
열의 값을 제공 할 수 있습니다. 일부 행의 id
값과 동일한 값을 user
에 입력하십시오.
FOREIGN KEY 제약 조건은 제한 사항입니다. 유효한 값만 허용합니다. 유효하지 않은 값이 저장되는 것을 방지합니다. (MyISAM이 외래 키 제약을 시행하지 않기 때문에 FOREIGN_KEY_CHECKS = 1 인 경우 InnoDB에 해당합니다. MyISAM은 외래 키 제약 조건을 적용하지 않기 때문에 MyISAM에는 해당되지 않습니다.)
외래 키는 저장할 수있는 값을 "제한"하려고한다는 것입니다.post
의 행에 값이 있고 users
테이블의 "누락 된"행을 가리키는 값을 허용하지 않는다고 말합니다.
NULL
을 외래 키 열에 저장할 수 있습니다. NULL
값이 저장되면 행이 이 아니며 users
테이블의 행과 관련된이 아님을 나타냅니다.
열에 NULL 값을 허용하지 않는 것은 다른 종류의 제약 조건 인 NOT NULL 제약 조건으로 수행됩니다.
외래 키 제약 및을 같은 열에 NOT NULL 제약 조건으로 정의 할 수 있습니다. 그것은 NULL 값을 허용할지 여부와 상관없이 디자인 결정입니다. 경우에 따라 외래 키에서 NULL 값을 허용하지 않을 수 있습니다. 예를 들어, post
의 user_id
열에 NOT NULL 제약 조건을 추가하면 행과 관련이없는 행이 post
에 존재할 수 없다는 것이 효과적입니다. 그리고 그것은 매우 일반적인 패턴입니다.
복사 방법? DB는 어떤 사용자가 어떤 게시물을 게시했는지 어떻게 알 수 있습니까? 이전에 열에 'null'이 포함되어 있으면 DB에서 채울 수 없습니다. –
새 사용자를 등록하고 새 게시물을 만들 때 여전히 'null'을 표시합니다. 어떤 사용자가 해당 게시물을 작성했는지 알아 보려면 어떻게해야합니까? – oxyt
외래 키는 'NULL'일 수 있습니다. 기본 키는 사용할 수 없습니다. –