- Express-ejs를 이용한 웹 서버에서 DB에 저장하는 것을 하기전에 mysql모듈에서 제공하는 기능들을 하나하나 알아가 보려고 합니다.
- 또한 DB에 대한 아주 기초적인 쿼리문이나 지식이 필요합니다.
Mysql 모듈을 설치하기전에..
- 당연 필요한것은 mysql입니다. mysql은 무료로 제공되고 있는 DataBase로서 가장 사랑받고 있습니다.
- http://dev.mysql.com/downloads/mysql/에서 다운, 설치를 할수 있습니다.
Mysql 테이블 생성하기
- node라는 스키마(데이터베이스)를 새로 만들어 줍니다.
1 2 3 | create database node; use node; |
- 저의 이전 회원가입 페이지에 맞는 테이블을 기준으로 테스트를 하겠습니다.
1 2 3 4 5 6 7 8 9 | create table member( m_id varchar(20) primary key, m_pass varchar(200) not null, m_name varchar(20) not null, m_tel varchar(13) not null, m_date date not null, m_gender char(1) not null, m_email varchar(100) not null ); |
- 회원가입에 맞는 간단한 DB가 완성되었습니다. 이제 Node를 이용하여 테스트 해봅시다.
Mysql 모듈 설치하기
- 우선 mysql 프로젝트 파일을 만들어 줍니다.
- mysql이라는 모듈을 이용하여 mysql과 연결을 해보려고 합니다.
- 설치 명령어는 npm install mysql 입니다.
1 2 3 4 5 6 7 8 9 10 11 12 | C:\>mkdir mysql_tutorial C:\>cd mysql_tutorial C:\mysql_tutorial>npm install mysql mysql@2.5.4 node_modules\mysql ├── require-all@0.0.8 ├── bignumber.js@1.4.1 └── readable-stream@1.1.13 (string_decoder@0.10.31, isarray@0.0.1, inherits@2 .0.1, core-util-is@1.0.1) C:\mysql_tutorial> |
- mysql 모듈을 설치하였으니 바로 js파일(저의 경우 mysqls.js)을 만들어서 테스트 해봅시다.
예제 Test
- 연결하기 -> 값 입력 -> 조회 -> 변경 -> 삭제 순서대로 해보겠습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | var mysql = require('mysql'); var connection = mysql.createConnection({ host : '[address]', user : '[user]', password : '[password]', }); connection.connect(); connection.query('SELECT 1 + 1 AS solution', function(err, rows, fields) { if (err) throw err; console.log(rows); console.log('The solution is: ', rows[0].solution); }); connection.end(); |
- 가장 처음 나오는 예제입니다.
- 3~5번 라인에서는 각자에 맞는 값을 넣어 설정을 해줍니다.
- 로컬에서 테스트한다면 [adress] 부분에 localhost
- 여러가지 옵션이 여기의 connection option에 쭈욱 설명되어 있습니다.
- 13번 라인은 예제에 없지만 결과값의 리턴 형식을 보기 위해 넣었습니다.
- node [test].js 로 실행합니다.
1 2 3 4 5 | C:\mysql_tutorial>node mysqls.js [ { solution: 2 } ] The solution is: 2 C:\mysql_tutorial> |
- [{solution:2}] 를 보아 결과값은 레코드별로 배열로, 컬럼은 JSON방식으로 넘어오는 것을 어림짐작 할수 있겠네요.
- 예상된 결과가 잘 나왔음을 알수 있습니다.
Insert
mysqls.js
1 2 3 4 5 6 7 8 9 | ...
connection.connect(); var post = { m_tel: '010-1234-5678', m_id: 'GilDong', m_pass: 'password1', m_name: '홍길동', m_date: '2000-01-01', m_gender: '남', m_email: 'GilDong@Hong.com' }; var query = connection.query('INSERT INTO member SET ?', post, function(err, result) { // Neat! console.log(result); }); connection.end(); |
- connection.query(쿼리,입력값,결과처리)로 이루어 집니다.
- 입력값은 위의 post에 넣어준것처럼 json방식으로 입력하면되고 이는 ejs에서 값이 넘어오는 방식이랑 같으니 값을 db에 넘겨주기에도 편합니다.
- 이제 실행을 해봅시다.
1 2 3 4 5 6 7 8 9 10 11 12 | C:\mysql_tutorial>node mysqls.js undefined C:\mysql_tutorial>node mysqls.js { fieldCount: 0, affectedRows: 1, insertId: 0, serverStatus: 2, warningCount: 0, message: '', protocol41: true, changedRows: 0 } |
- 1~2라인은 실패 했을 경우 result, 4~12라인은 성공했을 경우 result 입니다.
- mysql workbench에서 확인한 결과 값이 잘 들어갔음을 알수 있습니다.
- Delete, Update 문도 이와같이 사용하면됩니다.
??와 ?(속성,값이 여러개인경우)
1 2 3 4 5 6 7 8 9 10 11 | connection.connect(); var table = 'member'; var columns = ['m_id', 'm_pass']; var where = 'm_id'; var userId = 'GilDong'; var query = connection.query('SELECT ?? FROM ?? WHERE ?? = ?', [columns, table, where,userId], function(err,rows, results) { console.log(rows); }); connection.end(); |
- 쿼리문에서 ?? 인경우에는 컬럼명, 테이블 명와 같은 속성값일 경우 씁니다.
- ??와는 다르게 ?인 경우에는 값(변수) 일 경우 사용되며
- 쿼리문의 ??,?의 순서대로 배열에 넣어 query의 두번째 속성값으로 입력하면됩니다.
결과값(리턴값) 보기
- select로 한번 더 다른 예제를 해보겠습니다.
1 2 3 4 5 6 7 8 9 10 11 | ... connection.connect(); connection.query('SELECT * from member', function(err, rows, fields) { if (err) throw err; console.log(rows); console.log(fields); }); connection.end(); |
- select와 동시에 옆에 err,rows,fields에 대한 것을 알아보겠습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | C:\mysql_tutorial>node mysqls.js [ { m_id: 'GilDong', m_pass: 'password1', m_name: '홍길동', m_tel: '010-1234-5678', m_date: Sat Jan 01 2000 00:00:00 GMT+0900 (대한민국 표준시), m_gender: '남', m_email: 'GilDong@Hong.com' } ] [ { catalog: 'def', db: 'node', table: 'member', orgTable: 'member', name: 'm_id', orgName: 'm_id', charsetNr: 33, length: 60, type: 253, flags: 20483, decimals: 0, default: undefined, zeroFill: false, protocol41: true }, |
- rows는 앞에서 봤듯이 해당 결과에 대한 것을 레코드는 행렬로, 컬럼명와 값은 json으로 들어오는 것을 볼수 있고,
- fields에 대한 값은 각각 컬럼에 대한 자세한 정보를 보여주고 있습니다.
1 2 3 4 5 6 7 8 9 | connection.connect(); var post = {m_id:'GilDong'}; connection.query('SELECT * from member where ?',post, function(err, rows, fields) { if (err) throw err; console.log(rows); console.log(fields); }); |
- 위의 insert문과 같이 이렇게 사용할수 있습니다.
댓글 없음:
댓글 쓰기