[Udemy] Data Types

Creating the dots·2022년 1월 4일
0

SQL

목록 보기
13/21
post-thumbnail

The Ultimate MySQL Bootcamp 10강을 공부하며 정리한 내용입니다.

Text

varchar

  • 0 ~ 255 사이의 글자 중 선택한 글자수 이하만큼 저장된다. (저장공간이 글자수에 따라 유동적으로 바뀔 수 있다)

char

  • 0 ~ 255 사이의 fixed length 만큼 무조건 저장된다.
    ex. char(3)는 고정된 3만큼의 크기가 정해져있고, 3이상의 데이터를 삽이할 경우에는 ERROR 1406 (22001): Data too long for column과 같은 에러가 발생한다.
VALUECHAR(4)STORAGEVARCHAR(4)STORAGE
''' '4 bytes''1 byte
'ab''ab '4 bytes'ab'3 bytes
'abcd''abcd'4 bytes'abcd'5 bytes
'abcdefg''abcd'4 bytes'abcdefg'5 bytes

Numbers

DECIMAL (exact)

DECIMAL(total digits, digits after decimal)으로 첫번째 인자인 total digits는 1부터 65이하의 숫자가 올 수 있고, digits after decimal은 0부터 30까지의 숫자가 올 수 있다. digits after decimal이 2이고, 1.995를 추가한 경우, warning과 함께 값이 반올림되어 2가 추가된다. 즉, 주어진 자릿수보다 많은 경우, 마지막 자릿수로 반올림된다.

FLOAT (approximate)

  • FLOAT은 DECIMAL에 비해 적은 공간(4 bytes)을 차지하지만, DECIMAL보다는 덜 정확하다.
  • 약 7자까지 정확도가 보장되고, 그 이후부터는 정확도가 떨어진다.

DOUBLE (approximate)

  • DOUBLE은 DECIMAL에 비해 적은 공간(8 bytes)을 차지하지만, DECIMAL보다는 덜 정확하다.
  • 약 15자까지 정확도가 보장되고, 그 이후부터는 정확도가 떨어진다.

Dates & Times

DATE, TIME, DATETIME

DATETIMEDATETIME
YYYY-MM-DDHH:MM:SSYYYY-MM-DD HH:MM:SS

NOW(), CURDATE(), CURTIME()

NOW()CUIRDATE()CURTIME()
2022-01-08 01:10:062022-01-0801:10:53

formatting DATES

DATE_FORMAT(date, format)
date 값을 포맷 지정자를 사용해 원하는 문자열 형태로 만든다. 이때, 지정자 앞에는 % 기호를 사용해야한다.

SELECT DATE_FORMAT('2009-10-04 22:23:00', '%W %M %Y'); 
//'Sunday October 2009'
SELECT DATE_FORMAT('2009-10-04 22:23:00', '%W-%M-%Y'); 
//'Sunday-October-2009'
select date_format(NOW(), '%m/%d/%Y');
//'01/08/2022'
select date_format(NOW(), '%m/%d/%Y at %h:%i');
//'01/08/2022 at 00:09'
SELECT DATE_FORMAT('2007-10-04 22:23:00', '%H:%i:%s');
// '22:23:00'

DATE MATH

  • DATEDIFF(expr1, expr2)
    expr1-expr2를 한 일수를 리턴한다.

  • DATEADD(date, INTERVAL expr unit)
    date에 설정한 날짜표현만큼 더한 날짜를 리턴한다.

   SELECT DATE_ADD('2018-05-01', INTERVAL 1 DAY);
   //'2018-05-02'
   SELECT DATE_ADD('2020-12-31 23:59:59', INTERVAL 1 SECOND);
   //'2021-01-01 00:00:00'
  • DATE + || - INTERVAL expr unit
   SELECT ('2018-05-01' + INTERVAL 1 DAY);
   //'2018-05-02'
   SELECT ('2018-05-01' - INTERVAL 1 DAY);
   //'2018-04-30'

   SELECT (NOW() + INTERVAL 1 DAY + INTERVAL 10 HOUR);
   //'2022-01-09 10:35:26'

TIMESTAMPS

  • timestamp는 데이터타입이면서 데이터를 추가, 변경할때에 자동으로 생성되는 정보이기도 하다.

  • timestamp는 날짜와 시간을 저장한다는 점에서 datetime과 동일하지만, 다른 범위를 갖는다. datetime의 범위는 '1000-01-01 00:00:00'부터 '9999-12-31 23:59:59'까지이고, timestamp는 '1970-01-01 00:00:00' UTC부터 '2038-01-19 03:14:07' UTC까지의 범위를 갖는다. 따라서 광범위한 날짜 정보를 저장해야하는 경우, timestamp는 적합하지 않다.

  • timestamp는 datetime의 약 절반의 용량을 차지하기 때문에 매번 데이터를 추가하거나 변경했을때 저장하는 날짜 데이터타입으로 적합하다.

  CREATE TABLE comments (
    content varchar(100), 
    created_at TIMESTAMP DEFAULT NOW()
  );

  CREATE TABLE comments2 (
    content varchar(100),
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
  );
  //여기서 CURRENT_TIMESTAMP와 NOW()는 같은 기능 

QUICK CHECK

  1. what's a good use case for CHAR?
    고정된 글자수가 확실한 칼럼에 적당하다. 전화번호('010-0000-0000')와 같이 고정된 길이를 갖는 문자열의 데이터타입으로 적합하다.

  2. fill in the blanks.

//price < 1,000,000
CREATE TABLE inventory (
  item_name varchar(100),
  price decimal(8,2), //가격은 1,000,000미만이면서 소수점이하 자릿수가 있을 수 있으므로. 
  quantity int
)
  1. Difference between datetime and timestamp?
    datetime과 timestamp는 모두 날짜와 시간을 저장한다. 하지만 기술적으로 저장가능한 날짜범위(range)와 저장방식 등에 차이가 있다. datetime은 날짜범위가 timestamp보다 넓지만, 용량이 timestamp의 2배를 차지한다. 따라서, 광범위한 날짜 범위가 필요한 경우 datetime을 작성하고, 데이터를 추가(insert), 변경(update)해 실시간으로 저장할때, timestamp가 적합하다.

  2. print out the current time

SELECT curtime(); //15:21:15 
  1. print out the current date
SELECT curdate(); //2022-01-09
  1. print out the current day of the week (the number)
SELECT DAYOFWEEK(CURDATE()); //1 (Sunday === 1)
SELECT DAYOFWEEK(NOW()); //1 
SELEC DATE_FORMAT(NOW(), '%w'); //1
  1. print out the current day of the week (the day name)
SELECT DAYNAME(NOW()); //Sunday
SELECT DATE_FORMAT(NOW(), '%W'); //Sunday
  1. print out the current day and time using this format (mm/dd/yyyy)
SELECT DATE_FORMAT(NOW(), '%m/%d/%Y'); //01/09/2022 
  1. print out the current day and time using this format: Jaunary 2nd at 3:15
SELECT DATE_FORMAT(NOW(), '%M %D at %h:%i'); //January 9th at 03:30
  1. create a tweets table that stores:
    the tweet content, a username, time it was created
CREATE TABLE tweets (
  content varchar(140),
  username varchar(20),
  created_at timestamp default NOW()
);

reference

profile
어제보다 나은 오늘을 만드는 중

0개의 댓글