복붙노트

[SQL] SQLite는 자동 증가 기본 키가 아닌 필드

SQL

SQLite는 자동 증가 기본 키가 아닌 필드

그것은 모든 삽입과 자동 증가 될 수있는 비 기본 키를 가질 수 있습니까?

예를 들어, 나는 모든 로그 항목이 (내부 용) 기본 키가있는 로그 및 개정 번호 (I 자동 증가되고 싶어하는 INT 값)를 갖고 싶어.

해결 방법으로, 이것은 순서로 수행, 아직 나는 순서 SQLite는 지원되지 않습니다 있다고 생각 될 수있다.

해결법

  1. ==============================

    1.당신은 삽입을 할 때 선택 최대 (ID) 일을 할 수 있습니다.

    당신은 삽입을 할 때 선택 최대 (ID) 일을 할 수 있습니다.

    예를 들면 :

    INSERT INTO 로그인 (아이디, rev_no, 설명) VALUES ((SELECT MAX (ID) 로그 FROM + 1) 'rev_Id', '일부 설명')

    ID가 기록 없을 것이기 때문에이 빈 테이블에 실패 할 주 0하지만 중 하나 제 1 더미 항목을 추가하거나이에 SQL 문을 변경할 수 있습니다 :

    INSERT INTO 로그인 (아이디, rev_no, 설명) VALUES ((SELECT IFNULL (MAX (ID), 0)의 기록에서 + 1) 'rev_Id', '일부 설명')

  2. ==============================

    2.SQLite는 자동으로 고유 한 행 ID (ROWID)를 생성한다. 이 필드는 일반적으로 사용하는 "* ... 선택",하지만 "* ... 선택 ROWID"를 사용하여이 ID를 가져올 수있을 때 밖으로 남아 있습니다. SQLite는 문서에 따라, 그들은 자동 증가의 사용을 억제주의하십시오.

    SQLite는 자동으로 고유 한 행 ID (ROWID)를 생성한다. 이 필드는 일반적으로 사용하는 "* ... 선택",하지만 "* ... 선택 ROWID"를 사용하여이 ID를 가져올 수있을 때 밖으로 남아 있습니다. SQLite는 문서에 따라, 그들은 자동 증가의 사용을 억제주의하십시오.

    create table myTable ( code text, description text );
    insert into myTable values ( 'X', 'some descr.' );
    select rowid, * from myTable;
    

    :: 결과가 될 것입니다; 1 | X | 일부 DESCR.

    당신이 외래 키로이 ID를 사용하는 경우에는 ROWID를 내보낼 수 있습니다 -과 데이터 무결성을 유지하기 위해 올바른 값을 가져;

    insert into myTable values( rowid, code text, description text ) values
    ( 1894, 'X', 'some descr.' );
    
  3. ==============================

    3.당신이 저장 프로 시저를 통해 삽입을하고 있다면 당신은 거기에 같은 논리 것을 넣어, 다음 검사 이전의 높은 가치와 그것을 증가하는 트리거 (http://www.sqlite.org/lang_createtrigger.html)를 사용하거나 수 .

    당신이 저장 프로 시저를 통해 삽입을하고 있다면 당신은 거기에 같은 논리 것을 넣어, 다음 검사 이전의 높은 가치와 그것을 증가하는 트리거 (http://www.sqlite.org/lang_createtrigger.html)를 사용하거나 수 .

  4. ==============================

    4.필요가 그것을 언급하지하는 나는 그래서 내 대답은 이카루스의 매우 유사하다.

    필요가 그것을 언급하지하는 나는 그래서 내 대답은 이카루스의 매우 유사하다.

    필요한 경우 당신은 더 진보 된 방법으로 이카루스의 솔루션을 사용할 수 있습니다. 다음 기차 예약 시스템을위한 좌석 상황 테이블의 예입니다.

    insert into Availiability (date,trainid,stationid,coach,seatno)
        values (
            '11-NOV-2013',
            12076,
            'SRR',
            1,
            (select max(seatno)+1
                from Availiability
                where date='11-NOV-2013'
                    and trainid=12076
                    and stationid='SRR'
                    and coach=1)
        );
    
  5. from https://stackoverflow.com/questions/6982173/sqlite-auto-increment-non-primary-key-field by cc-by-sa and MIT license