프로그래밍 언어/SQL

데이터베이스 언어 정리 (DDL / DML / DCL) (1) - DDL 편

gamjadori 2024. 2. 3. 10:45
728x90

<데이터베이스 언어>

  1. DDL (데이터 정의어): 데이터베이스 생성 (스키마 표현)
SQL 명령어 기능
CREATE 데이터베이스 구조 생성 (객체 생성)
ALTER (ALTER ~ ADD) 데이터베이스 구조 수정 (릴레이션 스키마 수정)
ALTER (ALTER ~ DROP) 데이터베이스 구조 수정 (릴레이션 스키마 수정)
ALTER (ALTER ~ MODIFY) 데이터베이스 구조 수정 (릴레이션 스키마 수정)
DROP 데이터베이스 구조 삭제 (객체 삭제)

 

<DDL 실습>

<테이블 생성>

  • CREATE TABLE 테이블 이름 ();
  • INT: 숫자 자료형
  • VARCHAR(숫자): 문자열 자료형
  • TINYINT: 작은 숫자 자료형
  • DATE: 날짜 자료형
CREATE TABLE people(
    person_id INT,
    person_name VARCHAR(10),
    age TINYINT,
    birthday DATE
);

<결과>

 

<테이블 수정>

  • 테이블 이름 변경: ALTER TABLE 테이블 이름 RENAME TO 수정할 테이블 이름
  • 컬럼 수정: CHANGE COLUMN 컬럼 이름 수정할 컬럼이름 데이터 타입
-- 테이블 이름 수정
ALTER TABLE people RENAME TO friends,
-- 컬럼 자료형 변경
CHANGE COLUMN person_id person_id TINYINT,
-- 컬럼 이름 변경
CHANGE COLUMN person_name person_nickname VARCHAR(10),
-- 컬럼 삭제
DROP COLUMN birthday,
-- 컬럼 추가
ADD COLUMN is_married TINYINT AFTER age;

<결과>

 

 

<테이블 삭제>

DROP TABLE friends;

<결과>

  • 제약사항 걸어서 테이블 생성
CREATE TABLE people (
    person_id INT AUTO_INCREMENT PRIMARY KEY,
    person_name VARCHAR(10) NOT NULL,
    nickname VARCHAR(10) UNIQUE NOT NULL,
    age TINYINT UNSIGNED,
    is_married TINYINT DEFAULT 0
);
  • INT AUTO_INCREMENT: 자동으로 숫자를 입력 (1부터 시작)
  • INT AUTO_INCREMENT PRIMARY KEY으로 해줘야 함
  • VARCHAR(10) NOT NULL: 글자수 10 제한, NULL 금지
  • UNSIGNED: 컬럼에서 음수를 포함하지 않는다

<결과>

 

<데이터 삽입>

  • INSERT INTO people (컬럼이름1, 컬럼이름2) VALUES (입력할 값1, 입력할 값2);
INSERT INTO people
(person_id, person_name, age, nickname)
VALUES
(1, '홍길동2', 24, '반이오타1')
(2, '홍길동2', 24, '반이오타2')
(3, '홍길동2', 24, '반이오타3')
(4, '홍길동2', 24, '반이오타4');

<결과 확인>

SELECT * FROM people;

CREATE TABLE user(
    user_id INT(11) AUTO_INCREMENT NOT NULL,
    user_name VARCHAR(100) NOT NULL,
    user_telno VARCHAR(50) NULL,
    PRIMARY KEY(user_id)
);
** PRIMARY KEY(): 다른 항목과 절대로 중복되어 나타날 수 없는 단일 값(unique)

  • PRIMARY KEY()
    • 다른 항목과 절대로 중복되어 나타날 수 없는 단일 값(unique)
    • null(아무런 값이 없는 상태) 값을 가질 수 없음
CREATE TABLE user_prod(
    sal_no INT(11) AUTO_INCREMENT NOT NULL,
    user_id INT(11),
    prod_id INT(11),
    sal_date DATE,
    sal_count INT(11),
    PRIMARY KEY(sal_no),
    FOREIGN KEY(user_id) REFERENCES user(user_id),
    FOREIGN KEY(prod_id) REFERENCES prod(prod_id)
);
  • FOREIGN KEY() REFERENCES 테이블 이름 user (): 한 테이블을 다른 테이블과 연결해주는 역할
  • FOREIGN KEY 제약 조건을 설정할 때 참조되는 테이블의 필드는 반드시 UNIQUE나 PRIMARY KEY 제약 조건이 설정

 

<데이터 수정>

  • UPDATE 테이블 명 SET 업데이트할 칼럼 = 값 WHERE 조건식;
UPDATE prod set cust_id = 1 WHERE prod_id = 1;

 

<데이터 삭제>

  • 제약이 걸린 데이터 삭제할 때는 참조된 데이터를 먼저 지워야 함.
DELETE FROM cust WHERE cust_id = 1;

>> 참조된 데이터가 있어서 문구가 뜸 (데이터를 먼저 지우고 테이블을 삭제해야 함)