BE
[혼자공부하는SQL] 8강
03-3. 데이터 변경을 위한 SQL문
0. 시작하기 전에
데이터베이스와 테이블을 만든 후에는 데이터를 변경하는, 즉 입력/수정/삭제하는 기능이 필요하다.
입력 : INSERT
수정 : UPDATE
삭제 : DELETE
1. 데이터 입력 : INSERT
1) INSERT 문의 기본 문법
INSERT INTO 테이블 [(열1, 열2, ...] VALUES (값1, 값2, ...)테이블 이름 다음에 나오는 열은 생략이 가능하다.
열 이름을 생략할 경우에 VALUES 다음에 나오는 값들의 순서 및 개수는 테이블을 정의할 때의 열 순서 및 개수와 동일해야 한다.
USE market_db;
CREATE TABLE hongong1 (toy_id INT, toy_name CHAR(4), age INT);
-- 일반적인 입력 (열을 생략)
INSERT INTO hongong1 VALUES (1, '우디', 25);
-- 나이를 제외한 값만 입력
INSERT INTO hongong1 (toy_id, toy_name) VALUES (2, '버즈');
-- 열 순서를 다르게 입력 (열 순서와 값 순서가 같아야 한다)
INSERT INTO hongong1(toy_name, age, toy_id) VALUES ('제시', 20, 3);2) AUTO_INCREMENT
-- AUTO_INCREMENT를 기본키로 지정한 예시
CREATE TABLE hongong2(
toy_id INT AUTO_INCREMENT PRIMARY KEY,
toy_name CHAR(4),
age INT
)
-- 세 개의 행 입력
INSERT INTO hongong2 VALUES (NULL, '보핍', 25);
INSERT INTO hongong2 VALUES (NULL, '슬링키', 22);
INSERT INTO hongong2 VALUES (NULL, '렉스', 21);번호가 크게 의미 있는 것은 아니고, 자동 생성만 된다고 하면 AUTO_INCREMENT를 사용한다.
Ex. 물품 구매할 때 생기는 주문 번호
3) LAST_INSERT_ID();
어디까지 입력이 되었는지 (즉, 생성된 AUTO_INCREMENT의 마지막 번호를 확인한다.)
SELECT LAST_INSERT_ID();
4) ALTER TABLE
AUTO_INCREMENT의 시작 번호를 다시 지정한다.
ALTER TABLE hongong2 AUTO_INCREMENT = 100;
INSERT INTO hongong2 VALUES (NULL, '재남', 32);결과

5) AUTO_INCREMENT의 증가하는 수 지정
테이블 생성 후에 ‘SET @@auto_increment_increment =
원하는값'를 지정
CREATE TABLE hongong3(
toy_id INT AUTO_INCREMENT PRIMARY KEY,
toy_name CHAR(4),
age INT
)
ALTER TABLE hongong3 AUTO_INCREMENT = 1000;
SET @@auto_increment_increment = 3;
INSERT INTO hongong3 VALUES (NULL, '토마스', 20);
INSERT INTO hongong3 VALUES (NULL, '제임스', 23);
INSERT INTO hongong3 VALUES (NULL, '고든', 25);결과

6) 여러 줄을 한 줄로 작성
-- 여러 줄 입력
INSERT INTO 테이블_이름 VALUES (값1, 값2, ...);
INSERT INTO 테이블_이름 VALUES (값3, 값4, ...);
INSERT INTO 테이블_이름 VALUES (값5, 값6, ...);
-- 한 줄 입력
INSERT INTO 테이블_이름 VALUES (값1, 값2, ...), (값3, 값4, ...), (값5, 값6, ...);7) 다른 테이블의 데이터를 한 번에 입력하는 INSERT INTO ~ SELECT
많은 양의 데이터를 지금까지 했던 방식으로 직접 타이핑해서 입력하려면 오랜 시간이 걸릴 것이다.
다른 테이블에 이미 데이터가 입력되어 있다면, INSERT INTO ~ SELECT 구문을 사용해 해당 테이블의 데이터를 가져와서 한 번에 입력할 수 있다.
(1) 형식
INSERT INTO 테이블_이름 (열_이름1, 열_이름2, ...)
SELECT 문;(2) 예시
-- world DB의 city 테이블의 전체 행 개수 검색
SELECT COUNT(*) FROM world.city;
-- world DB의 city 테이블의 열 정보 검색 -> DESC 테이블명;
DESC world.city;
-- world DB의 city 테이블의 상위 다섯개 검색
SELECT * FROM world.city LIMIT 5;
-- 나의 DB에 정보를 복사하기 위해 테이블 생성
CREATE TABLE city_popul (city_name CHAR(35), population INT);
-- SELECT한 검색을 INSERT하기
INSERT INTO city_popul
SELECT Name, Population FROM world.city;2. 데이터 수정 : UPDATE
1) UPDATE문의 기본 문법
(1) UPDATE는 기존에 입력되어 있는 값을 수정하는 명령이다.
UPDATE 테이블_이름
SET 열1 = 값1, 열2 = 값2, ...
WHERE 조건;(2) 예시
-- 영문 Seoul을 한국 서울로 변경하는 구문
UPDATE city_popul
SET city_name = '서울'
WHERE city_name = 'Seoul';
SELECT * FROm city_popul WHERE city_name = '서울';
-- 열을 여러 개 수정할 수도 있다.
UPDATE city_popul
SET city_name = '뉴욕', population = 0
WHERE city_name = 'New York';
SELECT * FROm city_popul WHERE city_name = '뉴욕';
-- 인구를 만 단위로 바꾸고 싶을 때 (WHERE 절 없이 사용)
UPDATE city_popul
SET population = population / 10000;
SELECT * FROM city_popul LIMIT 5;(3) 주의해야 할 점
WHERE 절을 빼게 되면, 모든 행의 값이 다 수정이 된다.
2) MySQL Workbench에서 UPDATE가 안 되는 경우

오류 코드
23:22:05
UPDATE city_popul SET city_name = 'Seoul' WHERE city_name = '서울'
Error Code: 1175. You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column. To disable safe mode, toggle the option in Preferences -> SQL Editor and reconnect.
0.0010 sec
Setting(Prefrences)에서 SQL Editor을 누른 뒤에 가장 맨 아래에 체크되어 있는 ‘Safe Updates’의 체크박스를 해제하고, 프로그램을 종료하고 재시작한다.
3. 데이터 삭제 : DELETE
1) DELETE문의 기본 문법
DELETE는 행 데이터를 삭제하는 명령이다.
(1) 형태
DELETE FROM 테이블_이름 WHERE 조건;(2) 예시
-- city_name이 New로 시작하는 행의 (전체)를 삭제하고 싶은 경우
DELETE FROm city_popul
WHERE city_name LIKE 'New%';
-- city_name이 New로 시작하는 행의 (다섯 개만)를 삭제하고 싶은 경우
DELETE FROm city_popul
WHERE city_name LIKE 'New%';
LIMIT 5;