sitelink1 | https://blog.naver.com/pass4u/220027954372 |
---|---|
sitelink2 | |
sitelink3 | |
extra_vars4 | |
extra_vars5 | |
extra_vars6 |
users 테이블과 log 테이블에 각각의 데이터를 하나의 트렌젝션으로 묶어서 수행해주는 예제이다.
// insert with transaction
app.post('/userstx',function(req,res){
var user = {'userid':req.body.userid,
'name':req.body.name,
'address':req.body.address};
connection.beginTransaction(function(err) {
if (err) {
throw err;
}
connection.query('insert into users set ?', user, function (err, result) {
if (err) {
console.error(err);
connection.rollback(function () {
console.error('rollback error');
throw err;
});
}// if err
console.log('insert transaction log');
var log = {'userid': req.body.userid};
connection.query('insert into log set ?', log, function (err, result) {
if (err) {
console.error(err);
connection.rollback(function () {
console.error('rollback error');
throw err;
});
}// if err
connection.commit(function (err) {
if (err) {
console.error(err);
connection.rollback(function () {
console.error('rollback error');
throw err;
});
}// if err
res.send(200, 'success');
});// commit
});// insert into log
});// inset into users
}); // begin trnsaction
connection.release();
});
먼저 connection.begintransaction을 호출한 후에, transaction이 시작되면 쿼리를 수행하기 위해서, begintrasaction안쪽 부분에서 sql 문장을 수행한다.
insert into users SQL문장을 먼저 수행한후 다음 insert into log SQL 문장을 수행하기 위해서 insert into users Query의 call back에서 insert into log SQL 문장을 수행하였다.
그 다음으로 transaction commit 처리를 insert into logs 의 callback함수에서 connection.commit을 이용해서 수행하였다.
코드를 보면 알겠지만, transaction begin,insert 두개, commit을 순차 수행하기 위해서callback을 중첩 사용하였다. 코드도 복잡하고 {} 도 많다.
이렇게 node.js의 async callback 구조로 인하여, 코드의 복잡도가 증가하는 것을 보통 callback hell(지옥)이라고 하는데, 이를 해결하기 위한 모듈로Async 와 같은 모듈들이 있다.
댓글 0
번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
---|---|---|---|---|
13 | Node.js 에서 Bulk INSERT 를 하는 방법 (multi insert) | 황제낙엽 | 2021.02.02 | 969 |
12 | mysql, mysql2 모듈 버전 비교 | 황제낙엽 | 2021.01.31 | 333 |
11 |
ORM 툴 Sequelize
![]() | 황제낙엽 | 2021.01.27 | 80 |
10 |
[connection과 pool-05] pool 생성이 너무 많은 경우의 database에서의 에러 - Too many connections
![]() | 황제낙엽 | 2021.01.27 | 127 |
9 | [connection과 pool-03] mysql.createPool 과 connection.query | 황제낙엽 | 2021.01.27 | 593 |
8 | [connection과 pool-02] mysql.createPool 과 pool.query | 황제낙엽 | 2021.01.27 | 113 |
7 | [connection과 pool-01] mysql.createConnection 과 connection.query | 황제낙엽 | 2021.01.27 | 107 |
6 | [T아카데미/Node.js 프로그래밍/MySQL] createPool, getConnection 의 간단한 예제 (강의 예제) | 황제낙엽 | 2021.01.27 | 106 |
5 | 여러 개의 데이터 베이스 연결을 동시에 관리하는 PoolCluster | 황제낙엽 | 2021.01.16 | 2374 |
4 | connetion pooling 과 connection leak | 황제낙엽 | 2021.01.16 | 96 |
» | no pooling 상태에서 beginTransaction 콜백을 이용한 Transaction 처리 | 황제낙엽 | 2021.01.16 | 77 |
2 | mysql.escape()로 where 문 작성 | 황제낙엽 | 2021.01.16 | 100 |
1 | mysql basic (mysql 설치, 접속, 조회) | 황제낙엽 | 2021.01.12 | 165 |