CREAT TABLE*(primary key, references) and INSERT INTO
2019. 1. 29. 13:56
정리해보기
- pgSQL에서는 테이블생성시 public. 등의 스키마를 테이블명 앞에 붙힌다( 생략시 default - public. 자동)
- 2번째 테이블 생성부터는, 자신이 필요한 id(PRIMARY KEY)와 칼럼을 입력후 -> 참조 테이블을 고려한다.
1) 참조테이블_id(칼럼명) + 참조테이블의 PRIMARY KEY와 같은 datatype + REFERENCES + 스키마.참조테이블명
2) 이렇게 지정해주면 참조테이블의 PRIMARY KEY는 2번째 테이블의 FOREIGN KEY가 되어버린다 - 1번째 테이블을 먼저 입력한 뒤, 참조테이블인 2번째 테이블에 데이터 입력한다.
1) 이 때, 1번째 테이블의 PRIMARY KEY = 2번째 테이블의 FOREIGN KEY에 없는 값은 입력되지 않는다.
CREATE TABLE
-- CREATE TABLE -- -- 만약 default schema인 public을 사용할 것이라면, public.은 생략해도 된다. -- users테이블을 맨 처음 만들기. CREATE TABLE public.users ( id integer PRIMARY KEY, --사용자가 많다면 *bigint를 사용하면 된다. datatype다음에 PRIMARY KEY를 지정해주면 된다. name character varying(100) NOT NULL, --*pgSQL에서는 varchar(255)가 아니라 character varying(255)로 사용한다. ) -- PRIMARY KEY 지정은, 다 칼럼들 작성하고 난 다음에, CONSTRAINT로 지정해줄 수 있다. -- CONSTRAINT + constraint's name + PRIMARY KEY + (칼럼명) -- ()안에는 여러개의 primary key를 지정해 줄 수 도 있다. CREATE TABLE public.users ( id integer, name character varying(100) NOT NULL, CONSTRAINT users_id_pkey PRIMARY KEY (id) ) -- 그러나 *** 추천 ***은 칼럼 만들때 지정해주는 것이다. CREATE TABLE public.users ( id integer PRIMARY KEY, name character varying(100) NOT NULL ) SELECT * FROM users -- videos 테이블 만들기 -- 1) videos에 필요한 칼럼들 먼저 넣기 CREATE TABLE public.videos ( id integer PRIMARY KEY, name character varying(255) NOT NULL ) -- 2) *** users 테이블과 연관관계를 고려하여, 어떤사람이 업로드 했는지 id가 필요함. -- *** id와 users_id가 상관관계가 있으니 라인을 비슷한데 두자. -- (1) user_id는 users 테이블과 같은 datatype을 가져야할 것이다. CREATE TABLE public.videos ( id integer PRIMARY KEY, user_id integer, name character varying(255) NOT NULL ) -- (2) user_id는 users 테이블의 id만 들어갈 수 있어야한다.****** -- users 테이블을 참조값만 들어가는 테이블임을 < REFRENCES 스키마.테이블 >로 명시해준다. -- REFERENCES만 정해주면, ***참조테이블의 primay key가 자동적으로 체크된다. CREATE TABLE public.videos ( id integer PRIMARY KEY, user_id integer REFERENCES public.users, name character varying(255) NOT NULL ) SELECT * FROM videos
INSERT INTO
-- INSERT INTO -- -- 1) user table에 넣기 *** video 테이블은 users 테이블을 참조하고 있기 때문에 값을 바로 넣을 수 없다 **** -- 테이블명다음에 블라켓()에 칼럼리스트를 적어줘도 되지만, 생략해도 된다. INSERT INTO public.users(id,name) VALUES (1, 'marysmith'); SELECT * FROM public.users INSERT INTO public.users VALUES (2, 'rolfsmith'); SELECT * FROM public.users INSERT INTO public.users VALUES (3, 'josesalvatierra'); -- 2) videos 테이블은, user_id칼럼이 users테이블의 primaykey를 참조하고 있기 때문에, -- uses테이블을 먼저 채워넣고 ----> 거기에 있는 값만 INSERT INTO 할 수 있다. -- 참조하는 순간 uses테이블의 primary key는 **자동으로 videos테이블의 foreign key가 된다.*** SELECT * FROM public.videos; -- (1) 만약 users테이블에 없는 값을 입력시킨다면, 에러가 난다. INSERT INTO public.videos VALUES (1, 10, 'Test Video'); -- (2) users 테이블의 primary key = videos테이블이 참조해서 foreign key가 된다. INSERT INTO public.videos VALUES (1, 2, 'Test Video'); SELECT * FROM public.videos; -- 3) 이제 2개 테이블을 조인시켜보자. SELECT * FROM public.videos INNER JOIN public.users ON public.users.id = public.videos.user_id; -- 4) users테이블에서 primary key(***자동적으로 NOT NULL적용***)을 -- autoincrementing 로 적용시켜서 -> name만 입력하면 id가 자동으로 올라가도록 해보자.
'한의대 생활 > └ PostgreSQL' 카테고리의 다른 글
DROP * ( with CASCADE ) and VIEW* ( with LOCAL / CASECADE CHECK OPTION ) (0) | 2019.01.30 |
---|---|
SEQUENCE* ( autoincrement대체 ) and INDEX* ( WHERE서치를 문자열에서 빠르게 내부binary파일생성) (0) | 2019.01.30 |
JOIN*(3개 테이블) and GROUP BY*(보이지않더라도 key칼럼으로) and ORDER BY (0) | 2019.01.29 |
4. DB 조작해보기(sp_help과 같은코드, JOIN, *JOIN에 JOIN example) (0) | 2019.01.24 |
3. DB 조작해보기(UPDATE, DELETE, LIKE %_FILTERING*) (0) | 2019.01.23 |