#mysql

1
CREATE TABLE TB_NEW SELECT * FROM TB_OLD

위 명령어는 TB_OLD의 값과 테이블을 복사하지만 AUTO_INCREMENT가 복사되지 않고, 간혹 INDEX가 누락되는 경우가 있다.

COPY STRUCTURE

1
CREATE TABLE TB_NEW LIKE TB_OLD

이 명령어를 사용하면 데이터는 복사하지 않지만, AUTO_INCREMENT, INDEX 등의 형식을 복사할 수 있습니다.

COPY DATA

1
INSERT INTO TB_NEW SELECT * FROM TB_OLD

COPY COLUMN DATA

1
INSERT INTO TB_NEW(COL_NM) SELECT COL_NAME FROM TB_OLD

BASIC STATEMENT

CREATE

1
CREATE INDEX INDEX_NM ON TB_NAME(COL_NAME)

READ

1
SHOW INDEX FROM TB_NAME

DELETE

1
DROP INDEX INDEX_NM ON TB_NAME

BASIC STATEMENT

CHANGE COLUMN DATA TYPE

1
ALTER TABLE TB_NAME CHANGE COL1 COL2 INT

DELETE COLUMN

1
ALTER TABLE TB_NAME DROP COL_NAME

RESET AUTO_INCREMENT

1
ALTER TABLE TB_NAME AUTO_INCREMENT=0

trigger의 생성과 삭제

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
DROP TRIGGER IF EXISTS `sport`.`tr_update_gameresult`;

CREATE TRIGGER `sport`.`tr_update_gameresult` BEFORE UPDATE ON sport.tb_game
FOR EACH ROW
BEGIN
-- 게임이 종료 되었는지 판단
IF NEW.COMP_CODE = '3' THEN
SET @exception = (select EXPECATE from tb_reg_game where GAME_NO = NEW.GAME_NO);

IF @exception = NEW.VIC_CODE THEN
update tb_reg_game set `HIT_RESULT` = '1' where GAME_NO = NEW.GAME_NO;
ELSE
update tb_reg_game set `HIT_RESULT` = '2' where GAME_NO = NEW.GAME_NO;
END IF;

END IF;
END;

새로 들어온 데이터 선택자 new와 기존에 있던 데이터 선택자 OLD

새로 들어온 데이터를 new로 지칭하여 attribute를 뽑아서 사용할 수 있다.

1
update tb_group set MEMBER_NUM=@memberNum where GROUP_ID = new.GM_GROUP_ID;

특정 데이터 생성 혹은 삭제시에 상위 테이블의 전체 개수 인덱스 변경하기

1
2
3
4
5
6
7
8
9
10
11
create trigger trx_updates_atrig
after insert on trx_updates for each row begin

<!-- 트리거 동작에 필요한 변수 선언 -->
DECLARE memverNum INT;
<!-- 변수에 값 넣는 sql -->
set @memberNum = ( select count(*) from tb_group_member where GM_GROUP_ID=new.GM_GROUP_ID );

<!-- 인덱스 변경 SQL -->
update tb_group set MEMBER_NUM=@memberNum where GROUP_ID = new.GM_GROUP_ID;
end//

AUTO_INCREMENT의 시작값 변경해 주기

데이터를 정리하기 위해 시작 하는 primary 키의 AUTO_INCREMENT 값을 변경해 주어야 할 경우가 있다.
다음 명령어를 통해 원하는 값부터 다시 AUTO_INCREMENT가 시작되도록 할 수 있다.

1
ALTER TABLE [테이블명] AUTO_INCREMENT=[시작할려는 순서]

ON DUPLICATE KEY를 이용한 중복키 관리

여러개의 데이터를 한번에 입력할 때 기존에 있던 데이터는 키값은 유지하고 내용만 변경해야 할 경우가 있다.
이 경우는 on duplicate key 를 활용하면 기존에 있던 데이터를 유지하면서 변경된 내용만 업데이트를 시켜줄 수 있다.

example

1
2
3
4
5
6
7
8
9
10
11
INSERT INTO mytable (id, a, b, c)
VALUES (1, 'a1', 'b1', 'c1'),
(2, 'a2', 'b2', 'c2'),
(3, 'a3', 'b3', 'c3'),
(4, 'a4', 'b4', 'c4'),
(5, 'a5', 'b5', 'c5'),
(6, 'a6', 'b6', 'c6')
ON DUPLICATE KEY UPDATE id=VALUES(id),
a=VALUES(a),
b=VALUES(b),
c=VALUES(c);

INSERT IGNOE를 이용한 중복키 단순히 무시하기

여러개의 데이터를 한번에 입력할 때 기존에 있던 정보는 아예 입력하지 않는 것이 필요한 경우가 있다.
이 경우에는 다음과 같이 insert ignore 문을 활용하여 중복된 키를 가지면 입력을 시키지 않도록 할 수 있다.

아래 예제는 unique 키가 두개의 키값에 걸려있는 경우 첫번째 id 값이 입력되지 않아도 insert 문이 동작하기에 다음과 같은 예제를 사용한다.
아래의 경우 가령 james라는 키값과 barkely라는 키값에 unique 키가 걸려있고 해당 데이터가 이미 존재하는 경우 아래의 insert 문은 그냥 무시된다.

example

1
2
ALTER TABLE person ADD UNIQUE INDEX (first_name, last_name)
INSERT IGNORE INTO person VALUES (NULL, 15, 'James', 'Barkely')

array.forEach 함수의 활용

forEach()는 오름차순으로 배열에 있는 각 요소에 대해 한 번씩 callback을 실행한다.
삭제 또는 비초기화된 인덱스 속성에 대해서는 호출되지 않는다.

callback은 다음 세 인수와 함께 호줄된다.
요소 값, 요소 인덱스, 순회될 배열

받아온 rows를 forEach 함수를 사용하여 정체

정제하는 함수

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
function(err,rows){
var result = [];
var indexObject = {};
if(err){
console.log(err)
}else{
rows.forEach(function(row){

<!-- 해당 행의 id가 indexObject의 키값에 없을때 실행 -->
if(!(row.id in index)){
index[row.id]={
id: row.id,
name: row.name
};

<!-- 반환값에 추가 -->
result.push(index[row.id]);
}
해당 행이 인덱스에 있건 없건 간에 해당 인덱스의 내역을 체워줌
index[row.id].histories.push({
historyId:row.historyId,
historyName:row.historyName
});
})
console.log(result);
}
}

Mysql 시작하기

개요

ubuntu 서버에 mysql 서버를 설치하고 환경을 설정하고 실제 운용까지 필요한 모든 내용을 담았다.

설치

window

아래와 같이 mysql-server를 설치해 준다.
주의 할 점은 mysql 서버에 접근하기 위해서는 3306포트가 열려있어야 하는데 만약 서버 컴퓨터를 cafe24나 aws를 통해 만드는 경우 반드시 인바운드 규칙에서 3306포트를 추가시켜 주어야 한다.

1
2
3
4
5
6
sudo apt-get update
sudo apt-get install mysql-server // 이 과정에서 아이디랑 비밀번호를 물어본다.
mysql_secure_installation //mysql 보안 설정을 세팅한다.
systemctl status mysql.service //mysql이 실행되었는지 확인한다.
sudo systemctl start mysql //mysql이 실행되고 있지 않다면 실행한다.
mysqladmin -p -u root version // mysql을 관리할 수 있다 이경우 버전을 확인하는 명령어이다.

macOS

1
2
3
4
brew install mysql // 서버 설치하기
mysql.server start // 실행하기
mysql -u root // 로그인하기
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password' // 비밀번호 재설정하기

환경설정

window

먼저 다음 명령어를 통해 mysql 에 접속한다.

1
mysql -u 사용자_이름 -p 비밀번호

mysql에 접속한 뒤 해야 할 첫번째는 바로 외부 접속이 가능한 계정을 만드는 것이다.
본 계정을 통해 다른 컴퓨터에서 workbench 등의 프로그램을 통해 연결하여 db를 세팅하기 용이하다.
다음 명령어를 통해 새로운 mysql 계정을 비밀번호와 함께 만들어 준다.

1
create user [user명]@'%' identified by '패스워드';

위 계정으로 다른 컴퓨터에서 접근을 하면 권한이 없다는 말이 나타날 것이다.
이는 바로 mysql server의 초기 세팅이 내부 ip 에서만 접근 가능하도록 세팅되어 있기 때문인데
아래와 같은 방법으로 외부에서도 접근이 가능하게 바꾸어 준다.

먼저 mysql의 mysqld.cnf라는 설정파일을 vi 에디터로 열어준다.

1
2
Cd /etc/mysql/mysql.conf.d
sudo vi mysqld.cnf

bind-address =127.0.0.1 부분을 주석처리 후 아래의 명령어를 통해 mysql 서버를 재시작 시켜준다.

1
sudo /etc/init.d/mysql restart

위 설정을 완료하였다면 생성한 계정이 데이터베이스에 대한 모든 권한을 가지도록 권한을 설정해 준다.
아래는 권한을 설정하는 예제이다.

1
grant all privileges on exampledb.* to admin@'%' identified by 'password' with grant option;

MYSQLADMIN 을 사용한 MYSQL 조작

MYSQL 콘솔이 아닌 그냥 컴퓨터 커맨드 라인에서 MSYQL 콘솔에 접근하기 위한 훌륭한 명령어인 mysqladmin이 있으며 다음과 같이 사용합니다.

1
mysqladmin -u _user_name_ -p _password_ CREATE DB_NAME

명령어 사용하기

1
mysqladmin -u _user_name_ -p _password_ -e "_statement_"


Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×