웹 프로그래밍/SQL

데이터베이스 설정할 때 중복 체크하기 위해서 if exists 문구 넣어주기

mcdn 2021. 9. 24. 15:20
반응형
var mysql = require('mysql');

var db = mysql.createConnection({
	host:'localhost', 
	user:'root', 
	password:'', 
	// database: 'opentutorials'
	// database : 'express_db'
  });
  
db.connect(function (err) {
	if (err) throw err;
	console.log("Connected");
	// Error : ER_DB_CREATE_EXISTS
	db.query(`CREATE DATABASE express_db`, function (err, result) {
		if (err) throw err;
		console.log('database created');
	});
	db.query(`use express_db`, function (err, result) {
		if (err) throw err;
		console.log('use database express_db');
	})
	
	var sql = `CREATE TABLE users (id INT NOT NULL PRIMARY KEY AUTO_INCREMENT, 
		name VARCHAR(255) NOT NULL, 
		email VARCHAR(255) NOT NULL)`;
	db.query(sql, function (err, result) {
		if (err) throw err;
		console.log('table created');
	});

	sql = `INSERT INTO users (id, name, email)
	VALUES ('90', 'William', 'johnn@email.com')`;
	db.query(sql, function (err, result) {
		if (err) throw err;
		console.log('inserted data');
	});

	sql = `select * from users`;
	db.query(sql, function (err, result) {
		if (err) throw err;
		console.log(result);
	});
});


module.exports = db;
// exports db....

 

[nodemon] restarting due to changes...
[nodemon] starting `node main.js`
[nodemon] restarting due to changes...
[nodemon] starting `node main.js`
Connected
database created
use database express_db
table created
inserted data
[ RowDataPacket { id: 90, name: 'William', email: 'johnn@email.com' } ]

그리고 나서 

 

 

중복 에러를 모두 없애기 위해서 처리 해줌 

if exists 붙이기 

 

var mysql = require('mysql');

var db = mysql.createConnection({
	host:'localhost', 
	user:'root', 
	password:'', 
	// database: 'opentutorials'
	// database : 'express_db'
  });
  
db.connect(function (err) {
	if (err) throw err;
	console.log("Connected");
	// Error : ER_DB_CREATE_EXISTS
	db.query(`CREATE DATABASE IF NOT EXISTS express_db`, function (err, result) {
		if (err) throw err;
		console.log('database created');
	});
	db.query(`use express_db`, function (err, result) {
		if (err) throw err;
		console.log('use database express_db');
	})
	var sql = `DROP TABLE IF EXISTS users`;
	db.query(sql, function (err, result) {
		if (err) throw err;
		console.log('table droped');
	});
	
	sql = `CREATE TABLE IF NOT EXISTS users (id INT NOT NULL PRIMARY KEY AUTO_INCREMENT, 
		name VARCHAR(255) NOT NULL, 
		email VARCHAR(255) NOT NULL,
		UNIQUE INDEX (name))`;
	db.query(sql, function (err, result) {
		if (err) throw err;
		console.log('table created');
	});

	sql = `REPLACE INTO users (id, name, email)
	VALUES (NULL, 'William', 'william@email.com')`;
	db.query(sql, function (err, result) {
		if (err) throw err;
		console.log('inserted data');
	});


	sql = `REPLACE INTO users (id, name, email)
	VALUES (NULL, 'JOHN', 'johnn@email.com')`;
	db.query(sql, function (err, result) {
		if (err) throw err;
		console.log('inserted data');
	});

	sql = `REPLACE INTO users (id, name, email)
	VALUES (NULL, 'JOHN', 'johnn@email.com')`;
	db.query(sql, function (err, result) {
		if (err) throw err;
		console.log('inserted data');
	});

	sql = `select * from users`;
	db.query(sql, function (err, result) {
		if (err) throw err;
		console.log(result);
	});
});


module.exports = db;
// exports db....

data 들어갈 때는 replace into 

그렇게 되면 id는 바뀐다 대신 새 내용으로는 업데이트되고 

 

[nodemon] restarting due to changes...
[nodemon] starting `node main.js`
Connected
database created
use database express_db
table droped
table created
inserted data
inserted data
inserted data
[
  RowDataPacket { id: 1, name: 'William', email: 'william@email.com' },
  RowDataPacket { id: 3, name: 'JOHN', email: 'johnn@email.com' }
]

 

unique index는 필요하다 왜냐하면 id로는 구별 못하기 때문 

그래서 john이 겹치면 id = 2 -> id = 3으로 바뀐 새 데이터가 들어간다 

 

 

http://jason-heo.github.io/mysql/2014/03/05/manage-dup-key2.html

 

MySQL 중복 레코드 관리 방법 (INSERT 시 중복 키 관리 방법 (INSERT IGNORE, REPLACE INTO, ON DUPLICATE UPDATE))

Test에 사용된 MySQL 버전 목차 1. 개요 MySQL에는 아래 3가지 방법을 이용하여 중복 레코드를 관리할 수 있다. INSERT IGNORE ... REPLACE INTO ... INSERT INTO ... ON DUPLICATE UPDATE 각 방법의 특징을 요약하면 다음

jason-heo.github.io

참고한 블로그 

 

 

 

 

반응형