MySQL 총 정리2: 데이터 추가ㆍ변경ㆍ삭제

데이터 분석/MySQL

MySQL 총 정리2: 데이터 추가ㆍ변경ㆍ삭제

해리누나 2024. 9. 27. 20:18
반응형

 


[ 목차 ]
1. 테이블에 데이터 추가하기 'INSERT'
1) 기본 문법
2) 예시
📝 CURRENT_TIMESTAMP VS NOW() VS SYSDATE()

2. 데이터 변경하기 'UPDATE'
1) 기본 문법
2) 예시

3. 데이터 삭제 'DELETE'
1) 기본 문법
2) 예시

 

1. 테이블에 데이터 추가하기 'INSERT'

1) 기본 문법

INSERT INTO 테이블명 (열1, 열2, 열3, ...) VALUES (값1, 값2, 값3, ...);

• 테이블에 데이터를 넣을 땐, 데이터를 넣을 컬럼명과 그 컬럼에 넣을 값을 입력해주면 된다.

• 컬럼의 데이터형에 맞는 데이터를 넣도록 주의하자.

 

2) 예시

 

  INSERT INTO animal_shelter(공고번호, 시군명, 발견장소, 공고시작일자, 공고종료일자, 품종, 색상, 나이, 체중)

  VALUES ('A202400123', '서울시', '강남구 삼성동', '2024-09-15', '2024-09-30', '푸들', '갈색', 2, 4.50);

 

• 적은 컬럼의 순서대로 데이터 값을 입력해야 한다.

 

  INSERT INTO animal_shelter(공고번호, 시군명, 발견장소, 공고시작일자, 공고종료일자, 품종, 색상, 나이, 체중)

  VALUES

  ('A202400123', '서울시', '강남구 삼성동', '2024-09-15', '2024-09-30', '푸들', '갈색', 2, 4.50),

  ('B202400456', '부산시', '해운대구 중동', '2024-09-16', '2024-10-01', '비숑', '흰색', 3, 6.20),

  ('C202400789', '대구시', '수성구 범어동', '2024-09-17', '2024-10-02', '시츄', '검정색', 1, 5.00);

• 테이블에 여러 데이터를 한 번에 집어넣을 수도 있다.

 

 

  INSERT INTO animal_shelter

  VALUES ('A202400123', '서울시', '강남구 삼성동', '2024-09-15', '2024-09-30', '푸들', '갈색', 2, 4.50);

 

• 모든 컬럼에 데이터를 삽입하는 경우엔 열 컬럼 목록을 생략해도 된다. (테이블의 컬럼 순서대로 적어야 한다.)

 

 

  INSERT INTO animal_shelter(공고번호, 시군명, 공고시작일자, 공고종료일자, 품종, 나이, 체중)

  VALUES ('A202400123', '서울시', '2024-09-15', '2024-09-30', '푸들', 2, 4.50);

 

• 물론 내가 원하는 컬럼에만 데이터를 삽입하는 것도 가능하다.

• 여기서 주의해야할 점은 PK로 지정된 컬럼이나 NOT NULL로 제약을 준 컬럼은 반드시 데이터를 넣어줘야 하니 빼먹지 말도록 하자.

• 당연히 PK에는 중복값을 넣지 않도록 한다.

• 실무에는 아무래도 모든 컬럼에 대해 데이터를 입력하기 보다는 필요한 컬럼만 골라 데이터를 집어넣는 경우가 더 잦다.

• 테이블에 새로운 컬럼이 추가되거나 테이블 구조가 변경될 가능성을 염두에 두고, 컬럼 목록을 생략하지 않고 명시하는 것이 좋다고 한다.

➯ 만약 컬럼 목록을 생략하고 INSERT 문을 작성하면, 테이블 구조가 변할 때 INSERT 문이 실패하거나, 잘못된 컬럼에 데이터가 삽입되는 문제가 발생할 수 있다.

 

  CREATE TABLE users (

       id INT(11) AUTO_INCREMENT PRIMARY KEY,

       username VARCHAR(10) NOT NULL,

       email VARCHAR(20) UNIQUE,

       created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP

  );

• 만일 이 예시처럼 자동으로 PK를 집어 넣는 경우는 어떨까?

 

  INSERT INTO users (username, email)

  VALUES

  ('alice', 'alice@example.com'),

  ('bob', 'bob@example.com'),

  ('charlie', 'charlie@example.com');

• 자동으로 생성되니 PK를 입력하지 않아도 된다.

• created_at 컬럼의 경우 디폴트 값으로 데이터가 입력되는 그 시간을 받으니 입력하지 않아도 된다.

 

데이터 삽입 후

 

  CREATE TABLE users (

       id INT(11) AUTO_INCREMENT PRIMARY KEY,

       username VARCHAR(10) NOT NULL,

       email VARCHAR(20) UNIQUE,

       created_at TIMESTAMP

  );

 

  INSERT INTO users (username, email, created_at)

  VALUES

  ('alice', 'alice@example.com', NOW()),

  ('bob', 'bob@example.com', NOW()),

  ('charlie', 'charlie@example.com', NOW());

• 디폴트 값으로 지정하지 않았는데 데이터가 입력되는 그 현재 시각을 집어넣고 싶은 경우 NOW()를 사용하면 된다.

 

마침 current_timestamp를 사용해봤겠다 현재 시각 데이터를 가져올 수 있는 다른 함수와 차이점을 보도록 하자.

 

📝CURRENT_TIMESTAMP VS NOW() VS SYSDATE()

ㆍCURRENT_TIMESTAMP: 쿼리 시작 시점의 날짜와 시간을 반환
➯ 주로 테이블을 생성할 때 default 값 설정으로 사용

ㆍNOW(): 쿼리 시작 시점의 날짜와 시간을 반환
➯ 현재 시각 참조나 데이터 삽입 시 사용

ㆍSYSDATE(): 쿼리 호출 시점의 실제 날짜와 시간 반환
➯ 시간 차이를 고려해야할 때 사용

  SELECT

  CURRENT_TIMESTAMP,

  NOW(),

  SYSDATE(),

  SLEEP(5),

  CURRENT_TIMESTAMP,

  NOW(),

  SYSDATE();

실행해보면,

CURRENT_TIMESTAMP NOW() SYSDATE() CURRENT_TIMESTAMP NOW() SYSDATE()
2024-09-27
19:38:03
2024-09-27
19:38:03
2024-09-27
19:38:03
2024-09-27
19:38:03
2024-09-27
19:38:03
2024-09-27
19:38:08

※ 테이블에 데이터를 넣었다면 COMMIT 해주는 것을 잊지 말자.

 

 


2. 데이터 변경하기 'UPDATE'

1) 기본 문법

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

• UPDATE 명령어 옆에 데이터를 수정할 테이블의 이름을 적는다.

• SET: 수정할 컬럼과 새로 넣어줄 값을 설정한다, (여러 개의 컬럼에 대한 값 수정도 가능하다)

• WHERE: 수정할 행(레코드)를 선택하는 조건이다. 조건을 지정해주지 않으면 모든 행들이 수정되므로 주의해야 한다.

 

2) 예시

  CREATE TABLE bookshelf (

       ISBN VARCHAR(10) PRIMARY KEY,

       book_name VARCHAR(50) NOT NULL,

       writer VARCHAR(25),

       publisher VARCHAR(25),

       publication_date DATE,

       price INT

  );

 

  INSERT INTO bookshelf (ISBN, book_name, writer, publisher, publication_date, price)

  VALUES

  ('8991268722', '데미안', '헤르만 헤세', '열린책들', '2007-12-05', 12000),

  ('8936434267', '어린 왕자', '앙투안 드 생텍쥐페리', '민음사', '2000-04-01', 8800),

  ('8932917244', '1984', '조지 오웰', '열린책들', '2009-06-30', 13500),

  ('8972756194', '나미야 잡화점의 기적', '히가시노 게이고', '현대문학', '2012-12-19', 14800),

  ('8990982575', '미움받을 용기', '기시미 이치로', '인플루엔셜', '2014-11-18', 16000),

  ('8970123458', '종이 여자', '기욤 뮈소', '밝은세상', '2009-11-01', 15000),

  ('8954644550', '멋진 신세계', '올더스 헉슬리', '문학동네', '2015-03-02', 13000),

  ('8954600082', '창문 넘어 도망친 100세 노인', '요나스 요나손', '열린책들', '2013-07-25', 14800),

  ('8937487001', '참을 수 없는 존재의 가벼움', '밀란 쿤데라', '민음사', '2006-09-10', 11000),

  ('8960170061', '천개의 찬란한 태양', '할레드 호세이니', '문학동네', '2007-09-10', 16000);

 

  UPDATE bookshelf SET PUBLICATION_DATE = '2013-07-23', price = 15200
  WHERE book_name = '창문 넘어 도망친 100세 노인';

 

 

• 실수로 WHERE 절 없이 UPDATE 문을 작성해 위와 같은 대참사가 일어나도 당황하지 말자.

• ROLLBACK 으로 되돌리면 된다. (물론 이미 COMMIT을 해버린 상태라면 되돌릴 수 없다.)

 

롤백 후

※ 데이터 변경이 끝났으면, COMMIT 해주는 것을 잊지 말자.

 

 


3. 데이터 삭제하기 'DELETE'

1) 기본 문법

DELETE FROM 테이블명
WHERE 조건;

• DELETE 구문은 테이블에서 특정 조건을 만족하는 행을 삭제할 때 사용된다.

• DELETE 구문 실행 시, 해당 행 데이터는 영구적으로 삭제되며, COMMIT을 하지 않은 상태에서만 ROLLBACK을 통해 복구가 가능하다.

• 조건을 붙이지 않은 경우, 테이블에 존재하는 모든 데이터가 삭제되니 주의하자.

 

2) 예시

 

  DELETE FROM bookshelf

  WHERE writer = '조지 오웰';

 

 

  DELETE FROM bookshelf

  WHERE ISBN = '8932917244';

 

하나의 조건 뿐만 아니라 여러 조건을 걸어줄 수도 있다.

 

① AND - 여러 조건을 모두 만족하는 행 삭제

 

  DELETE FROM bookshelf

  WHERE writer = '조지 오웰'

  AND publisher = '열린책들';

 

 

② OR - 여러 조건 중 하나라도 만족하는 행 삭제

 

  DELETE FROM bookshelf

  WHERE writer = '조지 오웰'

  OR publisher = '열린책들';

 

 

③ 복합 조건

 

  DELETE FROM bookshelf

  WHERE (publisher = '열린책들' AND publication_date <= '2009-12-31')

  OR price <= 15000;

 

 

 

delete 구문

• DELETE 구문은 테이블에서 조건을 만족하는 행을 삭제한다고 했다.

• 그렇다면 행이 아닌 특정 컬럼에 대한 값을 없애고 싶을 때는 어떻게 해야 할까?

 

• UPDATE 구문을 활용해 해당 컬럼에 대한 값을 NULL로 만들어 주면 된다.

 

 


 

 

728x90
반응형