2013-08-22 2 views
26

외래 키 참조로 테이블을 생성합니다. 필요한 구문에 대해 궁금합니다. 대부분 내가 (http://www.sqlite.org/foreignkeys.html#fk_basics에서) 다음을 본 적이 :외래 키로 테이블을 생성하기위한 SQLite 구문

CREATE TABLE artist( 
    artistid INTEGER PRIMARY KEY, 
    artistname TEXT 
); 
CREATE TABLE track( 
    trackid  INTEGER, 
    trackname TEXT, 
    trackartist INTEGER, 
    FOREIGN KEY(trackartist) REFERENCES artist(artistid) 
); 

그러나, 같은 사이트 (http://www.sqlite.org/foreignkeys.html#fk_actions) 나는이 볼에서 :

CREATE TABLE artist( 
    artistid INTEGER PRIMARY KEY, 
    artistname TEXT 
); 
CREATE TABLE track( 
    trackid  INTEGER, 
    trackname TEXT, 
    trackartist INTEGER REFERENCES artist(artistid) ON UPDATE CASCADE 
); 

후자의 구문은 좀 더 간결하지만 그 결과가 어떻게 든 달라지는 지 알고 싶다면 (물론 ON UPDATE CASCADE과 같은 효과가 있습니다; 참조 된 사이트에서 코드를 정확히 복사했기 때문에 포함 시켰습니다. 위의 구문이 ' 그러한 지정을 할 때에 만 적용). 나는 안드로이드에서 일하고있다.

답변

18

syntax diagrams을 참조하십시오. 두 번째는 구 열 제약 동안

제 구문은 테이블 제약이다. 이 예제에서는 동일하게 동작합니다.

여러 열 (하나의 열을 연결할 수있는 위치)이 아닌 키에 대해서는 테이블 제약 조건이 필요합니다.

18

이 답변은 본인의 것과 관련이 없지만 안드로이드 데이터베이스를 사용하는 다른 사람들에게 도움이 될 것이라고 생각했습니다.
IN SQLite 외래 키 제약 조건은 기본적으로 비활성화되어 있습니다 (하위 호환성을 위해). 데이터베이스와의 연결을 설정 한 후에

PRAGMA foreign_keys = 1 

을 명시 적으로 사용하도록 설정해야합니다. 다음은 공식 문서에 대한 링크로 더 자세히 설명합니다. http://sqlite.org/foreignkeys.html 위의 링크에서 외래 키 지원을 사용하도록 이동하십시오.

+0

안녕하세요 War_Hero 님, 외래 키를 null로 가져 왔습니다. 제발 봐 주실 수 있습니까? 이것들은 제 2 테이블입니다. 표 1 - 최종 문자열 DATABASE_CREATE_TABLE = "존재하지 않는 경우 테이블 만들기 scannerValuess (id 정수, partName 텍스트 null, 비용 텍스트 null, 외래 키 (id) 참조 : scannerUserValuess (userid)); "; 표 2 - 최종 문자열 DATABASE_CREATE_TABLE_USER = "scannerUserValuess (사용자 ID 정수 기본 키 자동 증가, 이름 텍스트 널 (null), 모바일 텍스트가 널 (null)이 아닌 주소 텍스트, 널이 아니거나 날짜 텍스트가 아님) 테이블이 존재하지 않으면 create table"; 최대한 빨리 도와주세요. 사전에 감사합니다. – Naveen

관련 문제