[SQL] 자동 증분 테이블 열
SQL자동 증분 테이블 열
사용 포스트 그레스, 내가 SQL에 자동으로 번호를 내 기본 키를 AUTO_INCREMENT를 사용하는 것을 시도하고있다. 그러나, 그것은 나에게 오류를 제공합니다.
CREATE TABLE Staff (
ID INTEGER NOT NULL AUTO_INCREMENT,
Name VARCHAR(40) NOT NULL,
PRIMARY KEY (ID)
);
오류:
어떤 생각을 왜?
해결법
-
==============================
1.직렬 열 (아래 참조) 변하지. 그러나 IDENTITY 열을 고려하십시오. 포스트 그레스 (10) 구현이 표준 SQL 기능.
직렬 열 (아래 참조) 변하지. 그러나 IDENTITY 열을 고려하십시오. 포스트 그레스 (10) 구현이 표준 SQL 기능.
CREATE TABLE staff ( staff_id int GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY , staff text NOT NULL );
기본 구문과 테이블 만들기에 대한 설명서 정보. 의 주 저자 인 피터 Eisentraut의 블로그 항목에 대한 자세한 설명.
기존 테이블 (행으로 채워 여부)에 IDENTITY 열을 추가하려면 :
ALTER TABLE staff ADD COLUMN staff_id int GENERATED BY DEFAULT AS IDENTITY;
또한 (테이블이 아직 PK를 할 수 없습니다) 같은 시간에 그에게 PK를 만들려면 :
ALTER TABLE staff ADD COLUMN staff_id int GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY;
같은 오류 메시지가 발생할 수있는 초기 버전의 버그가 있었다 :
이것은 포스트 그레스 10.2로 수정되었습니다. 세부:
대신 시리얼 의사 데이터 형식을 사용합니다 :
CREATE TABLE staff ( staff_id serial PRIMARY KEY, , staff text NOT NULL );
이것은 자동으로 생성 및 시퀀스 객체를 부착하고 시퀀스에서 NEXTVAL에 DEFAULT ()을 설정한다. 그것은 당신이 필요로하는 모든 않습니다.
나는 또한 내 예에 불과 소문자 식별자를 사용합니다. 쉽게 포스트 그레스와 함께 당신의 인생을 만듭니다.
그리고 더 나은 설명 열 이름을 사용합니다. 이름으로 "ID"는 일부 미들웨어가 사용하는 안티 패턴,하지만 거의 설명이다. "이름"과 유사.
-
==============================
2.당신은 당신이이 구문을 사용하여 SQL 서버에, 그러나, 사용하는 RDBMS를 지정하지 않습니다
당신은 당신이이 구문을 사용하여 SQL 서버에, 그러나, 사용하는 RDBMS를 지정하지 않습니다
CREATE TABLE [dbo].[Staff] ( [ID] [int] IDENTITY(1,1) NOT NULL, [Name] VARCHAR(40) NOT NULL, CONSTRAINT [ID] PRIMARY KEY CLUSTERED ( [ID] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] GO
-
==============================
3.SQL 서버 데이터베이스에서이 같은 (1,1) 신원을 사용할 수 있습니다 :
SQL 서버 데이터베이스에서이 같은 (1,1) 신원을 사용할 수 있습니다 :
CREATE TABLE Staff ( ID INT IDENTITY(1,1) NOT NULL, Name VARCHAR(40) NOT NULL, PRIMARY KEY (ID) );
-
==============================
4.PostgreSQL의 : 당신이 절대적으로 자신의 자동 증가 값이해야하는 경우 :
PostgreSQL의 : 당신이 절대적으로 자신의 자동 증가 값이해야하는 경우 :
그런 다음 시퀀스를 사용합니다 :
ericlesc_schools=> drop table yar; DROP TABLE ericlesc_schools=> drop sequence user_id_seq; DROP SEQUENCE ericlesc_schools=> create sequence user_id_seq; CREATE SEQUENCE ericlesc_schools=> create table yar( id int default nextval('user_id_seq'), foobar varchar); CREATE TABLE ericlesc_schools=> insert into yar (foobar) values('hey alex'); INSERT 0 1 ericlesc_schools=> insert into yar (foobar) values('hey what derick'); INSERT 0 1 ericlesc_schools=> insert into yar (foobar) values('I look like a hushpuppy'); INSERT 0 1 ericlesc_schools=> select * from yar; id | foobar ----+----------------- 1 | hey alex 2 | hey what derick 3 | I look like a hushpuppy (3 rows)
from https://stackoverflow.com/questions/9875223/auto-increment-table-column by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 오라클의 다중 행 삽입을 할 수있는 가장 좋은 방법은? (0) | 2020.03.10 |
---|---|
[SQL] 열 값을 기준으로 선택 출력 값 - 문 'SELECT'을의 'IF' (0) | 2020.03.10 |
[SQL] 오라클 SQL 피벗 쿼리 (0) | 2020.03.10 |
[SQL] INNER은 SQL에 가입 대 CROSS는 가입 (0) | 2020.03.10 |
[SQL] "LIKE"및 SQL의 "IN"의 조합이 있습니까? (0) | 2020.03.10 |