본문 바로가기
MYSQL

CREATE / INSERT 절

by 융디's 2024. 5. 30.
728x90
CREATE / INSERT 절

CREATE / INSERT 절

CREATE 절

CREATE TABLE [테이블 명] (
    [컬럼 명 1]  [데이터 타입]  [제약 조건],
    [컬럼 명 2]  [데이터 타입]  [제약 조건],
    ...
    CONSTRAINT [제약 조건 명]  [제약 조건 정의],
    ...
);

CTEATE TABLE 테이블명

  • 테이블을 생성하는 명령어
  • 선택적으로 각 열에 적용할 제약 조건 정의
  • NOT NULL, UNIQUE, PRIMARY KEY 등 존재
  • column
    • 테이블에 포함될 열 이름 지정
  • datatype
    • 열의 데이터 유형 정의
    • INT, VARCHAR, DATE 등 존재
  • constraints(제약조건)
    • 데이터 입력 시 지켜야 할 조건을 정의하며, 규칙을 위반하는 데이터를 허용하지 않는다.

CONSTRANIT [제약조건 명] CHECK (제약 조건)

  • 명시적으로 제약 조건을 정의하는 방식
  • 제약 조건은 테이블 정의의 일부로서 별도의 이름을 가지게 된다.
  • 필요에 따라 나중에 제약 조건을 수정하거나 삭제할 수 있다.
    CREATE TABLE students (
        student_id INT PRIMARY KEY,  -- 고유키
        first_name VARCHAR(50) NOT NULL, -- NULL 값 허용 안함
        last_name VARCHAR(50) NOT NULL, -- NULL 값 허용 안함
        email VARCHAR(100) UNIQUE, -- 열에 중복되지 않는 값을 가지도록 하는 제약 
        date_of_birth DATE,
        -- 추가 제약 조건 : 학생의 생년월일이 현재 날짜 이전이어야한다. 
        CONSTRAINT chk_date_of_birth CHECK (date_of_birth <= CURDATE())
    );

[칼럼 명] [타입] CHECK (제약 조건)

  • 열을 정의할 때 직접 제약 조건을 지정하는 방식
  • 제약 조건은 열의 정의 부분에 포함되어 있으며, 별도의 이름이 존재하지 않는다.
  • 제약 조건이 해당 열에 대해만 적용되고, 다른 열에는 적용되지 않을 때 유용
  • 만약 조건이 충족되지 않으면, 해당 행에 대한 삽입 또는 업데이트를 거부
-- 나이가 양수인지 확인하는 조건
CREATE TABLE users (
    id INT PRIMARY KEY,
    name VARCHAR(100),
    age INT CHECK (age >= 0)
);

제약 조건(Constraint) 종류

데이터의 무결성을 지키기 위해 데이터를 입력받을 때 실행되는 검사 규칙
  • CREATE 문으로 테이블을 생성할 때나, ALTER 문으로 필드를 추가할 때 설정
  1. NOT NULL
    • NULL을 허용하지 않는다.
    -- 모든 열의 값이 NULL을 허용 하지 않는다.
    CREATE TABLE users (
        id INT ,
        name VARCHAR(50) NOT NULL,
        email VARCHAR(100) NOT NULL,
        phone VARCHAR(20) NOT NULL
    );
  1. UNIQUE
    • 서로 다른 값을 가져야만 한다
    • NULL 값은 허용
    -- 이메일 주소는 고유해야한다.
    CREATE TABLE users (
        id INT AUTO_INCREMENT PRIMARY KEY,
        name VARCHAR(50),
        email VARCHAR(100) UNIQUE,
        phone VARCHAR(20)
    );
    
    -- 여러 열을 조합하여 고유성 지정
    CREATE TABLE employees (
        id INT AUTO_INCREMENT PRIMARY KEY,
        first_name VARCHAR(50),
        last_name VARCHAR(50),
        UNIQUE (first_name, last_name)
    );
  1. PRIMARY KEY
    • 테이블 내의 각 레코드를 고유하게 식별하는 데 사용 → 해당 필드는 기본 키다!
    • NOT NULL과 UNIQUE 제약 조건의 특징을 모두 가진다.
    -- id를 주키로 설정
    CREATE TABLE users (
        id INT  PRIMARY KEY,
        name VARCHAR(50),
        email VARCHAR(100),
        phone VARCHAR(20)
    );
  1. FOREIGN KEY
    • 특정 테이블의 칼럼이 특정 테이블의 칼럼을 참조하게 한다.
    • REFERENCES를 사용하여 외래 키가 참조하는 테이블과 열을 지정한다.
    • 외래 키를 정의할 때 외래 키 열이 참조하는 열이 반드시 해당 열의 기본 키 또는 UNIQUE 해야 한다.

    < 외래 키 생성 및 삭제 예시 >

    Department 테이블Employee 테이블이 존재할 때,
    Employee 테이블의 DepartmentID 열이 Department 테이블의 DepartmentID 열을 참조할 때 외래 키 사용
    1. 테이블 생성 시 외래 키 정의
      CREATE TABLE Departments (
          DepartmentID INT PRIMARY KEY,
          DepartmentName NVARCHAR(50) NOT NULL
      );
      
      CREATE TABLE Employees (
          EmployeeID INT PRIMARY KEY,
          FirstName NVARCHAR(50) NOT NULL,
          LastName NVARCHAR(50) NOT NULL,
          DepartmentID INT,
          //FOREIGN KEY (외래키열) REFERENCES 참조테이블(참조열)
          FOREIGN KEY (DepartmentID) REFERENCES Departments(DepartmentID)
      );
    1. 기존 테이블에 외래 키 추가
      ALTER TABLE Employees
      ADD CONSTRAINT FK_Employees_Departments
      FOREIGN KEY (DepartmentID)
      REFERENCES Departments(DepartmentID);
    1. 외래 키 제약 조건 삭제
      ALTER TABLE Employees
      DROP CONSTRAINT FK_Employees_Departments;

    • 외래 키의 ON DELETE CASCADE 옵션
      • 부모 테이블에서 행이 삭제될 때 관련된 자식 테이블의 행도 함께 자동으로 삭제

      < 예시 >

      주문 테이블은 사용자 테이블을 참조하는 외래 키가 존재
      → 해당 옵션 사용시 사용자가 삭제될 때 관련된 모든 주문도 함께 삭제
      CREATE TABLE orders (
          order_id INT AUTO_INCREMENT PRIMARY KEY,
          user_id INT,
          order_date DATE,
          FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
      );

    • 외래 키의 ON DELETE SET NULL 옵션
      • 부모 키가 삭제될 때 외래 키의 값을 NULL로 저장

      < 예시 >

      특정 사용자가 삭제되면, 이 사용자가 참조하는 모든 주문의 값이 NULL로 설정
      CREATE TABLE orders (
          order_id INT AUTO_INCREMENT PRIMARY KEY,
          user_id INT,
          order_date DATE,
          FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE SET NULL
      );

    • 외래 키의 ON UPDATE SET NULL 옵션
      • 부모 테이블의 기본 키가 업데이트 될 때, 해당 외래 키를 참조하는 자식 테이블의 행들도 외래 키값이 자동으로 NULL로 설정
      • 예시
        사용자 ID가 변경되면, 해당 사용자를 참조하는 모든 주문의 값은 자동으로 NULL로 설정
        CREATE TABLE orders (
            order_id INT AUTO_INCREMENT PRIMARY KEY,
            user_id INT,
            order_date DATE,
            FOREIGN KEY (user_id) REFERENCES users(id) ON UPDATE SET NULL
        );
  1. DEFAULT
    • 새로운 레코드가 삽입될 때 열에 자동으로 할당되는 기본값을 정의
      -- DEFAULT를 사용하여 새로운 사용자가 추가될때 가입일이 자동으로 설저되게 하기
      CREATE TABLE users (
          id INT AUTO_INCREMENT PRIMARY KEY,
          name VARCHAR(50),
          email VARCHAR(100),
          registration_date DATE DEFAULT CURRENT_DATE
      );
      
      -- DEFAULT를 사용하여 문자열에 대한 기본 값을 지정할 수 있다. 
      CREATE TABLE example (
          id INT AUTO_INCREMENT PRIMARY KEY,
          name VARCHAR(50) DEFAULT 'Anonymous'
      );
  1. AUTO_INCREMENT
    • 1부터 시작하여 새로운 레코드가 추가될 때마다 1씩 증가된 값을 자동으로 저장한다.
    • 해당 키워드 다음에 대입 연산자(=)를 사용하여 시작 값을 변경할 수 있다.
      -- 새로운 레코드가 추가될때마다 id 값이 자동으로 증가
      CREATE TABLE users (
          id INT AUTO_INCREMENT PRIMARY KEY,
          name VARCHAR(50),
          email VARCHAR(100)
      );
      
      -- id의 시작열을 100부터 시작하여 1씩 증가 
      CREATE TABLE users (
          id INT AUTO_INCREMENT PRIMARY KEY = 100,
          name VARCHAR(50),
          email VARCHAR(100)
      );

INSERT 절

데이터베이스 테이블에 새로운 레코드를 삽입하는 데 사용된다.


@기본 구조

INSERT INTO 테이블명 (열 1, 열 2, ...) VALUES (값 1, 값 2, ...);

  • 각 열은 해당 열의 데이터 유형과 일치하는 값만 삽입 가능
  • INSERT 문을 실행하기 전에 삽입하려는 테이블이 존재해야 한다.

< 예시 >

  • users 테이블에 유저 명과 이메일에 각각 값을 가지고 새로운 레코드를 추가
INSERT INTO users (username, email) VALUES ('user123', 'user123@example.com');

728x90

'MYSQL' 카테고리의 다른 글

TCL명령어 : 트랜잭션이란?  (1) 2024.06.01
MYSQL 명령어 총 정리  (0) 2024.05.26
SUBQUERY  (0) 2024.05.07
조인  (0) 2024.05.07
GROUP BY  (0) 2024.05.05