Constraint : 제약조건

데이터 베이스의 테이블을 생성할때 각 컬럼은 각각의 제약조건을 갖습니다.

  • NOT NULL

    NULL 값 (비어있는 값)을 저장할수 없습니다.

  • UNIQUE

    같은 값을 저장할수 없습니다.

  • PRIMARY KEY

    • NOT NULL과 UNIQUE 의 제약조건을 동시에 만족해야 합니다.

    • 그러므로 컬럼에 비어 있는 값과 동일한 값을 저장할수 없습니다.

    • 하나의 테이블에 하나의 컬럼만 조건을 설정할수 있습니다.

  • AUTO_INCREMENT

    주로 테이블의 PRIMARY KEY 데이터를 저장할때 자동으로 숫자를 1씩 증가시켜 주는 기능으로 사용합
    니다.

  • FOREIGN KEY

    다른 테이블과 연결되는 값이 저장됩니다.

    • 테이블 수정으로 FK 설정

      1
      2
      3
      4
      alter table money
      add constraint fk_user
      foreign key (user_id) # money의 user_id
      references user (user_id); # user의 user_id
    • 테이블 생성시 FK 설정

      1
      2
      3
      4
      5
      6
      create table money(
      money_id int primary key auto_increment,
      income int,
      user_id int,
      foreign key (user_id) references user(user_id)
      );
  • ON DELETE, ON UPDATE 설정

    • 참조를 받는 데이터가 수정하거나 삭제될때 참조 하는 데이터를 설정(수정,삭제 등등)

    • CASECADE : 참조 받는 데이터가 수정, 삭제하면, 참조하는 데이터도 수정 삭제

    • SET NULL : 참조 받는 데이터가 수정 삭제하면, 참조하는 데이터는 NULL로 수정

  • DEFAULT

    데이터를 저장할때 해당 컬럼에 별도의 저장값이 없으면 DEFAULT로 설정된 값이 저장됩니다.

    1
    2
    3
    4
    5
    6
    7
    create table money(
    money_id int primary key auto_increment,
    income int,
    user_id int,
    foreign key (user_id) references user(user_id)
    on update cascade on delete set null
    );

Comment and share

MYSQL 설치 (AWS에서 작업)

  1. AWS EC2 인스턴스에 Ubuntu OS에 MySQL 5.7.x 버전 설치

  2. EC2 인스턴스 생성

    • t2.micro
    • Ubuntu 18.04 버전
    • 보안그룹에서 3306 포트 추가
  3. EC2 인스턴스에 접속

  4. pem 파일 400 권한으로 변경

    1
    $ ssh -i (PEM File location) ubuntu@(AWS Public IP)
  5. apt-get 업데이트

    1
    2
    $ sudo apt-get update -y 
    $ sudo apt-get upgrade -y
  6. MySQL Server 설치

    1
    $ sudo apt-get install -y mysql-server mysql-client
  7. MySQL secure 설정

    1
    2
    3
    4
    5
    6
    $ sudo mysql_secure_installation 
    Would you like to setup VALIDATE PASSWORD plugin? N
    New password: rada
    Re-enter new password: rada Remove anonymous users? Y
    Disallow root login remotely? N
    Remove test database and access to it? Reload privilege tables now? Y
  8. MySQL 패스워드 설정

    1
    2
    3
    4
    5
    6
    $ sudo mysql
    mysql> SELECT user,authentication_string,plugin,host FROM mysql.user;
    mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITHmysql_native_password BY 'rada';
    mysql> FLUSH PRIVILEGES;
    mysql> SELECT user,authentication_string,plugin,host FROM mysql.user;
    mysql> exit
  9. 설정한 패스워드를 입력하여 접속

    1
    2
    $ mysql -u root -p  
    Enter password: rada
  10. 외부접속 설정

    1
    $ sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf
    • bind-address를 127.0.0.1을 0.0.0.0 으로 변경

      bind-address = 0.0.0.0 (모든 IP에서 접속가능)

  11. 외부접속 패스워드 설정

    1
    mysql> grant all privileges on *.* to root@'%' identified by 'rada';
  12. 서버 시작 종료 상태 확인

    1
    2
    3
    4
    $ sudo systemctl start mysql.service
    $ sudo systemctl stop mysql.service
    $ sudo systemctl restart mysql.service
    $ sudo systemctl status mysql.service
  13. 설정 후 서버 재시작으로 설정 내용 적용

    1
    $ sudo systemctl restart mysql.service
  14. password 변경 : rada로 패스워드를 변경하는 경우

    1
    mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'rada';

샘플 데이터 추가 (Local에서 작업)

  1. 서버로 sql 파일을 전송

    1
    $ scp -i ~/.ssh/rada.pem ~/Desktop/sql/* ubuntu@15.164.231.87:~/
  2. 데이터 베이스 생성

    1
    2
    3
    4
    5
    $ mysql -u root -p
    sql> create database world;
    sql> create database sakila;
    sql> create database employees;
    sql> quit
  3. 데이터 베이스에 데이터 추가

    1
    2
    3
    4
    $ mysql -u root -p world < world.sql
    $ mysql -u root -p sakila < sakila-schema.sql
    $ mysql -u root -p sakila < sakila-data.sql
    $ mysql -u root -p employees < employees.sql

Mysql Workbench 사용법

Comment and share

  • page 1 of 1

Yechan Kim

author.bio


author.job