[sql] sqlite에 자동 증가가 있습니까?

Sqlite3primary key 에서 자동 증가 기능이있는 테이블을 만들려고합니다 . 이것이 실제로 가능한지 확실하지 않지만 다른 필드 만 지정하면되기를 바랍니다.

예를 들면 :

CREATE TABLE people (id integer primary key auto increment, first_name varchar(20), last_name varchar(20));

그런 다음 값을 추가 할 때 다음 작업 만 수행하면되기를 바랐습니다.

INSERT INTO people
VALUES ("John", "Smith");

이것이 가능할까요?

Windows 7에서 실행 sqlite3cygwin입니다.



답변

ROWID라는 이름을 무료로받을 수 있습니다. 요청 여부에 관계없이 모든 SQLite 테이블에 있습니다.

INTEGER PRIMARY KEY 유형의 열을 포함하는 경우 해당 열은 자동 ROWID 열을 가리 킵니다 (별명 임).

예상대로 행을 삽입 할 때마다 ROWID (이름에 관계없이)에 값이 할당됩니다. INSERT에 NULL이 아닌 값을 명시 적으로 할당하면 자동 증가 대신 지정된 값을 가져옵니다. INSERT에 명시 적으로 NULL 값을 지정하면 다음 자동 증가 값을 가져옵니다.

또한 다음을 피해야합니다.

 INSERT INTO people VALUES ("John", "Smith");

그리고 사용

 INSERT INTO people (first_name, last_name) VALUES ("John", "Smith");

대신. 첫 번째 버전은 매우 취약합니다. 테이블 정의에서 열을 추가, 이동 또는 삭제하면 INSERT가 실패하거나 잘못된 데이터 (잘못된 열의 값 포함)를 생성합니다.


답변

네, 가능합니다. SQLite FAQ 에 따르면 :

선언 된 열 INTEGER PRIMARY KEY은 자동 증가합니다.


답변

오늘 기준 — 2018 년 6 월


다음은 공식 SQLite 문서 가 주제에 대해 말하는 내용입니다 (굵게 및 기울임 꼴은 내 것임).

  1. 자동 증가 키워드 강요하며 여분의 CPU, 메모리, 디스크 공간, 디스크 I / O 오버 헤드 및 엄격하게 필요하지 않은 경우에는 피해야한다. 일반적으로 필요하지 않습니다.

  2. SQLite에서 INTEGER PRIMARY KEY
    유형의 열 은 항상 64 비트 부호있는 정수인 ROWID (WITHOUT ROWID 테이블 제외 )의 별칭입니다 .

  3. INSERT 에서 ROWID 또는 INTEGER PRIMARY KEY 열에
    명시 적으로 값이 지정
    되지 않은 경우 일반적으로 현재
    사용 중인 가장 큰 ROWID보다 하나 더 많은 사용되지 않는 정수로 자동으로 채워집니다 . 이것은 AUTOINCREMENT 키워드 사용 여부에 관계없이 적용됩니다.

  4. 경우 자동 증가 키워드가 나타납니다 INTEGER PRIMARY KEY 이후 에 자동 ROWID 할당 알고리즘을 변경, 재사용 방지
    데이터베이스의 수명 기간 동안의 ROWID의를. 즉, AUTOINCREMENT의 목적은 이전에 삭제 된 행에서 ROWID의 재사용을 방지하는 것입니다.


답변

읽어 보셨나요? AUTOINCREMENT 필드는 어떻게 생성합니까?

INSERT INTO people
VALUES (NULL, "John", "Smith");


답변

AUTOINCREMENT근처에 키워드를 지정하면 안됩니다 PRIMARY KEY. 자동 증가 기본 키 생성 및 삽입의 예 :

$ sqlite3 ex1

CREATE TABLE IF NOT EXISTS room(room_id INTEGER PRIMARY KEY, name VARCHAR(25) NOT NULL, home_id VARCHAR(25) NOT NULL);

INSERT INTO room(name, home_id) VALUES ('test', 'home id test');

INSERT INTO room(name, home_id) VALUES ('test 2', 'home id test 2');

SELECT * FROM room;

줄게:

1|test|home id test
2|test 2|home id test 2


답변

rowid 외에 고유 한 자동 증가 필드를 정의 할 수 있지만 권장되지 않습니다. 자동으로 증가하는 rowid를 사용할 때 항상 더 나은 솔루션입니다.

AUTOINCREMENT키워드 강요하며 여분의 CPU, 메모리, 디스크 공간, 디스크 I / O 오버 헤드 엄격하게 필요하지 않은 경우에는 피해야한다. 일반적으로 필요하지 않습니다.

읽기 여기에 자세한 내용을 참조하십시오.


답변

SQLite AUTOINCREMENT는 테이블의 필드 값을 자동으로 증가시키는 데 사용되는 키워드입니다. 특정 컬럼 이름으로 테이블을 생성 할 때 AUTOINCREMENT 키워드를 사용하여 필드 값을 자동 증가시켜 자동 증가시킬 수 있습니다.

AUTOINCREMENT 키워드는 INTEGER 필드에서만 사용할 수 있습니다. 통사론:

AUTOINCREMENT 키워드의 기본 사용법은 다음과 같습니다.

CREATE TABLE table_name(
   column1 INTEGER AUTOINCREMENT,
   column2 datatype,
   column3 datatype,
   .....
   columnN datatype,
);

예를 들어 아래를 참조하십시오. COMPANY 테이블이 다음과 같이 생성되는 것을 고려하십시오.

sqlite> CREATE TABLE TB_COMPANY_INFO(
   ID INTEGER PRIMARY KEY   AUTOINCREMENT,
   NAME           TEXT      NOT NULL,
   AGE            INT       NOT NULL,
   ADDRESS        CHAR(50),
   SALARY         REAL
);

이제 TB_COMPANY_INFO 테이블에 다음 레코드를 삽입합니다.

INSERT INTO TB_COMPANY_INFO (NAME,AGE,ADDRESS,SALARY)
VALUES ( 'MANOJ KUMAR', 40, 'Meerut,UP,INDIA', 200000.00 );

이제 레코드를 선택하십시오

SELECT *FROM TB_COMPANY_INFO
ID      NAME            AGE     ADDRESS             SALARY
1       Manoj Kumar     40      Meerut,UP,INDIA     200000.00