25년 DB 공부 (2) MySQL 기본 DML 해보기

이전글

https://naa0.tistory.com/462

 

25년 DB 공부 (1) 환경설정, 로컬에 docker로 MySQL 띄우기

서론회사에서 aws 위의 Aurora MySQL cluster의 업그레이드를 준비하면서, DB 자체에 대한 공부가 부족한 것을 느꼈다.늘 공부해도 다른 부분에서 부족한 것 같은 느낌이 든다.무튼, 매번 새로운 걸 하

naa0.tistory.com

 


 

실습용 스키마 및 계정 생성

primary DB 접속

가장 먼저, docker exec -it mysql1 mysql -uroot -prootpass 로 primary DB에 접속해준다.

 

실습용 스키마 생성

먼저, 실습용으로 사용할 스키마를 생성해준다.

  • CREATE DATABASE binlog_test;

 

실습용 계정 생성

계정 및 패스워드를 생성해주고, 해당 계정에 위의 스키마에 대한 전체 권한을 부여한다.

  • CREATE USER 'naa0'@'%' IDENTIFIED BY 'skdud';
  • GRANT ALL PRIVILEGES ON binlog_test.* TO 'naa0'@'%';

 

 

 


DML 날려보기

테이블 생성하기

  • 스키마 사용하기
    • USE binlog_test;
  • CREATE TABLE orders (
      id BIGINT AUTO_INCREMENT PRIMARY KEY,
      product VARCHAR(64) NOT NULL,
      qty INT NOT NULL,
      price DECIMAL(10,2) NOT NULL,
      updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
                   ON UPDATE CURRENT_TIMESTAMP
    ) ENGINE=InnoDB;

 

위와 같이 명령어를 수행하고 나면, SHOW TABLES; 및 SHOW COLUMNS ~; 명령어를 통해 잘 생성되었는지도 확인할 수 있다.

 

CUD 수행 해보기

  • -- INSERT (3개 데이터 추가)
    INSERT INTO orders(product, qty, price)
    VALUES ('pen', 10, 1.20), ('notebook', 5, 3.50), ('eraser', 3, 0.80);
  • -- UPDATE (특정 조건 수행)
    UPDATE orders SET qty = qty + 2 WHERE product='pen';
  • -- DELETE (1행)
    DELETE FROM orders WHERE product='notebook' LIMIT 1;
  • -- 전체 가격 10% 인상 (여러 행 UPDATE)
    UPDATE orders SET price = price * 1.10;

 

롤백해보기

트랜잭션 후에 롤백을 해보고, 추후에 이게 어떤 식으로 binlog에 남는 지 보려고 한다.

SET autocommit=0;
START TRANSACTION;
INSERT INTO orders(product, qty, price) VALUES ('pencil', 4, 0.50);
UPDATE orders SET qty = qty - 1 WHERE product='eraser';
ROLLBACK;

START TRANSACTION;
INSERT INTO orders(product, qty, price) VALUES ('marker', 2, 2.40);
COMMIT;    
SET autocommit=1;

'DevOps' 카테고리의 다른 글

25년 DB 공부 (1) 환경설정, 로컬에 docker로 MySQL 띄우기  (3) 2025.08.14