Mysql&DBeaver

DBeaver)수정 삭제는 UPDATE / DELETE (WHERE 안쓰면 퇴사각)

연습노트 2024. 9. 7. 09:43

오늘은 수정, 삭제문법 빠르게 배우고 집에 가도록 합시다. 

 

user_sales.csv
0.00MB

 

UPDATE / SET

 

특정 행의 데이터를 수정하고 싶으면 UPDATE 문법을 씁시다. 

 

UPDATE 테이블명 
SET 컬럼1 = 값, 컬럼2 = 값
WHERE 조건식  

SET 뒤엔 컬럼마다 어떤 값으로 수정할 것인지 선택하면 됩니다. 

WHERE 뒤엔 어떤 행을 업데이트할 것인지 조건식을 넣어줍니다.

물론 믿을 수 없으니 테스트해봐야합니다. 

 

 

 

 

 

▲ 저번 시간에 썼던 product 테이블을 가져와서

id가 1인 데이터의 가격을 5000, 상품명을 단무지로 수정해봅시다. 

 

 

UPDATE product
SET 가격 = 5000, 상품명 = '단무지'
WHERE id = 1 

이러면 수정되는군요.  

문자자료는 언제나 따옴표 칩시다. 

 

 

 

 

 

 

UPDATE product
SET 가격 = 가격 + 100, 상품명 = '단무지'
WHERE id = 1 

값을 완전히 대체해버리는게 아니라 기존 값에 덧셈 곱셈 나눗셈도 할 수 있습니다. 

그래서 SET 뒤에 나오는 = 기호는

같다는 뜻이 아니라 "오른쪽 값을 왼쪽에 넣어주세요~" 라는 뜻과 더 비슷합니다. 

 

 

 

 

 

 

삭제하려면 DELETE FROM

 

특정 row를 아예 삭제하고 싶으면 DELETE 사용합니다. 

 

DELETE FROM 테이블명 WHERE 조건식 

하면 됩니다. 그럼 조건식에 맞는 모든 행을 삭제해줍니다. 

아까 product 테이블에 있는 마지막 행을 삭제하려면 코드 어떻게 짜야할까요? 

알아서 해보고 눌러보쇼

 

DELETE FROM product WHERE id = 4 

이러면 삭제됩니다. 

 

 

DELETE FROM product ORDER BY id DESC LIMIT 1 

참고로 이래도 마지막 행이 삭제됩니다.

limit은 위에서 X개만 선택하라는 명령어입니다. 

 

[collapse]

 

(참고) 

1. 삭제 후 나중에 복구하거나 그러고 싶은 경우들이 좀 있어서 

삭제한 척만 해주거나, 삭제보다는 특정 컬럼만 값을 비우는 식으로 하는 경우도 있습니다. 

개발하는 사람 마음임 

2. 다른 테이블에서 Foreign key로 사용중인 데이터는 삭제가 안됩니다. 

Foreign key 사용중인 행 부터 찾아서 삭제해야할 수도 있습니다. 

3. UPDATE/DELETE 할 때 WHERE 조건식 생략하면 모든 행이 수정되는 불상사가 일어납니다. 

WHERE 빼먹으면 빠르게 퇴사하면 됩니다. 

 

 

 

 

 

 

 

응용 : JOIN & UPDATE

 

JOIN한 테이블에도 수정명령을 내릴 수 있습니다. 

 

UPDATE A INNER JOIN B 
  ON 쪼인조건

SET 수정할내용
WHERE 조건식 

MySQL은 UPDATE 뒤에 JOIN 해놓은 테이블을 입력할 수도 있습니다. 

그러면 이제 SET, WHERE 문법으로 JOIN된 테이블의 모든 컬럼을 마음대로 수정가능합니다. 

 

 

 

 

 

 

응용 : JOIN & DELETE

 

JOIN한 테이블에도 삭제명령을 내릴 수 있습니다. 

 

DELETE A 
FROM A INNER JOIN B 
  ON 쪼인조건

WHERE 조건식 

MySQL은 DELETE FROM 뒤에 JOIN 해놓은 테이블을 입력할 수도 있습니다. 

그럼 JOIN한 테이블에서 WHERE 조건식에 해당하는 행을 찾아서 지워줍니다.

근데 A 테이블과 B 테이블 중 어떤 테이블의 행을 지울지는 DELETE 우측에 적어줘야합니다.

 

DELETE A 이러면 조건식에 맞는 행이 A 테이블에서 삭제됩니다.

DELETE B 이러면 조건식에 맞는 행이 B 테이블에서 삭제됩니다.

DELETE A, B 이러면 조건식에 맞는 행이 A, B 테이블에서 전부 삭제됩니다.

 

 

 

 

 

오늘의 숙제 : 

 

Q1. 테이블 아무거나 2개 JOIN 후에 아무 행이나 UPDATE 해봅시다.

이런건 답 따라치는게 더 어렵기 때문에 직접 해봅시다.

 

Q2. 테이블 아무거나 2개 JOIN 후에 아무 행이나 DELETE 해봅시다.

이런건 답 따라치는게 더 어렵기 때문에 직접 해봅시다.

 

 

 

Q3. 강의하단 user_sales.csv 파일을 DBeaver로 가져옵시다. 

잘 보면 이메일란이 공백인 경우가 있습니다. 

이메일이 공백인 곳에 test@test.com 을 일괄적으로 기입하려면 어떻게할까요?

단, first_name이 Solly인 사람은 admin@test.com 으로 기입해야합니다.

 

뭘보쇼

 

UPDATE user_sales SET email = IF(first_name = Solly, 'admin@test.com', 'test@test.com') WHERE email = '' 

NULL이 아니라 공백이라면 '' 이거 쓰면 됩니다. 

NULL이라면 IS NULL쓰면 됩니다. 

 

[collapse]

 

 

 

Q4. 방금 테이블에서 sales 부분이 NULL인 행을 일괄 삭제하려면 어떻게할까요?

 

뭘보쇼

 

DELETE FROM user_sales WHERE sales IS NULL