[27] DDL(CREATE, ALTER, DROP, TRUNCATE), 한글 인코딩 하는 법, 데이터베이스 목록보기

minjeong·2024년 2월 5일
0
post-thumbnail

1. SQL문

  • Structured Query Language
  • 구조적 쿼리 언어
  • 관계형 데이터베이스를 제어하고 관리할 수 있는 목적의 프로그래밍 언어

    📌 SQL 분류

2. DDL(Data Definition Language)

  • 데이터베이스 or 테이블정의하는 언어
  • 명령어 끝에는 문장이 끝났음을 알려주는 세미콜론(;)을 붙여야한다.
  • SQL문은 색 구분이 어렵다. 대소문자로 구분해야하므로 데이터 형식 Or DDL언어 종류등은 대문자로 작성하자.

2-1. CREATE

: 데이터베이스, 테이블 등을 생성하는 역할
: 데이터베이스 만들기 + 한글 인코딩(프로그래밍 언어가 영어기반이니 한글을 사용할 수 있도록)

📌 한글 인코딩 하는 법

-> 상단에 원기둥을 클릭(스키마) -> 누르면 이 화면이 뜨고 Character set을 아래와 같이 utf8 or utf8mb4(이모지 포함가능) 선택.
-> Collation은 대체로 general 선택

문자형 데이터 형식

숫자형 데이터 형식

-> 형광 표시가 주로 쓰이는 형식

날짜형 데이터 형식

create table products (
	id int not null primary key auto_increment,  
    username varchar(31) NOT NULL,
    model_number varchar(31) not null,
    series varchar(15) not null default 'a'
);

-- id : 컬럼명
-- DEFAULT : 기본 값
-- UNIQUE : 중복허용 x, null 값 허용, 한 테이블에 여러개 가능
  • NOT NULL : NULL 허용 불가
  • AUTO_INCREMENT : 자동 숫자 증가
    📌 대소문자 구분 없고, 쿼리문 가장 끝에는 마지막에 , 넣으면 안된다.(끝난걸 인지못함)

2-2. ALTER

: 테이블을 수정하는 역할
: 테이블의 특정 컬럼(열)을 삭제, 추가, 변경 등을 할때 사용하는 명령어

2-3. DROP vs TRUNCATE

  • DROP : 데이터베이스, 테이블을 삭제하는 역할
    : 테이블을 잘못 만들었거나, 더이상 필요 없는 경우!
DROP TABLE 테이블명;
  • TRUNCATE : 테이블을 초기화 시키는 역할(테이블의 모든 행 일괄삭제)
TRUNCATE TABLE 테이블명;

3. SQL 공통

  • SHOW DATABASES;, USE 데이터베이스명;, SHOW TABLES;, DESC 테이블명;

예제. DDL 이용해 테이블 완성

  • 아래의 이미지에 있는 코드를 터미널로 내용 변경해보자.

(1) mysql위치로 이동 및 실행

cd /usr/local/mysql/bin 
./mysql -u root -p  //비밀번호 입력 후 실행

(2) mysql workbench에서 테이블을 만들고 터미널에서도 그 테이블을 이용하고 싶으면 use 이용

use 테이블명;

(3) 변경사항 입력

mysql> ALTER TABLE member_1 drop age; -- 명령어, member_1테이블의 age 컬럼 삭제
Query OK, 0 rows affected (0.01 sec) 
Records: 0  Duplicates: 0  Warnings: 0 -- 명령어 입력하면 제대로 수행되었음을 알려준다.

mysql> ALTER TABLE member_1 MODIFY id varchar(10); -- id의 타입을 varchar(10)로 변경

mysql> ALTER TABLE member_1 add interest varchar(100); -- 타입이 varchar(100)인 interest 컬럼 생성

(4) 결과

mysql> desc member_1;
+-----------+--------------+------+-----+---------+-------+
| Field     | Type         | Null | Key | Default | Extra |
+-----------+--------------+------+-----+---------+-------+
| id        | varchar(10)  | NO   | PRI | NULL    |       |
| name      | varchar(5)   | NO   |     | NULL    |       |
| gender    | varchar(2)   | NO   |     | NULL    |       |
| email     | varchar(50)  | YES  |     | NULL    |       |
| promotion | varchar(2)   | YES  |     | x       |       |
| interest  | varchar(100) | YES  |     | NULL    |       |
+-----------+--------------+------+-----+---------+-------+
6 rows in set (0.01 sec)

(5) exit 혹은 quit 입력하면 sql문 종료

참고(실행오류 해결)

MySQL workbench에서 코드를 작성하고 실행하고, 다시 수정할 것이 있어서 수정한 후 다시 실행했더니, 이미 해당 테이블은 존재한다며 실행이 제대로 되지 않았다.
실행을 하는 순간 새로고침이 아니라, 아예 새로운 테이블이 생성이 즉시 되는것이라 js코드나 html과는 달랐던 것이다. 따라서 테이블 생성 전에 drop을 해주면, 이전에 테이블을 삭제하고 다시 생성하는 것이니 만약!! 이전 내용을 삭제하고 동일한 테이블 명으로 생성하고 싶으면 지우고 생성해야한다!!

drop table 파일명;

마무리

터미널과 workbench를 번갈아가며 테이블을 생성하다보니 깨달은 것이 있었다. 분명 터미널에서 내용을 수정하고 workbench에서 desc 테이블명; 하니 수정한 내용이 제대로 보였다가, 바로 다음 workbench에서 실행버튼을 누르고 desc 테이블명;하면, workbench에서 했던(터미널에서 수정하기 전 내용)이 다시 뜨는 것이다. 몇번 반복하다보니 동일한 테이블을 수정했을 때, 서로 실시간으로 저장되는 것이 아니라 workbench에서 있던 내용이 터미널에서 한 내용처럼 수정되지 않는 한, 실행누르면 그 이전 내용으로 돌아간다는 것이란 걸 깨달았다. 터미널에서 수정해도 실시간으로 적용되어서 굳이 workbench의 내용을 직접 바꾸지 않아도 적용될 것이라고 생각했었다.. 오늘 배운 걸로는 이런 결론을 내렸는데 추후에 더 배우다보면 잘못 생각한 결론일 수도 있다. 만약 그게 맞다면 정정하는 글을 작성하겠다..!!

profile
중요한 건 꺾여도 다시 일어서는 마음

0개의 댓글