4-3) MySQL 문법(INSERT/UPDATE/DELETE)

Hyoin Jeong·2022년 7월 14일

MySQL에서 지원하는 컬럼 타입

  1. Numeric Type
    • INTEGER, INT, SMALLINT, TINYINT, MEDIUMINT, BIGINT(크기에따라)
    • DECIMAL(돈), NUMERIC → 소숫점을 신경쓰고 싶지 않을 때
    • FLOAT, DOUBLE(FLOAT에 비해 더 자세히 표현 가능), BIT
  2. Date and Time Type
    • DATE, DATETIME, TIMESTAMP(많이씀),TIME, YEAR

String Type

  1. CHAR(고정된 길이), VARCHAR, BINARY, VARBINARY, BLOB, TEXT, ENUM, SET
  2. JSON Type
    • 다양한 JSON 조작함수를 제공함
  3. Spatial Type
    • 위도와 경도를 중심으로한 위치 관련 타입 → 거리차이계산

INSERT (1)

  • 뒤의 조인에서 사용할 테이블 2개를 생성하고 INSERT로 추가해보자
CREATE TABLE prod.vital (
user_id int not null,
vital_id int primary key,
date timestamp not null,
weight int not null
);
CREATE TABLE prod.alert (
alert_id int primary key,
vital_id int,
alert_type varchar(32),
date timestamp,
user_id int
);

INSERT (2)

  • 뒤의 조인에서 사용할 테이블 2개를 생성하고 INSERT로 추가해보자
INSERT INTO prod.vital(user_id, vital_id, date, weight) VALUES(100, 1, '2020-01-01', 75);
INSERT INTO prod.vital(user_id, vital_id, date, weight) VALUES(100, 3, '2020-01-02', 78);
INSERT INTO prod.vital(user_id, vital_id, date, weight) VALUES(101, 2, '2020-01-01', 90);
INSERT INTO prod.vital(user_id, vital_id, date, weight) VALUES(101, 4, '2020-01-02', 95);
INSERT INTO prod.vital(user_id, vital_id, date, weight) VALUES(999, 5, '2020-01-02', -1);
INSERT INTO prod.vital(user_id, vital_id, date, weight) VALUES(999, 5, '2020-01-02', 10);

빨간색 형광펜 : vital_id가 primary key라서 primary key uniqueness constraint에 의해 같은 값은 들어가지 않음

INSERT INTO prod.alert VALUES(1, 4, 'WeightIncrease', '2020-01-02', 101);
INSERT INTO prod.alert VALUES(2, NULL, 'MissingVital', '2020-01-04', 100);
INSERT INTO prod.alert VALUES(3, NULL, 'MissingVital', '2020-01-04', 101);

DELETE

  • DELETE FROM vs. TRUNCATE(차이점을 이해하는 것이 중요)
  1. DELETE FROM
    • 조건을 기반으로 테이블에서 레코드 삭제 혹은 모든 레코드 삭제
    • 테이블도 모두 삭제
    • 장점 : 트랜잭션에서 사용 가능(롤백 가능)
    • 단점 : 속도가 느림
  2. TRUNCATE
    • 조건없이 모든 레코드 삭제
    • 테이블은 계속 존재
    • 장점 : 속도가 빠름
    • 단점 : 트랜잭션 사용시 롤백 불가
DELETE FROM prod.vital WHERE weight <= 0; -> 조건에 해당하는 부분만 삭제
	-> 실제로 실행하면 에러(primary key가 아니라 다수의 데이터를 사용할 수 있는 조건은 mysql에서 막음)
	-> 해결방법 : DELETE FROM prod.vital WHERE vital_id=5; 로 바꿔야함
DELETE FROM prod.vital; -> 모든 레코드는 날림(데이블은 있음)
	-> 이것도 막힘(safe update 모드라서)
	-> 해결방법 : preference -> 
SELECT * FROM prod.vital; -> 레코드가 없다고 리턴(테이블이 없으면 테이블이 없다고 리턴)
  1. DROP
    • 모든 테이블을 지우는 것
    • 테이블이 없는데 지우면 에러가 나므로 IF EXISTS 사용
DROP TABLE IF EXISTS prod.viral;

UPDATE

  • 조건을 기반으로 테이블에서 특정 레코드(들)의 필드 값 수정 가능
  • 예: vital_id가 4인 레코드의 weight를 92로 변경
SELECT * FROM prod.vital WHERE vital_id = 4;
UPDATE prod.vital
SET weight = 92
WHERE vital_id = 4;
SELECT * FROM prod.vital WHERE vital_id = 4;

0개의 댓글