📌데이터베이스 정의
DataBase
- 여러 사람이 공유하여 사용할 목적으로 체계화해 통합, 관리하는 데이터의 집합체
DBMS(DataBase Management System)
- 사용자와 데이터베이스 사이에서 사용자의 요구에 따라 정보를 생성해주고 데이터베이스를 관리해주는 소프트웨어
관계형 데이터베이스(RDB : Relational Database)
- 서로간에 관계가 있는 데이터 테이블들을 모아둔 데이터 저장공간
SQL(Structured Query Language)
- 데이터베이스에서 데이터를 정의, 조작, 제어하기 위해 사용하는 언어
📌SQL의 구성
데이터 정의 언어 (DDL: Data Definition Language)
- 데이터 구조를 정의하는 언어
- CREATE, ALTER, DROP 등의 명령어
데이터 조작 언어 (DML: Data Manipulation Language)
- 데이터를 조작&처리 하는 언어
- INSERT, UPDATE, DELETE, SELECT 등의 명령어
데이터 제어 언어 (DCL: Data Control Language)
- 데이터의 보안, 접근성을 제어하는 언어
- GRANT, REVOKE, COMMIT, ROLLBACK 등의 명령어
1. 데이터 정의어(Data Definition Language)
데이터베이스 생성 및 삭제
DB 조회
SHOW DATABASES;
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sakila |
| sys |
| world |
+--------------------+
DB 생성
CREATE DATABASE mydb;
mysql> create database mydb;
Query OK, 1 row affected (0.00 sec)
mysql> show databases;
+
| Database |
+
| information_schema |
| mydb |
| mysql |
| performance_schema |
| sakila |
| sys |
| world |
+
7 rows in set (0.00 sec)
DB 삭제
DROP DATABASE mydb;
mysql> drop database mydb;
Query OK, 0 rows affected (0.00 sec)
mysql> show databases;
+
| Database |
+
| information_schema |
| mysql |
| performance_schema |
| sakila |
| sys |
| world |
+
6 rows in set (0.00 sec)
유저 관리 명령어
데이터베이스 접근
USE mysql
mysql> use mysql;
Database changed
유저 정보 조회
SELECT host, user FROM user;
mysql> select host, user from user;
+
| host | user |
+
| localhost | mysql.infoschema |
| localhost | mysql.session |
| localhost | mysql.sys |
| localhost | root |
+
유저 생성
- localhost : 해당 컴퓨터에서만 사용가능한 유저
- % : 외부에서도 사용가능한 유저
- ID 중복 불가능하나, 호스트가 다르면 가능
CREATE USER 'USERNAME'@'HOST' identified by 'password'
mysql> create user 'zero'@'localhost' identified by '1234';
Query OK, 0 rows affected (0.01 sec)
mysql> create user 'zero'@'%' identified by '1234';
Query OK, 0 rows affected (0.01 sec)
mysql> select host, user from user;
+
| host | user |
+
| % | zero |
| localhost | mysql.infoschema |
| localhost | mysql.session |
| localhost | mysql.sys |
| localhost | root |
| localhost | zero |
+
6 rows in set (0.00 sec)
유저 삭제
DROP USER 'USERNAME'@'HOST'
mysql> drop user 'zero'@'localhost';
Query OK, 0 rows affected (0.01 sec)
mysql> drop user 'zero'@'%';
Query OK, 0 rows affected (0.00 sec)
mysql> select host, user from user;
+
| host | user |
+
| localhost | mysql.infoschema |
| localhost | mysql.session |
| localhost | mysql.sys |
| localhost | root |
+
4 rows in set (0.00 sec)
테이블 생성 및 조회
실습환경 구축
create database zerobase default chracter set utf8mb4;
use zerobase;
테이블 생성
CREATE TABLE tablename
(
columnname datatype,
columnname datatype,
...
)
mysql> create table mytable
-> (
-> id int,
-> name varchar(16)
-> );
Query OK, 0 rows affected (0.02 sec)
테이블 목록조회
SHOW TABLES;
mysql> show tables;
+
| Tables_in_zerobase |
+
| mytable |
+
1 row in set (0.01 sec)
테이블 상세조회
DESC tablename;
mysql> desc mytable;
+
| Field | Type | Null | Key | Default | Extra |
+
| id | int | YES | | NULL | |
| name | varchar(16) | YES | | NULL | |
+
2 rows in set (0.00 sec)
🔍ALTER문법 : 테이블 수정 및 삭제
테이블 이름 변경
ALTER TABLE tablename
RENAME new_tablename;
mysql> alter table mytable
-> rename person;
Query OK, 0 rows affected (0.01 sec)
mysql> show tables;
+
| Tables_in_zerobase |
+
| person |
+
1 row in set (0.00 sec)
컬럼 추가
ALTER TABLE tablename
ADD COLUMN columnname datatype;
mysql> alter table person
-> add column agee double;
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc person;
+
| Field | Type | Null | Key | Default | Extra |
+
| id | int | YES | | NULL | |
| name | varchar(16) | YES | | NULL | |
| agee | double | YES | | NULL | |
+
3 rows in set (0.00 sec)
컬럼 데이터타입 변경
ALTER TABLE tablename
MODIFY COLUMN columnname datatype;
mysql> alter table mytable
-> rename person;
Query OK, 0 rows affected (0.01 sec)
mysql> show tables;
+
| Tables_in_zerobase |
+
| person |
+
1 row in set (0.00 sec)
컬럼 이름과 데이터타입 변경
ALTER TABLE tablename
CHANGE COLUMN old_columnname new_columnname new_datatype;
mysql> alter table person
-> change column agee age int;
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc person;
+
| Field | Type | Null | Key | Default | Extra |
+
| id | int | YES | | NULL | |
| name | varchar(16) | YES | | NULL | |
| age | int | YES | | NULL | |
+
3 rows in set (0.00 sec)
컬럼 삭제
ALTER TABLE tablename
DROP COLUMN columnname;
mysql> alter table person
-> drop column age;
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc person;
+
| Field | Type | Null | Key | Default | Extra |
+
| id | int | YES | | NULL | |
| name | varchar(16) | YES | | NULL | |
+
2 rows in set (0.00 sec)
테이블 삭제
DROP TABLE tablename;
mysql> drop table person;
Query OK, 0 rows affected (0.01 sec)
mysql> show tables;
Empty set (0.00 sec)
2. 데이터 조작어(Data Manipulation Language)
🔍insert문법
실습환경 구축
use zerobase;
create table person(id int, name varchar(16), age int, sex char);
mysql> use zerobase;
Database changed
mysql> show tables;
Empty set (0.00 sec)
mysql> create table person
-> (
-> id int,
-> name varchar(16),
-> age int,
-> sex char
-> );
Query OK, 0 rows affected (0.02 sec)
mysql> desc person;
+
| Field | Type | Null | Key | Default | Extra |
+
| id | int | YES | | NULL | |
| name | varchar(16) | YES | | NULL | |
| age | int | YES | | NULL | |
| sex | char(1) | YES | | NULL | |
+
4 rows in set (0.00 sec)
데이터 추가
INSERT INTO tablename (column1, column2, ...)
VALUES (value1, value2, ...);
mysql> insert into person (id, name, age, sex)
-> values (1, '이효리', 43, 'F');
Query OK, 1 row affected (0.01 sec)
mysql> insert into person
-> values (2, '이상순', 48, 'M');
Query OK, 1 row affected (0.00 sec)
mysql> select * from person;
+
| id | name | age | sex |
+
| 1 | 이효리 | 43 | F |
| 2 | 이상순 | 48 | M |
+
2 rows in set (0.00 sec)
🔍select 문법
데이터 선택
SELECT column1, column2, ...
FROM tablename;
mysql> select name, age, sex from person;
+
| name | age | sex |
+
| 이효리 | 43 | F |
| 이상순 | 48 | M |
+
2 rows in set (0.00 sec)
mysql> select * from person;
+
| id | name | age | sex |
+
| 1 | 이효리 | 43 | F |
| 2 | 이상순 | 48 | M |
+
2 rows in set (0.00 sec)
🔍where 문법
조건부여
- select, update, delete 등의 문법에 조건으로 같이 사용됨
SELECT column1, column2, ...
FROM tablename
WHERE condition;
mysql> select * from person where sex='F';
+
| id | name | age | sex |
+
| 1 | 이효리 | 43 | F |
+
1 row in set (0.00 sec)
mysql> select * from person where age<30;
Empty set (0.00 sec)
mysql> select * from person where age>45;
+
| id | name | age | sex |
+
| 2 | 이상순 | 48 | M |
+
1 row in set (0.00 sec)
🔍update 문법
데이터 수정
UPDATE tablename
SET column1 = value1, column2 = value2, ...
WHERER condition;
mysql> update person set age=23 where name='이효리';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> select * from person;
+
| id | name | age | sex |
+
| 1 | 이효리 | 23 | F |
| 2 | 이상순 | 48 | M |
+
2 rows in set (0.00 sec)
🔍delete 문법
데이터 삭제
DELETE FROM tablename
WHERE condition;
mysql> delete from person where name='이상순';
Query OK, 1 row affected (0.00 sec)
mysql> select * from person;
+
| id | name | age | sex |
+
| 1 | 이효리 | 23 | F |
+
1 row in set (0.00 sec)
3. 데이터 제어어(Data Control Language)
유저 권한 관리
실습환경 구축
create database testdb;
create user 'test_user'@'localhost' identified by '1234';
모든 권한 목록 확인
SHOW GRANTS FOR 'USERNAME'@'HOST';
mysql> show grants for 'test_user'@'localhost';
+
| Grants for test_user@localhost |
+
| GRANT USAGE ON *.* TO `test_user`@`localhost` |
+
1 row in set (0.00 sec)
특정 DB의 모든 권한 부여
GRANT ALL ON DBNAME.* to 'USERNAME'@'HOST';
mysql> grant all on testdb.* to 'test_user'@'localhost';
Query OK, 0 rows affected (0.00 sec)
mysql> show grants for 'test_user'@'localhost';
+
| Grants for test_user@localhost |
+
| GRANT USAGE ON *.* TO `test_user`@`localhost` |
| GRANT ALL PRIVILEGES ON `testdb`.* TO `test_user`@`localhost` |
+
2 rows in set (0.00 sec)
새로고침
FLUSH PRIVILEGES;
mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)
특정 DB의 모든 권한 삭제
REVOKE ALL ON DBNAME.* from 'USERNAME'@'HOST';
mysql> revoke all on testdb.* from 'test_user'@'localhost';
Query OK, 0 rows affected (0.00 sec)
mysql> show grants for 'test_user'@'localhost';
+
| Grants for test_user@localhost |
+
| GRANT USAGE ON *.* TO `test_user`@`localhost` |
+
1 row in set (0.00 sec)