update 테이블 set 컬럼1 = 값, 컬럼2 = 값 where 찾을 값
테이블 수정 코드 update에서 where 필수
특정 행을 지정하지 않으면 그 컬럼 값이 싹 바뀜, 근데 mysql이 막아놓고, where 절 다음에 나오는 키 값으로만 하도록 초기 설정되어있음.
단 진짜 다 바꿔야 할 때에는 edit > preference > sql editor > safe update uncheked시, 변경 가능
데이터 삭제코드 delete from 테이블 where 조건
delete from emp_test; #테이블 내 전체 데이터 삭제
drop table emp_test; #테이블 자체를 완전 삭제
기본적으로 MySQL은 자동 커밋 모드가 활성화된 상태로 실행됨
현재 오토 커밋 상태를 확인하는 코드 (참고)
select @@autocommit;
결과값이 1이면 활성화, 0이면 비활성화
오토 커밋은 Query > Auto-Commit Transactions 에서 설정 가능하고
코드로는 set autocommit = 0; 혹은 set autocommit = 1;로 바꿀 수 있다.
그럼 커밋은 왜 하는 걸까??
하나의 트랜잭션이 종료가 되지 않으면 그 다음 행위는 인식을 하지 않는다.
(참고)
오토 커밋을 0으로 비활성화해둔 상태에서 커밋을 해본다.
emp_test를 복사해서 emp_tran1과 emp_tran2를 만드는 중에 커밋을 넣었다.
create table emp_tran1 as select * from emp_test;
create table emp_tran2 as select * from emp_test;
commit;
delete from emp_tran1;
rollback;
select * from emp_tran1;
이때, rollback(되돌리기) 전에 commit을 먼저 했으니 rollback은 소용이 없다
emp_tran1을 살릴 방법이 없게 되는 것이다..!
금융 업계에서는 오토커밋을 꺼놓고 그때 그때 커밋하는 경향이 높고(데이터가 사라지면 안되니)
데이터를 조회하는 역할정도만 하는 코드인 경우 오토커밋을 켜놓고 편하게 진행한다고 한다.
그러니 커밋을 할 때의 상황판단이 중요하겠다
만들어진 DB를 보고 그대로 따라하는 것을 연습했다.
create database naverDB;
create table member
(아이디 char(8) not null primary key,
이름 varchar(10) not null,
인원 tinyint not null,
주소 char(2) not null,
국번 char(3) null,
전화번호 char(8) null,
평균키 tinyint UNSIGNED null,
데뷔일자 DATE null
);
create table buy
(순번 int AUTO_INCREMENT not null primary key,
아이디 char(8) not null,
물품명 char(6) not null,
분류 char(4) null,
단가 int UNSIGNED not null,
수량 smallint UNSIGNED not null,
FOREIGN KEY(아이디) REFERENCES member(아이디)
);
여기서 오늘은 외래키(Foreign KEY) 에 대해서 배웠는데,
member, buy 테이블에서 buy의 아이디 컬럼을 FK로 만들었다.
buy의 아이디 컬럼은 member를 참고한다는 뜻인데,
join할 때 원래 겹치는 정보가 있으면 합쳐진다.
그런데 굳이 왜 FK 를 사용할까?
바로 '참조 무결성' 때문.
데이터가 외부에서 buy로 들어왔을 때 MEMBER의 아이디에 해당하면 정보를 받아들이고,
아이디에 없다면 받아들이지 않는다.
쿼리 안에 또 다른 쿼리를 이용해서 원하는 데이터를 조회하는 것이다.
select 이름, 평균키 from member
where 평균키 > (select 평균키 from member where 이름 = '에이핑크');
더 복잡한 방법도 있지만 이정도 수준에서 끝내주셨다고 하니 나중에 찾아봐야겠다.