MySQL에 대해 알아보자
MySQL은 관계형 데이터베이스 관리 시스템(RDBMS)으로서, 오픈 소스로 개발되었다. MySQL은 사용하기 쉽고 확장성이 뛰어나며, 다양한 플랫폼에서 동작할 수 있다.
MySQL은 데이터를 테이블로 구성하며, 각 테이블은 열(Column)과 행(Row)으로 구성된다. Column은 테이블의 속성을 나타내고, Row은 테이블에 저장되는 실제 데이터를 나타낸다. MySQL은 SQL(Structured Query Language)을 사용하여 데이터베이스에 쿼리를 실행하고 데이터를 조작할 수 있다.
이전 포스트에서 간단한 웹을 만들었는데, 이제 웹의 DB를 구축해보자.
Window 버전
MySQL 다운로드
MySQL Workbench를 활용해서 설치한 MySQL을 확인할 수 있다.
MySQL Workbench 다운로드
새로운 Connection을 추가한 후, 설정한 root의 password를 입력하면 된다. 다음과 같은 화면이 나오면 성공!
CREATE database DB01;
입력 이후 cmd+ENTER
키를 누르면 해당 쿼리 1개만 실행된다.
실행 이후 왼쪽 SCHEMAS 탭의 Refresh 아이콘을 클릭하면 다음과 같이 DB01 DB가 생성된 것을 확인할 수 있다.
SHOW databases;
DROP database DB01;
다시 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`));
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 제약 속성은 해당 열에 값이 지정되지 않은 경우 사용될 기본 값입니다. 열에 기본 값이 지정되면 해당 열에 값을 명시적으로 입력하지 않아도 기본 값이 자동으로 할당됩니다.
desc table01;
DROP table table01;
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의 데이터를 추가할 수 있다.
SELECT * FROM table01;
SELECT * FROM table01 WHERE salary is null;
SELECT * FROM table01 WHERE salary is not null;
업데이트를 실행하기 전 MySQL Workbench에서 설정을 해주어야 한다.
Preferences > SQL Edior > 아래쪽에 safe.. 어쩌구 체크박스 해제
SELECT * FROM table01 WHERE salary is not null;
DELETE FROM table01 WHERE id = 3;
-- 1) 인덱스 초기화가 일어나지 않는다.
DELETE FROM table01;
-- 2) 인덱스를 초기화한다.
TRUNCATE table01;
-- 3) row 삭제
DELETE FROM table01 WHERE id = 3;
TRUNCATE를 실행하고 새로 INSERT 문을 실행하게 되면 인덱스가 초기화되어 다음과 같은 결과가 나온다.
SELECT count(*) from table01;
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에서 확인해보면 다음과 같이 똑같은 결과가 나온다.
-- 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;
다음 포스트로 이어집니다~!