본문 바로가기
카테고리 없음

[MySQL] 테이블 생성 (+한글, ++시간)

by 쪼리밍 2022. 3. 1.

테이블 생성 코드

컬럼명 생성시에 그냥 따옴표가 아니라 키보드에 ~표시 있는 곳의 ` 이녀석을 써줘야한다. 그래야 에러 안남

CREATE TABLE tbl_book (
 `book_id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
 `title` VARCHAR(100) NOT NULL,
 `author` VARCHAR(100) NOT NULL DEFAULT '',
 `price` INT NULL,
 `create_date` DATETIME NOT NULL DEFAULT NOW(),
 `update_date` DATETIME NOT NULL DEFAULT NOW() ON UPDATE CURRENT_TIMESTAMP,
 PRIMARY KEY (`book_id`)
)
COLLATE=`utf8mb4_general_ci`
;

 

book_id: 책 번호 // INT형, 음수안됨, NULL안됨, 자동으로 숫자 부여(순서대로) // 기본키

title: 책 제목 // VARCHAR형, NULL 안됨

author 저자명 // NULL 안됨, 기본적으로 ''로 기록됨

price: 가격 // INT형, NULL된다.

create_date: 생성한 날짜 // DATETIME형, NULL 안됨, 기본적으로 현재시각 표시

update_date: 수정한 날짜 // DATETIME형, NULL 안됨, 수정 시에 현재시각 표시

 

utf8mb4_general_ci는 한글 넣을 수 있게 하는 것.

utf8mb4f를 해줌으로써 이모지 같은 4바이트 크기의 문자도 가능!

 

변경

ALTER TABLE [테이블명] 뒤에는 조건 다름, 필요할때 찾아봐야지

ALTER TABLE tbl_book MODIFY update_date DATETIME NOT NULL DEFAULT NOW() ON UPDATE CURRENT_TIMESTAMP;

실수로 디폴트를 적지 않아서 오류났음... 위에 테이블생성에 코드 바꿔뒀으니 안심!

아무튼 바꿀땐 이렇게 바꾸면 된다.

그리고 컬럼명에 `` 이거 안쓰고 그냥 적어도 된다.

 

입력

INSERT INTO [테이블] ([컬럼1, 컬럼2, ......]) VALUE ([값1, 값2, .......])

INSERT INTO tbl_book (`title`, `author`, `price`) VALUE ('Do it! HTML+CSS+자바스크립트 웹 표준의 정석', '고경희', 30000);

각각 값을 직접 적어주는 대신 select문으로 넣어 줄 수 있음

 

 

수정

UPDATE [테이블] SET [컬럼명] = '변경할 값' WHERE [조건]

UPDATE tbl_book SET author = '쪼리밍';

조건을 안달면 author가 '고경희'인 이름의 행들이 전부 바뀌게 된다.

여기서는 행이 한 개 밖에 없으니까 조건 입력 안했음

 

삭제

DELETE FORM [테이블] WHERE [조건]

조건대로 테이블 삭제하는건데 그냥 생략한다.

 

 

 

Mysql에 한글 집어넣을때 깨질 수 있기때문에 UTF-8 설정해준다.

 

DB 자체에 UTF-8 설정

ALTER SCHEMA [데이터베이스 이름]  DEFAULT CHARACTER SET utf8 ;

테이블에 UTF-8 설정

mysql > ALTER TABLE [테이블명] convert to character set UTF8;

mysql> 이건

MySQL 8.0 Command Line Client 이거 실행시키면 된다.

 

 

 

생성 및 업데이트 시간 자동 등록 

DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP

DEFAULT CURRENT_TIMESTAMP : insert 시 자동으로 현재 시각이 들어감

ON UPDATE CURRENT_TIMESTAMP : update 시 자동으로 현재 시각으로 갱신

 

 

MySQL에서 시간을 출력하는 방법으로

SYSDATE() : 2022-03-01 15:32:54

NOW() : 2022-03-01 15:32:42 

CURRENT_TIMESTAMP() : 2022-03-01 15:32:42

CURRENT_DATE() : 2022-03-01

 

NOW()와 CURRENT_TIMESTAMP() 동일함
CURRENT_DATE()는 년월일까지

SYSDATE(): 쿼리가 끝난 시각
NOW(): 쿼리를 시작한 시각

 

* timestamp랑 datetime 차이 알아두기

 

 

 

 

 

 

 

참고

https://dgblog.tistory.com/206

 

[DBMS] Mysql 데이터에 한글 넣기

[MySQL] MySQL은 기본 인코딩이 라틴어로 되어 있기에 한글을 사용할 수 있는 인코딩으로 바꿔주어야 한다. UTF-8 : 전 세계의 주요 국가의 언어의 모든 문자를 전부 표현할 수 있는 방식이다. 따라서

dgblog.tistory.com

 

https://chinsun9.github.io/2020/11/11/insert-update%EC%8B%9C-%EC%9E%90%EB%8F%99%EA%B0%B1%EC%8B%A0-timestamp/

 

insert, update시 자동갱신 TIMESTAMP

123456789CREATE TABLE LOG( `idx` INT NOT NULL AUTO_INCREMENT, `ip` VARCHAR(45) NOT NULL, `method` VARCHAR(45) NOT NULL, `url` VARCHAR(45) NOT NULL,

chinsun9.github.io

 

https://wakestand.tistory.com/481

 

MySQL SYSDATE NOW 차이

MySQL에서 시간을 출력하는 방법으로 SYSDATE() NOW() CURRENT_TIMESTAMP() CURRENT_DATE() 이렇게 네 가지가 있는데 CURRENT_TIMESTAMP()는 NOW()와 동일하고 CURRENT_DATE()는 년월일까지만 나오기 때문에 SYSD..

wakestand.tistory.com

 

https://blog.lael.be/post/917

 

[MySQL/MariaDB] utf8mb4 언어셋 소개 및 표현범위.

기술이 매우 빠르게 발전한다. 배워도 배워도 계속 배워야 한다.   최근에 라엘이가 앞으로 100년동안은 나타나지 않을 것이라고 예상했던, 4 Byte UTF-8 문자열을 보고 여러 깨닳은 바가 있었고

blog.lael.be

 

댓글