'심오한 세상/db; sql;'에 해당되는 글 2건

  1. SQL은 관계형 데이터베이스에서 사용되는 언어입니다. 그럼 "관계형"의 의미가 무엇일까요? (3)
  2. mysql 스키마 백업

SQL은 관계형 데이터베이스에서 사용되는 언어입니다. 그럼 "관계형"의 의미가 무엇일까요?




SQL은 관계형 데이터베이스 관리 시스템인 RDBMS를 위한 언어입니다.

여기서 관계형이라는 단어에 대해 생각해 봅시다.

어떤 사람들은 관계형이 서로 관계된 여러 테이블을 의미한다고 하는데 그렇지 않습니다.

이 관계형이라는 말은 테이블을 잘 설계하려면 정보를 나타낼 때 여러 테이블 사이의 열들이 서로 어떠한 관계에 있는지를 고려해야 한다는 의미입니다.

적절한 열들을 사용해서 원하는 정보를 쉽게 찾을 수 있도록 정보를 표현하는 것이 쉽지는 않습니다.
테이블에서 필요한 정보가 무엇인가에 따라 다른긴 하지만 테이블을 생성할 때 대략 다음의 과정을 거칩니다.

1. 여러분의 테이블이 나타내는 것이 무엇입니까?
     - 여러분이 테이블로 표현하려는 것을 선택합니다.
2. 이 테이블을 어떻게 사용할 것입니까?
     - 그 테이블을 사용하여 얻어야 하는 정보들의 리스트를 작성합니다.
3. 어떻게 하면 이 테이블에 가장 쉽게 쿼리를 보낼 수 있을까요?
     - 리스트를 이용하여 테이블을 만들 정보들의 조각으로 나눕니다.

그리고 테이블을 만들땐 다음의 2가지 규칙을 지키는 것이 좋다.

1. 원자적 데이터로 구성된 열은 그 열에 같은 타입의 데이터를 여러 개 가질수 없다.
ex) 한 컬럼에 여러개의 값이 들어갈 수 없다.
      '흥미'라는 컬럼에 독서, 사진찍기, 운동 등의 데이터가 여러개 들어가면 안된다.

2. 원자적 데이터로 구성된 테이블은 같은 타입의 데이터를 여러 열에 가질 수 없다.
ex) 한 테이블에 같은 타입의 데이터를 가진 컬럼을 여러개 가질 수 없다.
      'teacher'라는 테이블에 student 컬럼이 여러개가 있으면 안된다.

2개는 서로 상반되는 의견이지만.. 2가지의 규칙을 어기지 않고 테이블을 만든다면...
초기 설계는 성공한 것으로 보입니다.
지금 자기가 만든 테이블을 드려다 보세요.
위 2개의 규칙을 지키고 있나요?
지키지 않고 있다고요?
그럼 위 3단계의 과정을 거쳐서 만드셨나요?

물론 힘듭니다. 저 역시 예전에 만든 테이블을 보니 저 규칙을 지키지 않고, 위 과정을 제대로 생각 안하고 만든 경우가 많네요..
저작자 표시 비영리 변경 금지
신고

mysql 스키마 백업



1.특정 db의 특정 table에서 원하는 값만 덤프받기

>> edu라는 디비에 a,b,c라는 테이블이 있다. 여기서 a라는 테이블에서 no가 7번이상이고 10번
이하인 값만 덤프를 받고자 한다. 어떻게 하겠는가?
여기서 사용되는 옵션은 -w 이다.그럼 위 질문의 sql문은 아래와 같다

mysqldump -u mysql_admin -p edu a -w'no=>7 and no=<10' > edu_a_cond.sql

위와같이 하면 no가 7~10번까지가 덤프될것이다.
위에서 조건문은 -w 다음에 싱글쿼테이션으로 묶어준다. sql에서 사용하는 조건문이 다 될듯싶

다. 모두 테스트를 해보진 않았다.

2.디비 스키마(Schema)만 백업받기

>>초기에 작성해 놓은 테이블 스키마가 없을때 어떻게 하겠는가?
만약 하나의 테이블이라면 desc 해서 일일이 다 삽질을 하면 되것지만 만약 테이블이 100개라

면 ..크억...이럴때 사용하는 mysqldump옵션이 있습니다.
-d 입니다.

!.edu라는 디비의 모든 테이블 스키마를 백업받으려면

mysqldump -u mysql_admin -p -d edu > edu_db.sql

!.edu라는 디비의 a라는 테이블 스키마를 백업받으려면

mysqldump -u mysql_admin -p -d edu a> edu_a_table.sql 
신고