본문 바로가기

프로그래밍/Database

MySQL_테이블 생성과 제약 사항

SQL이란 ? 

SQL(Structred Query Language)은 데이터베이스 관리 시스템(DBMS)에서 데이터를 관리하고 검색하기 위해 사용되는 표준 데이터베이스 언어이다.

 

데이터베이스 생성

CREATE DATABASE 데이터베이스이름;
CREATE DATABASE mydb;

→ 위 쿼리문을 실행하면 mydb라는 이름의 데이터베이스가 생성된다. 생성된 데이터베이스는 MySQL 서버에 저장되며 데이터베이스 내에서 테이블을 생성하고 데이터를 저장할 수 있다.

 

 

데이터베이스에서 테이블은 다음과 같은 정보를 포함할 수 있다.

1. 테이블 이름 ex) CREATE TABLE 테이블이름

2. 열 이름 ex) 열이름 열데이터형식

3. 열 데이터 형식 ex) INT, BIGINT, VARCHAR, CHAR, FLOAT, DATE, TEXT 등

4. 빈 값 허용 여부 (NULL, NOT NULL)

5. 기본값 (DEFAULT)

6. 제약 조건 (Primary Key, Unique Key, Foreign Key 등)

7. 인덱스 

 

 

테이블 생성 예제

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
-- 예약어는 대문자로 적어주는 게 좋다.
-- 테이블 생성시, SQL 작성시 어떤 DB 사용해야 하는지 먼저 선택되어야 한다.
use mydb;
 
-- 테이블 생성
CREATE TABLE student(
    student_id INT,
    name VARCHAR(50NOT NULL,
    grade INT NOT NULL,
    major VARCHAR(50NOT NULL
);
 
-- 테이블 전체 내용이 선택
SELECT * FROM student;
-- 테이블 구조 확인
DESC student;
 
-- 과목 테이블 생성하기
CREATE TABLE subject(
    subject_id INT,
    subject_name VARCHAR(50NOT NULL,
    credit INT NOT NULL,
    department VARCHAR(50),
    professor CHAR(50NOT NULL
);
 
SELECT * FROM subject;
DESC subject;
cs

→ student, subject 테이블을 생성하는 예제이다.

→ 생성할 열 이름과 그 열의 데이터 타입을 지정해주어 테이블을 생성하면 된다.

→ 'NOT NULL'이라는 예약어가 붙으면 값을 비울 수 없다는 뜻이다.

 

<결과 화면>

SELECT * FROM student;
DESC student;

 

 

이미 생성된 테이블에 PRIMARY KEY(기본키 - 제약 조건) 추가해보기

: 기본키를 추가하면 해당 열에 대한 중복 데이터가 저장될 수 없고 데이터 검색 속도가 향상된다.

기본키는 테이블 내에서 고유한 값이어햐 하며, 해당 열에 대해 NOT NULL 제약 조건이 설정되어 있어야 한다.

1
2
3
ALTER TABLE student ADD PRIMARY KEY(student_id);
 
ALTER TABLE subject ADD PRIMARY KEY(subject_id);
cs

→ 특정 컬럼을 기본키로 만들게 되면 중복된 데이터를 허용 못하고 NULL값이 있어서는 안된다.

 

<결과 화면>

student_id Key에 PRI가 생김

 

 

테이블 생성 시 PRIMARY KEY 추가하는 방법

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
-- 테이블을 삭제하는 명령어
DROP TABLE student;
DROP TABLE subject;
 
-- 학생 테이블 생성 PK 추가
CREATE TABLE student(
    student_id INT PRIMARY KEY,
    name VARCHAR(50NOT NULL,
    grade INT NOT NULL,
    major VARCHAR(50NOT NULL
);
 
CREATE TABLE subject(
    subject_id INT PRIMARY KEY,
    subject_name VARCHAR(50NOT NULL
    credit INT NOT NULL
    department VARCHAR(10NOT NULL
    professor VARCHAR(20NOT NULL
);
cs

→ 데이터 타입 뒤에 PRIMARY KEY를 붙여주면 된다.

 

 

데이터 타입 : TEXT, DECIMAL 예제

1
2
3
4
5
6
7
8
CREATE TABLE product(
  id INT PRIMARY KEY
  name VARCHAR(50NOT NULL
  price DECIMAL(102NOT NULL
  description TEXT 
);
 
desc product;
cs

→ TEXT 데이터 타입 : 긴 텍스트 데이터를 저장하기 위함. 문자열의 길이에 제한이 없다.

→ DECIMAL 데이터 타입 : 소수점 이하 자리수를 정확하게 저장한다. (금융 및 계산 분야에서 자주 사용됨.)

 

<결과 화면>

 

 

데이터 타입 : DATE 예제

1
2
3
4
5
6
7
8
9
-- `order` 예약어 테이블 이름을 선점할 수 없다 기본적으로 
-- 하지만 강제적으로 `` 작은 따옴표를 사용해서 테이블 이름이라고 명시할 수 있다. 
CREATE TABLE `order`(
  id INT PRIMARY KEY
  cusotmer_order VARCHAR(50),
  product_name VARCHAR(20NOT NULL,
  quantity INT NOT NULL
  order_date DATE NOT NULL    
);
cs

→ DATE 데이터 타입 : 날짜 정보를 저장하기 위한 데이터 타입이다. YYYY-MM-DD 형식의 날짜를 저장할 수 있으며, 날짜와 관련된 연산을 수행할 수 있다.

ex) 2023-03-06, 20230306, 2023/03/06 --> 일관된 형식으로 저장하는 것이 좋음.

 

<결과 화면>