MySQL + MySQL Workbench 설치방법 (윈도우)
MySQL 공식 웹사이트 접속:
먼저 MySQL 공식 웹사이트로 이동합니다. MySQL Downloads 페이지로 이동합니다.
MySQL Community Server 선택:
페이지에 접속하면 여러 MySQL 제품이 나열됩니다. 여기서 "MySQL Community (GPL) Downloads" 섹션에서 "MySQL Community Server"를 찾아 선택합니다.
운영 체제 선택:
MySQL Community Server를 사용할 운영 체제를 선택합니다. 여기서는 Windows를 선택합니다.
다운로드 페이지로 이동:
선택한 운영 체제에 따라 다운로드 페이지로 이동합니다. 여기서는 Windows용이므로 "Windows (x86, 64-bit), MSI Installer"를 선택합니다.
다운로드 및 설치:
"No thanks, just start my download"를 클릭하여 MSI 파일을 다운로드합니다.
다운로드가 완료되면 다운로드한 MSI 파일을 실행하여 MySQL Community Server 설치를 시작합니다.
설치 과정에서 필요한 구성 및 설정을 진행합니다. (루트 비밀번호 등)
설치가 완료되면 MySQL Server가 자동으로 시작됩니다.
MySQL Workbench(GUI 프로그램) 설치:
MySQL 데이터베이스를 시각적으로 관리하기 위해 MySQL Workbench를 설치할 수 있습니다.
MySQL Workbench 다운로드 페이지에서 다운로드하고 설치합니다.
mysql 서버 실행 여부 확인
윈도우 검색창에서 ‘서비스’ 앱 검색 및 클릭
서비스 목록에서 MySQL이 이름에서 상태가
실행 중
이라고 뜨면 서버가 실행 중 상태입니다.만약 서버가 꺼져 있거나, 상태값이 뜨지 않는다면
MySQL80
에서 마우스 오른쪽 클릭 후 속성메뉴로 들어갑니다. → 이후 서비스 상태: 시작을 눌리면 됩니다.MySQL + MySQL Workbench 설치방법 (맥)
Homebrew 설치:
Homebrew가 설치되어 있지 않다면 터미널을 열고 다음 명령어를 실행하여 Homebrew를 설치합니다.
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
설치가 완료되면 터미널을 다시 시작합니다.
MySQL 설치:
Homebrew를 사용하여 MySQL을 설치합니다.
brew install mysql
명령을 실행하면 Homebrew가 필요한 파일을 다운로드하고 MySQL을 설치합니다.
MySQL 시작:
MySQL을 설치하면 Homebrew에서 자동으로 MySQL 서버가 시작됩니다. 만약 자동으로 시작되지 않았다면 다음 명령어로 수동으로 시작할 수 있습니다.
# brew를 사용해서 mysql을 실행시키는 명령어
>> brew services start mysql
# brew를 사용해서 mysql을 중지시키는 명령어
>> brew services stop mysql
루트 비밀번호 설정:
MySQL 서버가 시작된 후에는 루트 계정의 초기 비밀번호가 설정되어 있습니다. 다음 명령어로 MySQL에 로그인합니다.
mysql -u root
로그인 후에는 비밀번호를 설정합니다.
# password에는 본인이 비밀번호로 설정할 값을 ' ' 안에 넣어주세요
# 예를 들어 비밀번호를 1234로 설정하고 싶으면
# ALTER USER 'root'@'localhost' IDENTIFIED BY '1234';
ALTER USER 'root'@'localhost' IDENTIFIED BY 'password';
새로운 비밀번호를 설정한 후 MySQL을 나갑니다.
exit
MySQL Workbench 사용방법
데이터 베이스 연결
데이터 베이스 생성
1. 데이터베이스 생성
-- mydatabase라는 이름의 데이터베이스 생성
CREATE DATABASE mydatabase;
2. 데이터베이스 목록 조회
-- 모든 데이터베이스 목록 조회
SHOW DATABASES;
3. 데이터베이스 사용
-- mydatabase 데이터베이스 사용
USE mydatabase;
4. 데이터베이스 삭제 (IF EXISTS 옵션 사용)
-- mydatabase 데이터베이스 삭제 (만약 존재하면)
DROP DATABASE IF EXISTS mydatabase;
SQL의 주요 언어 유형
DDL (Data Definition Language): 데이터베이스의 구조를 정의하는데 사용되는 언어입니다.
CREATE
: 새로운 테이블이나 데이터베이스 생성ALTER
: 기존 테이블이나 데이터베이스 구조 수정DROP
: 테이블이나 데이터베이스 삭제DML (Data Manipulation Language): 데이터베이스 내의 데이터를 처리하는 데 사용되는 언어입니다.
SELECT
: 데이터베이스에서 데이터 조회INSERT
: 테이블에 새로운 데이터 추가UPDATE
: 테이블의 기존 데이터 수정DELETE
: 테이블에서 데이터 삭제DCL (Data Control Language): 데이터베이스 사용자의 권한을 관리하고 데이터 접근을 제어하는데 사용되는 언어입니다.
GRANT
: 사용자에게 특정 데이터에 대한 접근 권한 부여REVOKE
: 사용자의 특정 데이터 접근 권한 제거TCL (Transaction Control Language): 데이터베이스 내의 트랜잭션을 관리하는데 사용되는 언어입니다.
COMMIT
: 트랜잭션을 완료하고, 데이터베이스 변경사항을 영구적으로 저장ROLLBACK
: 트랜잭션을 취소하고, 마지막 COMMIT
이후의 모든 변경사항을 되돌림SAVEPOINT
: 트랜잭션 내 특정 지점을 마킹하여 필요시 그 지점으로 되돌릴 수 있음각각의 언어 유형은 데이터베이스의 다양한 측면을 다루며, 데이터베이스의 구조를 정의하고(DDL), 데이터를 처리하며(DML), 사용자 권한을 관리하고(DCL), 트랜잭션을 제어하는(TCL) 역할을 합니다. 이러한 분류를 통해 데이터베이스 시스템의 효과적인 관리와 운영이 가능해집니다.
MySQL User 데이터
관리자 권한: 유저와 관련된 작업을 수행하기 위해서는 MySQL에서 관리자(보통 root) 권한이 필요
> mysql -u root -p # 유저 로그인
1. mysql 유저 확인
mysql> USE mysql;
mysql> select * from user;
2. mysql 유저 생성
mysql> USE mysql;
mysql> CREATE USER 'username'@'localhost' IDENTIFIED BY 'user_password';
3. 사용자 비밀번호 변경
mysql> SET PASSWORD FOR 'username'@'%' = '신규비밀번호';
4. 권한 부여 (모든 데이터베이스에 대한 권한 부여)
> GRANT ALL PRIVILEGES ON *.* TO 'username'@'localhost';
> FLUSH PRIVILEGES; # 변경된 권한 적용
> SHOW GRANTS FOR 'username'@'localhost'; # 부여된 권한 확인
> SHOW GRANTS; # 현재 로그인한 유저의 권한 확인
5. 사용자 삭제
mysql> USE mysql;
mysql> DROP USER 'username'@'%';
MySQL 데이터베이스 Schema 구성 (DDL)
CREATE TABLE [테이블명] 관련 명령어
PRIMARY KEY
테이블의 주요 식별자(primary key)를 정의합니다. 주로 유일성을 보장하고 검색 속도를 향상시키기 위해 사용됩니다.
CREATE TABLE users (
id INT PRIMARY KEY,
username VARCHAR(50)
);
AUTO_INCREMENT
AUTO_INCREMENT는 숫자 자동 증가 속성을 가진 칼럼에 사용됩니다. 이 옵션을 사용하면 해당 칼럼의 값이 자동으로 1씩 증가합니다.
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50)
);
NOT NULL
NOT NULL 제약은 해당 칼럼에 NULL 값을 허용하지 않도록 합니다. 즉, 해당 칼럼에는 항상 값이 존재해야 합니다.
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL
);
UNIQUE
UNIQUE 제약은 해당 칼럼에 중복된 값을 허용하지 않습니다.
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL,
email VARCHAR(100) UNIQUE
);
DEFAULT
DEFAULT 옵션은 새로운 레코드가 삽입될 때 해당 칼럼에 지정된 기본값을 사용합니다.
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL,
email VARCHAR(100) UNIQUE,
is_business VARCHAR(10) DEFAULT False
);
CHECK
CHECK 제약은 해당 칼럼에 저장될 수 있는 값의 범위나 조건을 지정합니다.
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL,
email VARCHAR(100) UNIQUE,
is_business VARCHAR(10) DEFAULT False,
age INT CHECK (age >= 18)
);
연습) 2개의 테이블 생성
users
테이블CREATE TABLE users (
user_id INT PRIMARY KEY,
name VARCHAR(255),
age INT
);
INSERT INTO users (user_id, name, age)
VALUES (1, 'Alice', 25),
(2, 'Bob', 30),
(3, 'Charlie', 22),
(4, 'David', 33),
(5, 'Eve', 28);
orders
테이블CREATE TABLE orders (
order_id INT PRIMARY KEY,
user_id INT,
order_date DATE
);
INSERT INTO orders (order_id, user_id, order_date)
VALUES (101, 1, '2023-01-01'),
(102, 2, '2023-02-01'),
(103, 1, '2023-02-15'),
(104, 3, '2023-03-01'),
(105, 4, '2023-03-10');
MySQL 데이터 타입
CHAR(M)
과 VARCHAR(M)
의 차이CHAR(M)
고정 길이 문자열 저장:
CHAR(M)
은 항상 M개의 문자를 저장합니다.길이 범위: 0에서 255 사이의 길이를 가질 수 있습니다.
공간 사용: M 길이의 고정 공간을 사용합니다. 저장된 문자열이 M보다 짧으면 나머지 공간은 공백으로 채워집니다.
사용 사례: 길이가 일정하거나 변하지 않는 데이터에 적합합니다. 예를 들어, 성별, 국가 코드 등.
VARCHAR(M)
가변 길이 문자열 저장:
VARCHAR(M)
은 최대 M개의 문자를 저장할 수 있으며, 실제 저장되는 문자열의 길이에 따라 공간을 사용합니다.길이 범위: 0에서 65,535 사이의 길이를 가질 수 있습니다.
공간 사용: 실제 문자열 길이에 따라 가변적인 공간을 사용합니다. 추가적으로, 문자열 길이를 저장하기 위한 1~2바이트의 추가 공간이 필요합니다.
사용 사례: 길이가 예측 불가능하거나 변할 수 있는 데이터에 적합합니다. 예를 들어, 사용자 이름, 설명 텍스트 등.
차이점 요약
길이:
CHAR
는 고정 길이, VARCHAR
는 가변 길이입니다.공간 효율성:
CHAR
는 항상 고정된 공간을 사용하지만, VARCHAR
는 실제 데이터 길이에 따라 공간을 사용합니다.적용 사례:
CHAR
는 데이터 길이가 일정한 경우에, VARCHAR
는 길이가 변할 수 있는 경우에 적합합니다.DATETIME
과 TIMESTAMP
의 차이DATETIME
범위:
1000-01-01 00:00:00
부터 9999-12-31 23:59:59
까지.저장 크기: 8바이트.
시간대에 무관:
DATETIME
값은 시간대 변환 없이 그대로 저장됩니다.사용 사례: 특정 사건이 발생한 정확한 시점을 기록할 때 사용. 예를 들어, 사용자의 생일이나 기념일 등.
TIMESTAMP
범위:
1970-01-01 00:00:00
부터 2037-01-19 03:14:07
까지.저장 크기: 4바이트.
시간대 인식:
TIMESTAMP
는 UTC로 저장되며, 조회 시 서버의 시간대 설정에 따라 변환됩니다.자동 갱신:
INSERT
나 UPDATE
연산 시 현재 시간으로 자동 갱신될 수 있습니다.사용 사례: 레코드의 생성 또는 수정 시간을 기록할 때 주로 사용. 예를 들어, 게시물의 작성 시간이나 마지막 수정 시간 등.
실제 사용 예시
DATETIME 사용 예시: 사용자 프로필
date_of_birth DATETIME
: 사용자의 생일 데이터의 경우 회원 가입 이후 변경되지 않으며, 시간대에 영향을 받지 않는다.CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100),
email VARCHAR(100),
date_of_birth DATETIME
);
TIMESTAMP 사용 예시: 블로그 게시물
created_at TIMESTAMP
: 게시물이 처음 생성된 시간. 이 필드는 게시물이 만들어질 때 현재 시간으로 자동 설정됩니다.updated_at TIMESTAMP
: 게시물이 마지막으로 수정된 시간. 이 필드는 게시물이 수정될 때마다 현재 시간으로 자동 갱신됩니다.CREATE TABLE blog_posts (
id INT AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(255),
content TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
*사용시 고려사항
시간대: 국제화된 애플리케이션에서는 시간대 변환의 중요성 때문에
TIMESTAMP
가 유리할 수 있습니다.범위와 저장 크기:
DATETIME
은 더 넓은 범위를 커버하며 더 많은 저장 공간을 사용합니다.자동 갱신의 필요성: 레코드의 생성 또는 수정 시간을 자동으로 추적하고 싶다면
TIMESTAMP
가 적합합니다.DATETIME
은 시간대에 무관한 넓은 범위의 날짜와 시간을 8바이트로 저장TIMESTAMP
는 시간대를 인식하는 좁은 범위의 날짜와 시간을 4바이트로 저장하며, 자동 갱신 기능
.png)
.png)
.png)
