2015. 2. 11. 11:08

개발을 하다보면 DB를 변경해야 할 경우가 생길 수 도 있으며

DB 서버를 이전해야 하는 경우도 생깁니다.

이때 데이터를 이전해야 합니다.

이럴때 사용할 수 있는 쿼리를 알려드리겠습니다.

 

mysql의 경우 phpMyAdmin을 사용하여 sql파일로 받을 수도 있습니다만

이번에 포스팅하는 내용은 프로그램으로 이전하는 기능을 작성할때

사용하는 쿼리입니다.

직접 작업하고 테스트한 mysql과 sqlite에 대해서만 다루겠습니다.

다른 DB에 관해서는 mkyojung님의 작성하신 "오라클, MySQL, MS-SQL 테이블 / 컬럼 정보 조회"를 참고하세요.

 

1. 테이블 정보 가져오기

  1.1 mysql  - 2가지 쿼리 중 하나를 사용하시면 됩니다.

    1.1.1 "SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'DB 이름'";

           * 대신 'TABLE_NAME' 등 필드명 사용도 가능합니다.

    1.1.2 "SHOW TABLES FROM DB 이름";

 

  1.2 sqlite

"SELECT * FROM sqlite_master WHERE type='table'";

"SELECT name FROM sqlite_master WHERE type='table'"; //필드명을 지정

*sqlite의 경우 사용자가 만든 테이블 외에도 시스템상의 테이블까지 반환하므로 where절에 "name like '%aa%'"등과 같이

조건을 사용하시면 수월하실 것입니다.

 

2. 테이블의 필드정보 가져오기

  2.1 mysql - 2가지 쿼리 중 하나를 사용하시면 됩니다.

    2.1.1 "SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = '테이블 이름'";

    2.1.2 "SHOW FIELDS FROM 테이블 이름";

 

  2.2 sqlite

     "PRAGMA TABLE_INFO (테이블 이름);

 

위와 같이 사용하시면 됩니다.

 

참고로 sqlite에 insert를 하다보면 데이터가 많을때 시간이 너무 오래걸립니다.

이럴때는 아래 두 코드를 이용하시면 속도가 많이 빨라진 것을 느끼실 수 있습니다.

단, 데이터에 문제가 생길 수 도 있습니다.

"PRAGMA cache_size=6000";
"PRAGMA synchronous=OFF";

 

 

 

   

 

'Mysql' 카테고리의 다른 글

mysql 테이블이 깨졌을때  (0) 2015.02.16
mysql과 sqlite를 사용할때 주의할 점  (0) 2015.02.10
insert 시 VALUE 와 VALUES ??  (0) 2014.10.13
Posted by 작은0악마
2015. 2. 10. 17:31

웹개발을 하다보면 DB를 사용하게 됩니다.

일반적으로 PHP의 경우에는 mysql을 가장 많이 사용하죠...

최근에 sqlite와 mysql을 사용하다가 알게된 주의할 점을 알려드리겠습니다.

 

물론 차이점은 이번엔 포스팅하는 것외에도 많이 있습니다만

작업을 하면서 체험한것 4가지만 포스팅하겠습니다.

 

1. 테이블 비우기

테이블을 완전히 비우고 auto increment값 까지 초기화를 하려고 합니다.

 

mysql : "TRUNCATE TABLE 테이블명" 을 사용합니다.

 

그러나 sqlite는 위 쿼리가 동작하지 않습니다.

sqlite에서 관련기능을 찾아본 결과는 저는 다음의 2가지 방법을 찾았습니다.

1.1 "DELETE FROM 테이블명"
     "VACUUM"

     위 2개의 쿼리를 순차적으로 실행합니다.

1.2 "DELETE FROM 테이블명";
     "DELETE FROM sqlite_sequence WHERE name='테이블명'";

     역시 위 두개의 쿼리를 순차적으로 진행합니다.

 

 

2. AUTOINCREMENT (자동증가)

테이블 생성 시 키필드등에 자동으로 값이 증가하게 만들때 사용합니다.

그러나 두 DB는 스펠링이 다릅니다.

mysql : AUTO_INCREMENT

sqlite : AUTOINCREMENT

이 부분에서 sqlite에 "AUTO_INCREMENT" 키를 넣어 보지는 않았습니다.

 

 

3. '\'와 같은 특수 문자 처리

DB에 값을 입력할때 '\'와 같은 특수 문자를 입력하려 할때 두 DB가 차이점을 보입니다.

mysql에서는 특별한 처리를 해줍니다.

일반적으로 addslashes()와 같은 함수를 이용하여 '\'문자가 '\\'로 변환하여 입력합니다.

 

그러나 sqlite는 그 값을 그대로 받아들입니다. mysql처럼 addslashes()함수를 사용하면

DB에 '\'가 아닌 '\\'값 그대로 입력되게 됩니다.

 

 

4. 테이블 생성시 default 값 설정

테이블을 생성할때 필드에 초기값을 지정할 수 있습니다.

이때 사용하는 Default키에 대해 비교하겠습니다.

 

이번엔 sqlite 부터 설명드리겠습니다.

sqlite에서는 "txtDesc TEXT DEFAULT 'aaa' NOT NULL" 등과 같이

TEXT 타입의 필드에 기본값을 지정할 수 있습니다.

 

그러나 mysql에서는 위 문구는 오류를 발생합니다.

확인해보면 mysql에서는 BLOB, TEXT 타입의 필드에는 기본값을 지정할 수 없다고 나옵니다.

 

먼저 이야기했던것 처럼 두 DB는 더 많은 차이가 있습니다.

이번에 포스팅 하고자 했던 것은 코딩을 할 때

자주 사용하는 부분에서 직접 겪은 차이점만 거론한것입니다. ^^

 

Posted by 작은0악마