[혼공] 데이터 변경을 위한 SQL 문

data_hamster·2023년 5월 7일
0

학습주제

INSERT
UPDATE
DELETE

학습내용

INSERT
열 이름을 생략할 경우 VALUES 다음에 나오는 값들의 순서 및 개수는 테이블을 정의할 때의 열 순수 및 개수와 동일해야 함.

USE market_db;
CREATE TABLE hongong1 (toy_id INT, toy_name CHAR(4), age INT);
INSERT INTO hongong1 VALUES (1, '우디', 25);

만일 여기서 age를 입력하고 싶지 않다면 INSERT INTO 테이블 뒤에 입력할 열 이름을 써줘야 함. 이때 생략된 age에는 NULL 값 들어감

INSERT INTO hongong1 (toy_id, toy_name) VALUES (2, '버즈');

만일 입력하고 싶은 열의 순서를 바꾸고 싶을 때는 INTO 뒤 열과 VALUES 뒤 열이 일치하면 됨.

INSERT INTO hongong1 (toy_name, age, toy_id) VALUES ('제시', 20, 3);

AUTO_INCREMENT는 열을 정의할 때 1부터 증가하는 값을 입력해줌. INSERT에서는 해당 열이 없다고 생각하고 입력, 대신 AUTO_INCREMENT로 지정하는 열은 꼭 PRIMARY KEY로 지정해줘야 함.
AUTO_INCREMENT, PRIMARY KEY 세트.

CREATE TABLE hongong2 (
toy_id INT AUTO_INCREMENT PRIMARY KEY,
toy_name CHAR(4),
age INT);

데이터 입력 시 자동 증가하는 부분은 NULL값으로 채워넣기.

INSERT INTO hongong2 VALUES (NULL, '보핍', 25);
INSERT INTO hongong2 VALUES (NULL, '슬링키', 22);
INSERT INTO hongong2 VALUES (NULL, '렉스', 21);
SELECT * FROM hongong2;


자동으로 들어간걸 확인.

SELECT LAST_INSERT_ID();

만약 AUTO_INCREMENT로 입력되는 다음 값을 100부터 시작하도록 변경하고 싶다면, ALTER TABLE을 사용, 그 후 AUTO_INCREMENT=100 지정

ALTER TABLE hongong2 AUTO_INCREMENT=100;
INSERT INTO hongong2 VALUES (NULL, '재남', 35);
SELECT * FROM hongong2;

ALTER TABLE은 테이블을 변경하라는 의미. 테이블의 열 이름 변경, 새로운 열 정의, 열 삭제 등의 작업을 함.

-> 한번 테이블을 생성 한 후, 수정할 때 사용.

처음부터 입력되는 값을 1000으로 지정, 그 이후 증가값을 3 씩 이라고 할 때.
시스템 변수 @@auto_increment를 변경시켜야 함.

CREATE TABLE hongong3 (
toy_id INT AUTO_INCREMENT PRIMARY KEY,
toy_name CHAR(4),
age INT);
ALTER TABLE hongong3 AUTO_INCREMENT=1000; -- 시작값은 1000으로 지정
set @@auto_increment_increment=3; --증가값은 3으로 지정

시스템 변수는 MySQL에서 자체적으로 갖는 설정값이 저장된 변수.
SELECT @@시스템변수
SHOW GLOBAL VARIABLES 로 시스템 변수 확인

다른 테이블이 이미 데이터가 입력되어 있다면 INSERT INTO ~ SELECT 구문을 사용해 테이블을 가져와서 한꺼번에 입력 가능
주의: SELECT 문의 열 개수와 INSERT할 테이블의 열 개수는 같아야 함.

world 데이터베이스의 city 테이블의 개수를 조회
`SELECT COUNT(*) FROM world.city;

테이블 구조를 알고 싶을 때

DESC world.city;

데이터 5건 정도 확인.

SELECT * FROM world.city LIMIT 5;

이 기존에 있는 Name과 Population을 새로운 테이블을 생성할 때 써보려고 한다.

CREATE TABLE city_popul (city_name CHAR(35), population INT);
INSERT INTO city_popul
SELECT Name, Population FROM world.city;


4079 행이 추가됨.
열이 1:1 대응됨. 아마 데이터 형이 맞지 않으면 안될 것 같다.

데이터 수정 UPDATE

행 데이터를 수정해야할 경우 사용
MySQL은 기본적으로 UPDATE DELETE를 허용하지 않는다.

Safe Updates 해제. 워크벤치 재부팅 이후 새 쿼리문 열어서 작업

앞서 생성한 city_popul 테이블 도시이름 city_name 중 'Seoul'값을 '서울로 변경.

USE market_db;
UPDATE city_popul
SET city_name = '서울'
WHERE city_name = 'Seoul';
SELECT * FROM city_popul WHERE city_name = '서울';

여러 열의 값을 변경하기. city_name 뉴욕으로 바꾸면서 인구 population은 0으로

UPDATE city_popul
SET city_name = '뉴욕', popuation = 0
WHERE city_name = 'New York';
SELECT * FROM city_popul WHERE city_name = '뉴욕';

주의. UPDATE를 사용할 때 WHERE을 사용하지 않으면 SET 이하의 모든 행값이 변하게됨.

UPDATE city_popul
SET city_name = '서울';

전체 테이블 내용은 단위를 조절할 때(만명 단위) 사용. 모든 인구 열을 한꺼번에 10,000으로 나눌 수 있음.

UPDATE city_popul
SET population = population / 10000;
SELECT * FROM city_popul LIMIT 5;

회원이 탈퇴한 경우 DELETE로 정보를 삭제. DELETE는 행 단위로 삭제,
city_popul 테이블에서 'New'로 시작하는 도시를 삭제한다.

DELETE FROM city_popul
WHERE city_name LIKE 'New%';

UPDATE와 마찬가지로 WHERE가 없으면 전체 행을 지워버리니 주의.

만약 'New'클자로 시작하는 11건의 도시를 모두 지우는 것이 아니라, 상위 몇건만 지우려면 LIMIT 구문과 함께 사용. 상위 5건만 삭제하려 한다.

DELETE FROM city_popul
WHERE city_name LIKE 'New%'
LIMIT 5;

대용량 테이블의 삭제

CREATE TABLE big_table1 (SELECT * FROM world.city, sakila.country);
CREATE TABLE big_table2 (SELECT * FROM world.city, sakila.country);
CREATE TABLE big_table2 (SELECT * FROM world.city, sakila.country);
SELECT COUNT(*) FROM big_table1;

삭제를 DELETE, DROP, TRUNCATE으로 시도함.
DELETE는 삭제가 오래걸림. 테이블 남김
DROP은 테이블 자체를 삭제. 순식간에 삭제. 테이블 삭제
TRUNCATE은 DELETE와 동일한 효과를 내지만 매우 빠름. 테이블 남김.

DELETE FROM big_table1;
DROP TABLE big_table2;
TRUNCATE TABLE big_table3;

TRUNCATE은 DELETE와 달리 WHERE 조건문을 사용할 수 없음. 조건 없이 전체 행을 삭제할 때만 사용.
대용량 테이블의 전체 내용을 삭제할 때 테이블 자체가 필요 없을 경우에는 DROP으로 삭제, 테이블의 구조를 남겨두고 싶을 때는 TRUNCATE으로 삭제한다.

profile
반갑습니다 햄스터 좋아합니다

0개의 댓글

관련 채용 정보