16.3. Lesson: 모델에 데이터 추가

이제 우리가 생성한 모델을, 원래 담으려던 데이터로 채워야 합니다.

이 강의의 목표: 데이터베이스 모델에 새 데이터를 인서트하는 방법을 배우기.

16.3.1. 인서트 선언문

How do you add data to a table? The sql INSERT statement provides the functionality for this:

insert into streets (name) values ('High street');

다음 내용을 기억하십시오.

  • 테이블명( streets ) 뒤에 사용자가 채우려고 하는 열명을 나열하십시오. (이 경우에는 name 열뿐입니다.)

  • values 키워드 뒤에 필드 값의 목록을 넣으십시오.

  • 문자열을 작은따옴표로 감싸야 합니다.

  • id 열을 위한 값을 인서트하지 않았습니다. id 는 시퀀스로 자동 생성되기 때문입니다.

  • id 를 수동으로 설정하면, 사용자 데이터베이스의 무결성을 심각하게 해칠 수도 있습니다.

선언이 성공했다면 INSERT 0 1 을 볼 수 있을 것입니다.

You can see the result of your insert action by selecting all the data in the table:

select * from streets;

결과 :

select * from streets;
 id |    name
----+-------------
  1 | High street
(1 row)

16.3.1.1. Try Yourself basic 초급

INSERT 명령어를 사용해서 streets 테이블에 새 도로를 추가하십시오.

결과 확인

16.3.2. 제약 조건에 따라 데이터 연속 추가

16.3.3. Try Yourself moderate 중급

people 테이블에 다음 세부 사항을 갖춘 인물 오브젝트를 추가해보십시오.

Name: Joe Smith
House Number: 55
Street: Main Street
Phone: 072 882 33 21

참고

이 예제에서 전화번호를 정수가 아니라 문자열로 정의한 것을 기억하십니까?

이 시점에서 streets 테이블에 Main Street에 대한 레코드를 먼저 생성하지 않고 데이터를 추가하려 하면 오류 보고를 받게 될 것입니다.

다음 사항에 대해서도 알게 됐을 것입니다.

  • 도로명으로는 추가할 수 없습니다.

  • 〈streets〉 테이블에 도로 레코드를 먼저 생성하지 않으면 도로 id 를 이용해서 도로를 추가할 수 없습니다.

사용자의 두 테이블이 기본/외래 키로 연결되어 있다는 사실을 기억하십시오. 다시 말해 상응하는 유효한 도로 레코드 없이는 유효한 인물을 생성할 수 없다는 뜻입니다.

이런 지식을 사용해서 데이터베이스에 새 인물을 추가해보십시오.

결과 확인

16.3.4. 데이터 선택

We have already shown you the syntax for selecting records. Let’s look at a few more examples:

select name from streets;
select * from streets;
select * from streets where name='Main Road';

이후 단계에서 데이터를 선택하고 필터링하는 방법에 대해 더 자세히 알아볼 것입니다.

16.3.5. 데이터 업데이트

What if you want to make a change to some existing data? For example, a street name is changed:

update streets set name='New Main Road' where name='Main Road';

이런 업데이트 선언문을 사용할 때는 매우 주의해야 합니다. WHERE 구문과 일치하는 레코드가 하나 이상일 경우 모두 업데이트될 겁니다!

A better solution is to use the primary key of the table to reference the record to be changed:

update streets set name='New Main Road' where id=2;

UPDATE 1 을 반환할 것입니다.

참고

WHERE 선언문 기준은 대소문자를 구분합니다. Main RoadMain road 를 서로 다르게 인식합니다.

16.3.6. 데이터 딜리트

In order to delete an object from a table, use the DELETE command:

delete from people where name = 'Joe Smith';

Let’s look at our people table now:

address=# select * from people;

  id | name | house_no | street_id | phone_no
 ----+------+----------+-----------+----------
(0 rows)

16.3.7. Try Yourself hard 고급

Use the skills you have learned to add some new friends to your database:

      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

16.3.8. In Conclusion

이제 이전 단계에서 생성했던 기존 모델에 새 데이터를 추가하는 방법을 배웠습니다. 새로운 유형의 데이터를 추가하려면 기존 모델을 수정하거나, 해당 데이터를 담을 수 있는 새 모델을 생성해야 할 수도 있다는 사실을 기억하십시오.

16.3.9. What’s Next?

이제 데이터를 추가했으니, 쿼리를 통해 이 데이터에 다양한 방식으로 접근하는 방법에 대해 배워보겠습니다.