15.3. Lesson: 모델에 데이터 추가
이제 우리가 생성한 모델을, 원래 담으려던 데이터로 채워야 합니다.
이 강의의 목표: 데이터베이스 모델에 새 데이터를 삽입하는 방법을 배우기.
15.3.1. 삽입 선언문
어떻게 테이블에 데이터를 추가할까요? SQL INSERT 를 선언하면 해당 기능을 쓸 수 있습니다:
insert into streets (name) values ('High street');
다음 내용을 기억하십시오:
테이블 이름( streets ) 뒤에 사용자가 채우려고 하는 열 이름을 나열하십시오. (이 경우에는 name 열뿐입니다.)
values 키워드 뒤에 필드 값의 목록을 넣으십시오.
문자열을 작은따옴표로 감싸야 합니다.
id 열을 위한 값을 삽입하지 않았습니다. id 는 시퀀스로 자동 생성되기 때문입니다.
id 를 수동으로 설정하면, 사용자 데이터베이스의 무결성을 심각하게 해칠 수도 있습니다.
선언이 성공했다면 INSERT 0 1 을 볼 수 있을 것입니다.
테이블의 모든 데이터를 선택하면 사용자의 삽입 선언의 결과를 볼 수 있습니다:
select * from streets;
결과 :
select * from streets;
id | name
----+-------------
1 | High street
(1 row)
Try Yourself 초급
INSERT 명령어를 사용해서 streets 테이블에 새 도로를 추가하십시오.
Answer
The SQL command you should use looks like this (you can replace the street name with a name of your choice):
insert into streets (name) values ('Low Road');
15.3.2. 제약 조건에 따라 데이터 연속 추가
15.3.3. Try Yourself 중급
people 테이블에 다음 세부 사항을 갖춘 인물 객체를 추가해보십시오.
Name: Joe Smith
House Number: 55
Street: Main Street
Phone: 072 882 33 21
참고
이 예제에서 전화번호를 정수가 아니라 문자열로 정의한 것을 기억하십니까?
이 시점에서 streets 테이블에 Main Street에 대한 레코드를 먼저 생성하지 않고 데이터를 추가하려 하면 오류 보고를 받게 될 것입니다.
다음 사항에 대해서도 알게 됐을 것입니다.
도로명으로는 추가할 수 없습니다.
‘streets’ 테이블에 도로 레코드를 먼저 생성하지 않으면 도로 id 를 이용해서 도로를 추가할 수 없습니다.
사용자의 두 테이블이 기본/외래 키로 연결되어 있다는 사실을 기억하십시오. 다시 말해 상응하는 유효한 도로 레코드 없이는 유효한 인물을 생성할 수 없다는 뜻입니다.
이런 지식을 사용해서 데이터베이스에 새 인물을 추가해보십시오.
Answer
Here is the correct SQL statement:
insert into streets (name) values('Main Road');
insert into people (name,house_no, street_id, phone_no)
values ('Joe Smith',55,2,'072 882 33 21');
If you look at the streets table again (using a select statement as before),
you’ll see that the id for the Main Road
entry is 2.
That’s why we could merely enter the number 2
above. Even though we’re
not seeing Main Road
written out fully in the entry above, the
database will be able to associate that with the street_id value of 2.
If you have already added a new street object, you might find that the
new Main Road
has an id of 3 not 2.
15.3.4. 데이터 선택
이미 데이터를 선택할 수 있는 문법을 배웠습니다. 몇 가지 예를 더 들어보겠습니다:
select name from streets;
select * from streets;
select * from streets where name='Main Road';
이후 단계에서 데이터를 선택하고 필터링하는 방법에 대해 더 자세히 알아볼 것입니다.
15.3.5. 데이터 업데이트
어떤 기존 데이터를 변경하고자 할 경우 어떻게 해야 할까요? 예를 들어 도로명이 변경됐다고 해봅시다:
update streets set name='New Main Road' where name='Main Road';
이런 업데이트 선언문을 사용할 때는 매우 주의해야 합니다. WHERE 구문과 일치하는 레코드가 하나 이상일 경우 모두 업데이트될 겁니다!
다음과 같이 변경할 레코드를 참조하는 테이블 기본 키를 사용하는 방법이 더 낫습니다:
update streets set name='New Main Road' where id=2;
UPDATE 1 을 반환할 것입니다.
참고
WHERE 선언문 기준은 대소문자를 구분합니다. Main Road 와 Main road 를 서로 다르게 인식합니다.
15.3.6. 데이터 삭제
테이블에서 객체를 삭제하려면, DELETE 명령어를 이용하십시오.
delete from people where name = 'Joe Smith';
‘people’ 테이블이 어떻게 변경됐는지 볼까요?
address=# select * from people;
id | name | house_no | street_id | phone_no
----+------+----------+-----------+----------
(0 rows)
15.3.7. Try Yourself 고급
지금까지 배운 기술을 이용해서 사용자 데이터베이스에 새 친구들 몇 명을 추가해보십시오.
name | house_no | street_id | phone_no
-----------------+----------+-----------+--------------
Joe Bloggs | 3 | 2 | 072 887 23 45
Jane Smith | 55 | 3 | 072 837 33 35
Roger Jones | 33 | 1 | 072 832 31 38
Sally Norman | 83 | 1 | 072 932 31 32
15.3.8. In Conclusion
이제 이전 단계에서 생성했던 기존 모델에 새 데이터를 추가하는 방법을 배웠습니다. 새로운 유형의 데이터를 추가하려면 기존 모델을 수정하거나, 해당 데이터를 담을 수 있는 새 모델을 생성해야 할 수도 있다는 사실을 기억하십시오.
15.3.9. What’s Next?
이제 데이터를 추가했으니, 쿼리를 통해 이 데이터에 다양한 방식으로 접근하는 방법에 대해 배워보겠습니다.