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

🚀 INSERT: 데이터 입력

💡 INSERT문 기본 문법

🔵 테이블 이름 뒤에 나오는 열 생략 가능

단, 열 이름 생략시 VALUES 다음에 나오는 값들의 순서 및 개수는 테이블의 열 순서 및 개수와 동일해야 함

INSERT INTO 테이블 [(열1, 열2, ...)]
     VALUES (값1, 값2, ...);


🔵 특정 열에만 데이터를 입력하려는 경우

테이블 이름 뒤에 입력할 열의 이름 입력  👉 이 경우 생략한 열에는 NULL 값 들어가게 됨

CREATE TABLE hongong1 (toy_id  INT, toy_name  CHAR(4), age  INT);

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


🔵 열의 순서를 바꿔 입력하고 싶은 경우

열 이름과 값을 원하는 순서에 맞춰 입력

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


💡 AUTO_INCREMENT

  • 열을 정의할 때 1부터 증가하는 값을 자동 입력
  • INSERT문에서는 해당 열이 없다고 생각하고 NULL 값으로 입력해주면 됨
  • 단, AUTO_INCREMENT로 지정하는 열은 반드시 PRIMARY KEY로 지정해야 함
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);
SELECT *    FROM hongong2;

[실행 결과]

toy_id toy_name age
1 보핍 25
2 슬링키 22
3 렉스 21


👀 LAST_INSERT_ID()

AUTO_INCREMENT로 지정한 열에 현재 어디까지 입력되었는지 확인하는 함수

SELECT LAST_INSERT_ID();

[실행 결과]

LAST_INSERT_ID()
3


👀 입력 값 변경(1)

AUTO_INCREMENT로 입력되는 다음 값을 다른 값으로 변경하고 싶은 경우 아래와 같이 사용

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

[실행 결과]

toy_id toy_name age
1 보핍 25
2 슬링키 22
3 렉스 21
100 재남 35


👀 입력 값 변경(2)

  • 초기 입력 값 지정(1000) 및 1003, 1006, 1009, … 으로 step을 설정하고 싶은 경우 시스템 변수인 @@auto_increment_increment 변경
  • 시스템 변수
    • MySQL에서 자체적으로 가지고 있는 설정값이 저장된 변수로 주로 MySQL의 환경과 관련된 내용이 저장되어 있으며, 그 개수 500개 이상
    • 앞에 @@가 붙는 것이 특징이며, 시스템 변수의 값을 확인하려면 SELECT @@시스템변수 실행
    • 전체 시스템 변수의 종류를 알고 싶을 때는 SHOW GLOBAL VARIABLES 실행
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으로 지정
INSERT INTO hongong3 VALUES (NULL, '토마스', 20);
INSERT INTO hongong3 VALUES (NULL, '제임스', 23);
INSERT INTO hongong3 VALUES (NULL, '고든', 25);
SELECT *    FROM hongong3;

[실행 결과]

toy_id toy_name age
1000 토마스 20
1003 제임스 23
1006 고든 25


👀 여러 줄을 한줄로 작성

INSERT INTO table_name VALUES (value1, value2, ...), (value3, value4, ...), (value5, value6, ...);


💡 INSERT INTO ~ SELECT

다른 테이블의 데이터를 한 번에 입력시 사용

INSERT INTO table_name (col_name1, col_name2, ...)
  SELECT문 ;
INSERT INTO city_popul
  SELECT Name, Population FROM world.city;


👀 DESC 명령(Describe)

테이블 구조 확인

DESC world.city;  -- 데이터베이스_이름.테이블_이름

[실행 결과]

Field Type Null Key Default Extra
ID int NO PRI   auto_increment
Name char(35) NO      
CountryCode char(3) NO MUL    
District char(20) NO      
Population int NO   0  


🚀 UPDATE: 데이터 수정

💡 UPDATE문 기본 문법

UPDATE  테이블_이름
   SET  열1=값1, 열2=값2, ...
   WHERE 조건 ;


💡 WHERE가 없는 UPDATE문

  • UPDATE문에서 WHERE절은 문법상 생략이 가능하지만, WHERE절을 생략하면 모든 행의 값이 변경되므로 주의
  • 예) 모든 인구 열(population)을 한꺼번에 10,000으로 나누기 (전체 적용하는 경우 사용 가능)
UPDATE city_popul
   SET population = population / 10000;


🚀 DELETE: 데이터 삭제

💡 DELETE문 기본 문법

DELETE FROM 테이블_이름 WHERE 조건 ;


조건에 해당하는 일부(예를 들어 상위 5건)만 삭제도 가능

DELETE FROM 테이블_이름 WHERE 조건 LIMIT 5 ;


💡 대용량 테이블의 삭제

👉 DELETE, DROP, TRUNCATE 세 가지 방법 존재

DELETE DROP TRUNCATE
데이터 삭제 테이블 자체 삭제 데이터 삭제(DELETE와 동일한 효과)
삭제시 시간 많이 소요 속도 빠름 속도 빠름
테이블 구조 O 테이블 구조 X 테이블 구조 O
  • TRUNCATE는 DELETE와 달리 WHERE문을 사용할 수 없으므로 조건 없이 전체 행을 삭제할 때만 사용
  • 결론적으로, 대용량 테이블의 삭제시 아래의 경우가 효율적!
    • 테이블 자체가 필요없는 경우 👉 DROP
    • 테이블 구조는 남겨놓을 경우 👉 TRUNCATE

Categories:

Updated:

Leave a comment