2023. 10. 14. 22:38ㆍ개발
데이터 베이스 객체
웹 서비스에서 필요한 데이터를 체계적으로 데이터 베이스 시스템에 저장하기 위해 테이블을 작성하고 구축하는 스키마 설계 작업을 하고
스키마 설계가 끝나면 실제 물리적 서버에 데이터 베이스 객체를 작성하여 데이터 베이스를 구축한다.
이때 데이터 베이스 내부에 테이블을 생성, 변경, 삭제하는 작업을 하는 것을 데이터 베이스 객체를 작성한다고 한다.
데이터 베이스 object
- 기존 이름이나 예약어와 중복하지 않는다.
- 숫자로 시작할 수 없다.
- 언더스코어(_) 이외의 기호는 사용할 수 없다.
- 한글을 사용할 때는 더블쿼트(MySQL에서는 백쿼트)로 둘러싼다.
- 시스템이 허용하는 길이를 초과하지 않는다.
- 객체에 이름을 정할때는 객체가 담고 있는 정보를 명학하게 표현할 수 있는 이름을 선택하도록 한다
schema (스키마)
데이터베이스 내의 객체는 schema(스키마)라는 컨테이너 안에 만들어진다.
show databases; => mysql 서버 내의 데이터 베이스 목록 출력
show tables; => 스키마 내의 테이블 객체 목록을 출력
DDL (Data Definition Language)이란?
스키마(schema) 내의 객체를 정의하고 관리할 때 사용되는 쿼리문을 의미한다.
create, alter, drop이 대표적이고 데이터를 추가하고 수정, 삭제할 수 있다.
데이터 베이스 생성
create database; => mysql 서버 내의 데이터베이스를 생성
테이블 생성
create table; => 데이터베이스에 사용자 테이블을 생성
(이때 테이블 이름과 열을 지정할 수 있는데 열(column)에는 컬럼명 자료형 제약조건을 지정해 줄 수 있다.)
생성 후 DESC users 명령어로 테이블 정보를 확인
mysql> CREATE TABLE users
(
id INT NOT NULL AUTO_INCREMENT, -- id 칼럼을 정수, NULL을 허락하지 않으며 값을 자동증가하게 설정합니다.
name VARCHAR(50) NOT NULL, -- name 칼럼을 50 bytes의 크기를 가지는 문자열, NULL을 허락하지 않는다.
email VARCHAR(200) NOT NULL,
profile_image VARCHAR(1000) NULL,
password VARCHAR(200) NOT NULL,
created_at TIMESTAMP NOT NULL DEFAULT NOW(), -- 데이터의 이력관리를 위해서 생성 시간을 기록합니다.
updated_at TIMESTAMP NULL ON UPDATE CURRENT_TIMESTAMP, -- 데이터의 이력관리를 위해서 변경 시간을 기록합니다.
PRIMARY KEY (id) -- 이 테이블의 Primary Key를 id로 설정합니다.
); -- 쿼리문은 ; 로 구분되기 때문에 엔터를 쳐서 쿼리문을 멀티라인으로 작성할 수 있습니다.
열(column) 추가
만약 users 테이블에 age열을 추가한다면
ALTER TABLE ... ADD ... 이라는 명령어로 테이블을 추가할 수 있다.
명령어 => ALTER TABLE users ADD age INT NOT NULL;
mysql> desc users;
+---------------+---------------+------+-----+-------------------+-----------------------------+
| Field | Type | Null | Key | Default | Extra |
+---------------+---------------+------+-----+-------------------+-----------------------------+
| id | int | NO | PRI | NULL | auto_increment |
| name | varchar(50) | NO | | NULL | |
| email | varchar(200) | NO | | NULL | |
| profile_image | varchar(1000) | YES | | NULL | |
| password | varchar(200) | NO | | NULL | |
| created_at | timestamp | NO | | CURRENT_TIMESTAMP | DEFAULT_GENERATED |
| updated_at | timestamp | YES | | NULL | on update CURRENT_TIMESTAMP |
| age | int | NO | | NULL | |
+---------------+---------------+------+-----+-------------------+-----------------------------+
열(column) 삭제
만약 users 테이블에 profile_image를 삭제하고 싶다면
ALTER TABLE .... DROP....이라는 명령어로 테이블을 삭제할 수 있다.
명령어 => ALTER TABLE users DROP profile_image;
DPOP TABLE users;라는 명령어로 테이블 객체 안에 포함된 모든 데이터 전부도 삭제할 수 있다.
mysql> desc users;
+---------------+---------------+------+-----+-------------------+-----------------------------+
| Field | Type | Null | Key | Default | Extra |
+---------------+---------------+------+-----+-------------------+-----------------------------+
| id | int | NO | PRI | NULL | auto_increment |
| name | varchar(50) | NO | | NULL | |
| email | varchar(200) | NO | | NULL | |
| password | varchar(200) | NO | | NULL | |
| created_at | timestamp | NO | | CURRENT_TIMESTAMP | DEFAULT_GENERATED |
| updated_at | timestamp | YES | | NULL | on update CURRENT_TIMESTAMP |
| age | int | NO | | NULL | |
+---------------+---------------+------+-----+-------------------+-----------------------------+
열(column) 수정
열의 자료형을 변경하고자 할 때
ALTER TABLE.... MODIFY....라는 명령어로 테이블을 변경할 수 있다.
명령어 전
+------------+---------------+------+-----+-------------------+-----------------------------+
| Field | Type | Null | Key | Default | Extra |
+------------+---------------+------+-----+-------------------+-----------------------------+
| id | int | NO | PRI | NULL | auto_increment |
| title | varchar(100) | NO | | NULL | |
| content | varchar(3000) | YES | | NULL | |
| user_id | int | NO | MUL | NULL | |
| created_at | timestamp | NO | | CURRENT_TIMESTAMP | DEFAULT_GENERATED |
| updated_at | timestamp | YES | | NULL | on update CURRENT_TIMESTAMP |
+------------+---------------+------+-----+-------------------+-----------------------------+
명령어 후
명령어 => ALTER TABLE posts MODIFY content TEXT NULL;
+------------+------------------+------+-----+-------------------+-----------------------------+
| Field | Type | Null | Key | Default | Extra |
+------------+------------------+------+-----+-------------------+-----------------------------+
| id | int | NO | PRI | NULL | auto_increment |
| title | varchar(100) | NO | | NULL | |
| content | varchar -> text | YES | | NULL | |
| user_id | int | NO | MUL | NULL | |
| created_at | timestamp | NO | | CURRENT_TIMESTAMP | DEFAULT_GENERATED |
| updated_at | timestamp | YES | | NULL | on update CURRENT_TIMESTAMP |
+------------+------------------+------+-----+-------------------+-----------------------------+
'개발' 카테고리의 다른 글
| git hub 공부 (0) | 2023.11.22 |
|---|---|
| 2차 프로젝트 회고록 (0) | 2023.11.05 |
| 위코드 1차 프로젝트 회고록 (0) | 2023.10.20 |
| mysql 에 대하여 1-2 (0) | 2023.10.15 |
| 2년만에 돌아온 개발일지 (1) | 2023.10.05 |