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//
데이터를 정리하기 위해 시작 하는 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')
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이 있으며 다음과 같이 사용합니다.