[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part5: INSERT,UPDATE,DELETE

참치와돌고래·2022년 11월 10일
0
post-custom-banner

어제 작성했지만 글이 모두 날라가버려 다시 작성했다...

INSERT

오늘 사용할 데이터는 dbo.salaries이다.

각 열별로 년도, 팀ID,리그ID,플레이어ID,연봉으로 되어있는 구조이다.

지금까지는 기존 데이터베이스를 조회하였으니, 이번엔 우리가 새로 데이터베이스를 넣어보자. 그럴때 쓰는 것이 INSERT이다.

-- INSERT INTO (테이블명) VALUES (테이블 열의 값들)<-순서를 맞춰줘야 한다. 
INSERT INTO salaries
VALUES(2021, 'KOR','NL','rookiss',900000);

해당 쿼리를 작성하고 다시 조회하면

다음과 같은 행이 만들어질 것이다.

주석에서도 아시다시피, 해당 INSERT문은 반드시 테이블 열의 순서를 맞추어 넣어야한다. (리그 ID 열에 팀 ID를, 팀 ID 열에 리그 ID를 넣으면 의도한 결과가 안나올 것이다.) 또한 하나라도 테이블 열을 빼먹으면 안된다.

--다음과 같은 쿼리는 오류를 낼 것이다.(연봉 값이 없음.)
INSERT INTO salaries
VALUES(2021, 'KOR','NL','rookiss2');

테이블 열의 순서를 바꾸고 싶거나, 일부만 넣고 싶다면 다음 INSERT문을 참고하자.

--INSERT INTO [테이블명](넣고자 하는 열,) VALUES (값들)
INSERT INTO salaries(yearID,teamID,playerID,lgID,salary)
VALUES(2020, 'KOR','rookiss2','NL',80000);
--1)playerID와 lgID의 순서가 바뀌었음을 알 수 있다.
INSERT INTO salaries(yearID,teamID,playerID,lgID)
VALUES(2020, 'KOR','rookiss4','NL');
--2)salary 열이 없는 모습을 알 수 있다.


정상적인 결과가 나온 듯 싶지만, 2)에서 salary열에 NULL값이 들어갔다. 이를 확인하기 위해 dbo.salaries를 우클릭하고 디자인으로 옮겨가자.

열쇠 모양을 가진 열과 NULL값 허용에 salary가 체크된 걸 확인할 수 있다.
salary 열은 NULL값을 허용하기 때문에, 2)에서 아무런 값도 안넣었을 경우 Default 값인 NULL이 들어간 것이다. 만약 이미지엔 나오지 않았지만 하단 열 속성에 기본값을 지정하면 그 기본값이 기본으로 들어갈 것이다.

열쇠 모양은 Primary Key를 나타낸다. Primary Key란 한 행이 고유하다는 것을 식별하게 해주는 키를 의미한다. 현 데이터베이스에선 Primary Key가 여러개인 Composite Key로 구성되어 있다. 한 마디로, 저 4개의 열 속성으로 인해 하나의 행이 고유해진다는 뜻이다. 따라서 우리가 1)을 한번 넣고 또 다시 1) 쿼리문을 실행하려면 안될 것이다. 이미 고유한 행이 들어가 있기 때문이다.

다른 말로 이야기하면 1)에서 4개의 Primary Key 열의 값을 하나만 바꾸면 정상적으로 삽입이 된다는 이야기이다.(그것 또한 고유한 행이 되므로)

UPDATE

기존 데이터베이스 행을 변경하고 싶다면 UPDATE 문을 이용한다.
우리가 지금까지 삽입한 행들은 모두 팀ID가 KOR인 것이 특징이다.이 행들에게 연봉을 2배(대박!), 년
도를 1씩 추가하려면 다음과 같이 작성해주면 된다.

--팀ID가 KOR인 행에게  연봉 2배, 년도를 1씩 증가시키자.
UPDATE salaries
SET salary=salary*2 ,yearID=yearID+1
where teamID='KOR'

주의할 점은, UPDATE 절에서 WHERE문이 없다면 그냥 모든 행이 SET에 적힌대로 적용된다는 점이다.
해당 쿼리에서 where 절을 빼먹는다면 모든 행이 연봉이 2배, 년도가 1씩 증가가 되므로 주의하자.

DELETE

어떤 데이터베이스 행을 삭제하고 싶다면 DELETE 문을 이용한다.
이제 실습을 마칠 시간이 되었으니, 우리가 지금까지 생성한 행이 모두 년도가 2020년 이상인걸 이용해 해당 조건에 해당되는 행들을 삭제해보자.

--년도가 2020년 이상인 행들을 삭제합니다.
DELETE FROM salaries
WHERE yearID>=2020

UPDATE문과 마찬가지로, WHERE절이 없다면 모든 행들이 싸그리 삭제되므로, 주의에 주의를 거듭하도록 하자.

post-custom-banner

0개의 댓글