문제

SQLITE의 2 개 이상의 열에서 기본 키를 지정하기위한 구문은 무엇입니까?

도움이 되었습니까?

해결책

에 따르면 선적 서류 비치, 그것의

CREATE TABLE something (
  column1, 
  column2, 
  column3, 
  PRIMARY KEY (column1, column2)
);

다른 팁

CREATE TABLE something (
  column1 INTEGER NOT NULL,
  column2 INTEGER NOT NULL,
  value,
  PRIMARY KEY ( column1, column2)
);

예. 그러나 그러한 기본 키는 허용한다는 것을 기억하십시오 NULL 두 열의 값은 여러 번 값입니다.

이와 같이 테이블을 만듭니다.

    sqlite> CREATE TABLE something (
column1, column2, value, PRIMARY KEY (column1, column2));

이제 이것은 경고없이 작동합니다.

sqlite> insert into something (value) VALUES ('bla-bla');
sqlite> insert into something (value) VALUES ('bla-bla');
sqlite> select * from something;
NULL|NULL|bla-bla
NULL|NULL|bla-bla

기초적인 :

CREATE TABLE table1 (
    columnA INTEGER NOT NULL,
    columnB INTEGER NOT NULL,
    PRIMARY KEY (columnA, columnB)
);

열이 다른 테이블의 외국 키 인 경우 (공동 케이스) :

CREATE TABLE table1 (
    table2_id INTEGER NOT NULL,
    table3_id INTEGER NOT NULL,
    FOREIGN KEY (table2_id) REFERENCES table2(id),
    FOREIGN KEY (table3_id) REFERENCES table3(id),
    PRIMARY KEY (table2_id, table3_id)
);

CREATE TABLE table2 (
    id INTEGER NOT NULL,
    PRIMARY KEY id
);

CREATE TABLE table3 (
    id INTEGER NOT NULL,
    PRIMARY KEY id
);

기본 키 필드는 NULL이 아닌 것으로 선언해야합니다 (기본 키의 정의는 고유하고 NULL이어야한다는 것입니다). 그러나 아래는 모든 DBM의 모든 멀티 컬럼 기본 키에 대한 모범 사례입니다.

create table foo
(
  fooint integer not null
  ,foobar string not null
  ,fooval real
  ,primary key (fooint, foobar)
)
;

SQLITE의 버전 3.8.2 이후, 명시 적 널 사양이 아닌 명시 적 사양의 대안은 "rowid 없음"사양입니다.1]

NOT NULL is enforced on every column of the PRIMARY KEY
in a WITHOUT ROWID table.

"rowid 없음"테이블은 잠재적 효율성 이점이 있으므로 고려해야 할 장황한 대안은 다음과 같습니다.

CREATE TABLE t (
  c1, 
  c2, 
  c3, 
  PRIMARY KEY (c1, c2)
 ) WITHOUT ROWID;

예를 들어 SQLITE3 프롬프트에서 : sqlite> insert into t values(1,null,3); Error: NOT NULL constraint failed: t.c2

다른 방식으로, 당신은 또한 만들 수 있습니다 두 열 기본 키 unique 그리고 자동 증가 열쇠 primary. 이렇게 : https://stackoverflow.com/a/6157337

다음 코드는 테이블을 만듭니다 기본 키로 2 열 sqlite에서.

해결책:

CREATE TABLE IF NOT EXISTS users (id TEXT NOT NULL, name TEXT NOT NULL, pet_name TEXT, PRIMARY KEY (id, name))

PRIMARY KEY (id, name) 나를 위해 일하지 않았습니다. 제약 조건을 추가하면 저에게 일이 발생했습니다.

CREATE TABLE IF NOT EXISTS customer (id INTEGER, name TEXT, user INTEGER, CONSTRAINT PK_CUSTOMER PRIMARY KEY (user, id))

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top