How We Coding

https://www.opentutorials.org/course/2136/12020 참고


< 설치 >

- 비트나미를 이용한 설치 (https://bitnami.com/stack/mamp)


- 설치중 맨 아래를 제외하고 체크 해제.


- pw 설정


$ cd /App(tab)/mamp(tab)/mysql/bin

./mysql -uroot -p

>> 설정한 pw 입력

mysql>


정상설치..!!



< 구조 >


테이블

레코드(행)

필드(열)


데이터베이스 (연관된 테이블들의 묶음)


하나의 애플리케이션이 하나의 데이터베이스에 대응.


하나의 PC에는 여러 개의 애플리케이션이 설치.


이것들을 그룹핑하는 것이 데이터베이스 서버 라는 것..!! (opentutorials.ort:3306)



...



< MySQL 사용하기 >


$ ./mysql (-hlocalhost) -uroot -p

$ ./mysql -hopentutorial.org -P3306 -uroot -p // 이런식으로도 접속 가능


즉 데이터베이스 서버에 접속을 하고 인증 과정을 거친 상태..!!


다음으로는 데이터베이스의 테이블을 만들기 위해 데이터베이스를 만들어야 함.


( 데이터베이스 서버 != 데이터베이스 ) 


mysql> 

데이터베이스 보기

1
show databases;

데이터베이스 생성

1
CREATE DATABASE o2 CHARACTER SET utf8 COLLATE utf8_general_ci;

데이터베이스 선택

1
use o2;

테이블 생성

1
2
3
4
5
6
7
CREATE TABLE `topic` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`title` varchar(100) NOT NULL,
`description` text NOT NULL,
`author` varchar(30) NOT NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

생성된 테이블 확인

1
show tables;

데이터 삽입

1
2
INSERT INTO topic (title, description, author) VALUES('JavaScript','Computer language for web.', 'egoing');
INSERT INTO topic (title, description, author) VALUES('NPM','Package manager', 'leezche');

 

테이블 내용 확인

mysql> select * from topic; // topic 테이블에 있는 모든 행을 가져온다.



< MySQL UPDATE & DELETE >


mysql> update topic set TITLE='npm' where id='2'; // topic 테이블에서 id가 2인 TITLE 을 npm 으로 변경


 mysql> delete from topic where id='2';




< node-mysql : 접속 & SELECT & INSERT & UPDATE & DELETE >


- js로 어떻게 mysql 을 제어하는가


- node-mysql 설치

$ npm install --save node-mysql


https://github.com/mysqljs/mysql 참고


코드 예시


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
var mysql = require('mysql');
var conn = mysql.createConnection({
  host     : 'localhost',
  user     : 'root',
  password : '111111',
  database : 'o2'
});
conn.connect();
 
var sql = 'SELECT * FROM topic';
conn.query(sql, function(err, rows, fields){
  if(err){
    console.log(err);
  } else {
    for(var i=0; i<rows.length; i++){
      console.log(rows[i].title);
    }
  }
});
var sql = 'INSERT INTO topic (title, description, author) VALUES(?, ?, ?)';
var params = ['Supervisor''Watcher''graphittie'];
conn.query(sql, params, function(err, rows, fields){
  if(err){
    console.log(err);
  } else {
    console.log(rows.insertId);
  }
});
var sql = 'UPDATE topic SET title=?, author=? WHERE id=?';
var params = ['NPM''leezche'1];
conn.query(sql, params, function(err, rows, fields){
  if(err){
    console.log(err);
  } else {
    console.log(rows);
  }
});
 
 
var sql = 'DELETE FROM topic WHERE id=?';
var params = [1];
conn.query(sql, params, function(err, rows, fields){
  if(err){
    console.log(err);
  } else {
    console.log(rows);
  }
});
conn.end();
cs


- 21, 30 행 확인해보기..!!

- ? 는 치환자를 두고 치환자의 순서에 따라 파라미터를 실제 값을 배열로 생성한 다음 쿼리문의 두번째 인재 값으로 전달 가능 // 보안 관련 sql injection attack 을 막을 수 있음..!!