Mac에서 MySQL 설치 및 실행

zihooy·2023년 5월 22일
3

Web Development

목록 보기
4/8
post-thumbnail

MySQL에 대해 알아보자

🏹 MySQL이란

MySQL은 관계형 데이터베이스 관리 시스템(RDBMS)으로서, 오픈 소스로 개발되었다. MySQL은 사용하기 쉽고 확장성이 뛰어나며, 다양한 플랫폼에서 동작할 수 있다.

MySQL은 데이터를 테이블로 구성하며, 각 테이블은 열(Column)과 행(Row)으로 구성된다. Column은 테이블의 속성을 나타내고, Row은 테이블에 저장되는 실제 데이터를 나타낸다. MySQL은 SQL(Structured Query Language)을 사용하여 데이터베이스에 쿼리를 실행하고 데이터를 조작할 수 있다.

🏹 MySQL 설치

이전 포스트에서 간단한 웹을 만들었는데, 이제 웹의 DB를 구축해보자.

Window 버전
MySQL 다운로드

Mac OS 버전
블로그
비밀번호 초기화

🏹 MySQL 실행

MySQL Workbench를 활용해서 설치한 MySQL을 확인할 수 있다.
MySQL Workbench 다운로드

새로운 Connection을 추가한 후, 설정한 root의 password를 입력하면 된다. 다음과 같은 화면이 나오면 성공!

🏹 MySQL Query

Database 생성하기

CREATE database DB01;
입력 이후 cmd+ENTER 키를 누르면 해당 쿼리 1개만 실행된다.
실행 이후 왼쪽 SCHEMAS 탭의 Refresh 아이콘을 클릭하면 다음과 같이 DB01 DB가 생성된 것을 확인할 수 있다.

Database 목록 확인하기

SHOW databases;

Dababase 삭제하기

DROP database DB01;

Table 생성하기

다시 Database를 생성한 후 Table을 생성한다.
1. Schema 탭에서 DB01 선택 > 하위 탭 중 Tables 위에서 우클릭 > Create Table...
2. Table 명 입력 후 Column 명 입력
3. Datatype 선택
4. Column 규칙 설정

Apply 버튼을 누르면 아래와 같은 쿼리를 실행한다.

CREATE TABLE `DB01`.`table01` (
  `id` INT NOT NULL,
  `name` VARCHAR(10) NULL,
  `age` INT NULL,
  `salary` INT NULL,
  PRIMARY KEY (`id`));

Table의 Column에 들어갈 수 있는 규칙

Primary Key (기본 키): Primary Key는 열 또는 열의 조합으로 구성되며, 테이블에서 각 행을 고유하게 식별하는 역할을 합니다. 기본 키는 중복된 값을 허용하지 않으며, Null 값을 허용하지 않는 경우가 많습니다.

Not Null: Not Null 제약 속성은 해당 열에 Null 값을 허용하지 않습니다. 즉, 해당 열은 반드시 값이 있어야 합니다.

Unique (고유): Unique 제약 속성은 해당 열에 중복된 값을 허용하지 않습니다. Unique 제약은 Primary Key와 유사하지만, 여러 열의 조합으로도 정의할 수 있습니다.

Auto Increment (자동 증가): 기본 키 열에 대해 사용되며, 이전 기본 키 값보다 1씩 증가하는 값으로 자동으로 할당됩니다.

Foreign Key (외래 키): Foreign Key는 다른 테이블의 Primary Key와 관련된 열입니다. 외래 키를 사용하여 테이블 간의 관계를 설정하고 참조 무결성을 유지할 수 있습니다. 외래 키는 참조하는 테이블의 Primary Key 값과 일치해야 합니다.

Check: Check 제약 속성은 해당 열에 저장될 수 있는 값의 범위나 조건을 지정합니다. Check 제약을 사용하여 특정 값의 유효성을 확인하고, 허용되지 않는 값을 거부할 수 있습니다.

Default (기본 값): Default 제약 속성은 해당 열에 값이 지정되지 않은 경우 사용될 기본 값입니다. 열에 기본 값이 지정되면 해당 열에 값을 명시적으로 입력하지 않아도 기본 값이 자동으로 할당됩니다.

Table의 Column 확인하기

desc table01;

Table 삭제하기

DROP table table01;

Table에 Row 추가(CRUD)

table을 다시 생성한 후 row를 추가해보자.
다음의 방법은 column 명을 지정하지 않아서 묵시적 insert 방법으로 불리기도 한다.

INSERT into table01 values(1, '호랑이1', 10, 1000);
INSERT into table01 values(2, '호랑이2', 20, 2000);
INSERT into table01 values(3, '호랑이3', 30, 3000);
INSERT into table01 values(4, '호랑이4', 40, 4000);

cmd + Shift + Enter 키를 누르면 선택한 block의 쿼리가 동시에 실행된다.

명시적 insert 방법은 다음과 같다.

INSERT into table01(id, name, age, salary) values(5, '호랑이5', 50, 5000);

묵시적 vs 명시적 insert 방법을 비교하기 위해 다음의 코드를 살펴보자.

INSERT into table01 values(6, '호랑이6', 60); -- 에러
INSERT into table01(id, name, age) values(6, '호랑이6', 60);

위와 같이 명시적으로 표현하면, 임의로 넣고싶은 column만 추가할 수 있으며, 순서에 상관없이 column의 데이터를 추가할 수 있다.

Table Read

SELECT * FROM table01;

SELECT * FROM table01 WHERE salary is null;

SELECT * FROM table01 WHERE salary is not null;

Table Update

업데이트를 실행하기 전 MySQL Workbench에서 설정을 해주어야 한다.
Preferences > SQL Edior > 아래쪽에 safe.. 어쩌구 체크박스 해제

SELECT * FROM table01 WHERE salary is not null;

Table Delete

DELETE FROM table01 WHERE id = 3;

-- 1) 인덱스 초기화가 일어나지 않는다.
DELETE FROM table01;
-- 2) 인덱스를 초기화한다.
TRUNCATE table01;
-- 3) row 삭제 
DELETE FROM table01 WHERE id = 3;

TRUNCATE를 실행하고 새로 INSERT 문을 실행하게 되면 인덱스가 초기화되어 다음과 같은 결과가 나온다.

Table Row 개수 확인

SELECT count(*) from table01;

🏹 Terminal에서 확인

 zihooy 🍒   /  mysql -u root -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 14
Server version: 8.0.33 Homebrew

Copyright (c) 2000, 2023, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> use DB01;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> SELECT * FROM table01;
+----+------------+------+--------+
| id | name       | age  | salary |
+----+------------+------+--------+
|  1 | 호랑이1    |   10 |   1000 |
|  2 | 호랑이2    |   20 |   2000 |
|  3 | 호랑이3    |   30 |   3000 |
|  4 | 호랑이4    |   40 |   4000 |
+----+------------+------+--------+
4 rows in set (0.00 sec)

mysql> INSERT into table01 values(99, '독수리', 50, 5000);
Query OK, 1 row affected (0.01 sec)

mysql> SELECT * FROM table01;
+----+------------+------+--------+
| id | name       | age  | salary |
+----+------------+------+--------+
|  1 | 호랑이1    |   10 |   1000 |
|  2 | 호랑이2    |   20 |   2000 |
|  3 | 호랑이3    |   30 |   3000 |
|  4 | 호랑이4    |   40 |   4000 |
| 99 | 독수리     |   50 |   5000 |
+----+------------+------+--------+
5 rows in set (0.01 sec)

해당 내용 실행 이후 다시 workbench에서 확인해보면 다음과 같이 똑같은 결과가 나온다.

🏹 SQL 전체 코드

-- 1. Database 생성하기
CREATE database DB01;

-- 2. Database 목록 확인하기
SHOW databases;

-- 3. Database 삭제하기
DROP database DB01;
 
-- 4. Table 생성하기 1) 사용할 Database 설정  
USE DB01;

-- 5. Table 생성하기 2) Column 생성 및 규칙 설정   
CREATE TABLE `DB01`.`table01` (
  `id` INT NOT NULL,
  `name` VARCHAR(10) NULL,
  `age` INT NULL,
  `salary` INT NULL,
  PRIMARY KEY (`id`));
  
-- 6. Table 확인하기 
SHOW tables;
  
-- 7. Table의 Column 확인하기
desc table01;

-- 8. Table 삭제하기
DROP table table01; 

-- 9. Table 생성 
CREATE TABLE `DB01`.`table01` (
  id 		INT 		NOT NULL,
  name 		VARCHAR(10),
  age 		INT,
  salary 	INT,
  PRIMARY KEY (`id`));
  
-- 10. Table에 Row 추가(CRUD): 묵시적 insert 방법
INSERT into table01 values(1, '호랑이1', 10, 1000);
INSERT into table01 values(2, '호랑이2', 20, 2000);
INSERT into table01 values(3, '호랑이3', 30, 3000);
INSERT into table01 values(4, '호랑이4', 40, 4000);

-- 10. Table에 Row 추가(CRUD): 명시적 insert 방법
INSERT into table01(id, name, age, salary) values(5, '호랑이5', 50, 5000);
-- 묵시적 vs 명시적 
-- INSERT into table01 values(6, '호랑이6', 60); //에러
INSERT into table01(id, name, age) values(6, '호랑이6', 60);

-- 11. Table Read
SELECT * FROM table01; 

SELECT * FROM table01 WHERE salary is null;
SELECT * FROM table01 WHERE salary is not null;

-- 11. Table Update
UPDATE table01 set age = 99 WHERE id = 4;

-- 12. Table Delete
-- 1) 인덱스 초기화가 일어나지 않는다.
DELETE FROM table01;
-- 2) 인덱스를 초기화한다.
TRUNCATE table01;
-- 3) row 삭제 
DELETE FROM table01 WHERE id = 3;

-- 13. 몇 개의 data가 있는지 확인
SELECT count(*) from table01;

다음 포스트로 이어집니다~!

profile
thisIsZihooLog

0개의 댓글