2022. 2. 23. 21:54ㆍ카테고리 없음
오늘은 가장 기초 명령어중 마지막 시간인 CRUD의 U와 D 이다. U와 D는 의미그대로 UPDATE와 DELETE의 약자이다.
이 둘을 같이 설명하는 이유는 이 명령어들을 사용하는데 꼭 같이 사용해야할 필수 명령어가 하나 더 있기 때문이다.
먼저 두 명령어의 기본 사용법부터 알아보자.
UPDATE TABLE SET ( FIELD = 바꾸려는 값 ) WHERE ( 바꾸려는 DATA가 있는 곳을 특정할 조건)
DELETE FROM TABLE WHERE (Record 를 특정할 조건)
위 테이블은 오늘 실습에 사용될 예제 table 이고 이름은 score이다. 그러면 먼저 UPDATE부터 알아보도록 하자.
score table에서 math 값을 80으로 바꾸려고 하는데 조건을 주지 않으면 어느 학생(Record)의 수학 점수를 바꿔야 하는지 모를 것이다. 그렇기에 WHERE 을 이용해서 우리가 바꾸려는 학생을 특정해주어야 한다. 위에서는 id 3번인 학생의 math 점수를 바꾸기 위해 set math = 80을 줘서 우선 무슨 Field의 값을 어떻게 바꾸려고 하는지 입력해주고
where을 이용해서 3번 학생을 특징지을 수 있게 3번 학생의 조건을 전부 입력해 주었다. 여기서 where 은 타 언어처럼
if 같이 동작한다라고 생각하면되고 and도 마찬가지로 A이고 B일 때만 동작한다고 생각하면 된다. 여기서 주의할 점은 보통 값이 같다는 ' == ' 이라고 표현하지만 where 에서는 '=' 으로 표현한다는 점을 주의하자. (처음 배울 때 계속 틀린 점 중에 하나....)
위 그림처럼 확인할 수 있듯이 처음 score table 에서 3번 학생의 math 값이 70에서 80으로 바뀐 것을 확인할 수 있다.
다음으로는 delete를 사용해보자.
delete 명령어는 table 을 지정해주고 update때와 마찬가지로 지울 Record의 특징을 특정지어주면 된다. 위에서는 3번 학생의 Record 를 지우기 위해서 where 문에 3번 학생의 Field 값들을 입력해주었다.
위 그림과 다르게 id 3의 학생이 잘 지워진 것을 확인할 수 있다.
그런데 공부하면서 한 가지 의문이 들었던 점이 있다. 위와 같은 score table 같은 데이터일 때 중복인 id를 가진 학생이 없을 것이기 때문에 where id="학생번호" 만 줘도 특정지을 수 있지 않을까? 라는 생각을 했다. 우선 결론부터 말하자면 CLI에서는 아래와 같이 잘 동작한다.
하지만 WorkBench에서 하면 아래와 같은 오류가 발생한다.
왜 그런지 간단하게 해석을 해보면 "너는 safe update mode를 사용하고 있는데 KEY column 조건 없이 where 문을 이용해 table을 업데이트 하려고 하였다." 라고 한다. GUI 에서는 위와 같이 Record 를 특정지어줄 Field값을 전부 입력해주지 않으면 동작하지 않는다. GUI에서는 왜 이러한 안전장치를 걸어 두었을까? 쉽게 말하면 내가 예기치 못한 결과가 될 수 있기 때문이다. 간단히 예시를 들어보자.
내가 전학생이 와서 5번 id에 점수를 추가하려고 하였는데 실수로 id 를 4라고 입력하고 추가했다고 가정해보자.
문제 없이 id 가 4번으로 잘못 입력된 5번 학생의 정보가 잘 추가된 것을 확인할 수 있다. 만약 이때 진짜 4번 학생이 전학을 가서 학생 정보를 지우려고 할때 CLI에서 "delete from score where id = 4;" 를 수행하면 어떻게 될까?
나는 4번 학생을 지우려고 한 것이었는데 잘못 입력된 5번 학생의 정보까지 같이 지워져버렸다. 극단적인 예시를 들어서 설명했지만, 실제 이런 오류가 일어나지 않을 것이라고 단언할 수 없다. 따라서 GUI 환경에서는 이러한 오류를 사전에 방지하기 위해서 safe mode 로 동작하는 것이다.
물론 data를 잘 입력하는게 맞겠지만 이럴 경우를 대비해서 항상 save를 잘 해줘야한다. 게임에서도 항상 저장이 기본이듯이 DB에서도 항상 export 를 해서 백업을 해줘야 한다.
위 사진은 data 를 export 해서 백업을 해두는 것이다. 내 스키마 목록에서 백업해둘 스키마 혹은 그 안의 table 을 선택하고 경로를 지정 후 Start Export 를 하면 그 경로에 백업본이 생긴다. 예기치 못한 상황을 대비해 항상 저장하고 백업해두는 습관을 들이자.
만약 예기치 못한 상황이 일어났으면 당황하지 말고 백업본 파일을 이용해서 다시 데이터를 복구하자. Import 에 들어가서 백업본이 있는 경로를 지정 후 복구할 스키마나 table을 선택하고 import 를 해주면 data 가 백업 당시로 돌아가게 된다.
이렇게 오늘까지해서 가장 기초적인 명령어 4가지를 알아보았다. 다음부터는 이 외에 추가적인 명령어 또한 공부해보려고 한다.
오늘의 교훈 : 항상 SAVE 하기.