기업이나 조직 또는 개인이 필요에 의해 데이터를 일정한 형태로 저장해 놓은것.
데이터를 관리, 복구해주는 소프트웨어
서로간에 관계가 있는 데이터 테이블들을 모아놓은 데이터 저장공간
DB의 Data를 정의, 조작, 제어하기 위한 용어
: 데이터베이스의 스키마를 정의하거나 수정하는 데 사용
CREATE
: 테이블 생성CREATE TABLE employees ( # 테이블명
id INT PRIMARY KEY, # 컬럼명,데이터유형,제약조건
name VARCHAR(50), # 컬럼명,데이터유형
age INT,
department VARCHAR(50) # 컬럼명,데이터유형
);
ALTER
: 테이블 수정ALTER TABLE 테이블명 RENAME TO 바꿀테이블명
ALTER TABLE 테이블명 MODIFY (컬럼명,데이터유형,제약조건)
ALTER TABLE 테이블명 ADD (컬럼명,데이터유형,제약조건)
ALTER TABLE 테이블명 DROP COLUMN 컬럼명
ALTER TABLE (테이블명) RENAME COLUMN 컬럼명 TO 새로운컬럼명
DROP
: 테이블삭제DROP TABLE 테이블명
DROP TABLE 테이블명 CASCADE CONSTRAINT
데이터베이스의 데이터를 조회, 삽입, 수정, 삭제하는 데 사용
SELECT
: 데이터 조회SELECT column1, column2
FROM table_name
WHERE condition;
INSERT
: 데이터 삽입INSERT INTO table_name (column1, column2)
VALUES (value1, value2);
UPDATE
: 데이터 수정UPDATE table_name
SET column1 = value1, column2 = value2
WHERE condition;
DELETE
: 데이터 삭제 DELETE FROM table_name
WHERE condition;
#생략시 테이블 전체 데이터 삭제 (용량 초기화 x)
데이터베이스의 데이터를 조회, 삽입, 수정, 삭제하는 데 사용
GRANT
: 특정 권한을 부여GRANT SELECT, INSERT ON table_name TO user_name;
REVOKE
: 특정 권한을 취소REVOKE DELETE ON table_name FROM user_name;
트랜잭션의 시작, 종료, 롤백 등을 제어하는 데 사용
COMMIT
: 데이터베이스의 변경 사항을 영구적으로 저장COMMIT;
ROLLBACK
: 트랜잭션을 취소하고 이전의 상태로 되돌림ROLLBACK;
show databases;
create database test_db;
use test_db
drop database test_db;
mysql> use mysql;
Database changed
mysql> select host, user from user;
+-----------+------------------+
| host | user |
+-----------+------------------+
| localhost | mysql.infoschema |
| localhost | mysql.session |
| localhost | mysql.sys |
| localhost | root |
+-----------+------------------+
🧷 외부접속가능 사용자와 비밀번호 생성
CREATE USER 'username'@'%' indentified by 'password'
🧷 현재 PC에서 접속가능 사용자와 비밀번호 생성
CREATE USER 'username'@'local host' indentified by 'password'
내부pc에서 사용 접속가능한 사용자 noma와 비밀번호 1234 생성
create user 'noma'@'localhost' identified by '1234';
Query OK, 0 rows affected (0.03 sec)
mysql> select host, user from user;
+-----------+------------------+
| host | user |
+-----------+------------------+
| localhost | mysql.infoschema |
| localhost | mysql.session |
| localhost | mysql.sys |
| localhost | noma |
| localhost | root |
+-----------+------------------+
5 rows in set (0.00 sec)
외부접속 가능한 사용자 noma와 비밀번호 1234 생성
create user 'noma'@'%' identified by '1234';
Query OK, 0 rows affected (0.02 sec)
mysql> select host, user from user;
+-----------+------------------+
| host | user |
+-----------+------------------+
| % | noma |
| localhost | mysql.infoschema |
| localhost | mysql.session |
| localhost | mysql.sys |
| localhost | noma |
| localhost | root |
+-----------+------------------+
6 rows in set (0.00 sec)
🧷 외부, 내부 접속이 다른경우 사용자명이 겹쳐도 됨
🧷 외부접속가능 사용자삭제
DROP USER 'username'@'%'
🧷 현재 PC에서 접속가능 사용자삭제
DROP USER 'username'@'localhost'
외부, 내부 접속 noma 사용자 삭제
drop user 'noma'@'localhost';
Query OK, 0 rows affected (0.02 sec)
mysql> select host, user from user;
+-----------+------------------+
| host | user |
+-----------+------------------+
| % | noma |
| localhost | mysql.infoschema |
| localhost | mysql.session |
| localhost | mysql.sys |
| localhost | root |
+-----------+------------------+
5 rows in set (0.00 sec)
mysql> drop user 'noma'@'%';
Query OK, 0 rows affected (0.02 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)
실습을 위한 testdb 데이터베이스 생성
create database testdb;
Query OK, 1 row affected (0.02 sec)
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
| testdb |
+--------------------+
5 rows in set (0.00 sec)
user생성
create user 'sxlbl'@'localhost' identified by '1234';
Query OK, 0 rows affected (0.01 sec)
mysql> select host, user from user;
+-----------+------------------+
| host | user |
+-----------+------------------+
| localhost | mysql.infoschema |
| localhost | mysql.session |
| localhost | mysql.sys |
| localhost | root |
| localhost | sxlbl |
+-----------+------------------+
5 rows in set (0.00 sec)
🧷 사용자에게 부여된 권한 목록 확인
SHOW GRANTS FOR 'username'@'localhost'
🧷 사용자에게 특정 데이터베이스의 모든 권한 부여
GRANT ALL ON dbname.* TO 'username'@'localhost'
🧷 사용자에게 특정 데이터베이스의 모든 권한 삭제
REVOKE ALL ON dbname.* FROM 'username'@'localhost'
# 권한목록 확인
show grants for 'sxlbl'@'localhost';
+-------------------------------------------+
| Grants for sxlbl@localhost |
+-------------------------------------------+
| GRANT USAGE ON *.* TO `sxlbl`@`localhost` |
+-------------------------------------------+
1 row in set (0.00 sec)
#testdb의 모든 권한 부여
mysql> grant all on testdb.* to 'sxlbl'@'localhost';
Query OK, 0 rows affected (0.02 sec)
mysql> show grant for 'sxlbl'@'localhost';
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'grant for 'sxlbl'@'localhost'' at line 1
# 권한부여 확인
mysql> show grants for 'sxlbl'@'localhost';
+-----------------------------------------------------------+
| Grants for sxlbl@localhost |
+-----------------------------------------------------------+
| GRANT USAGE ON *.* TO `sxlbl`@`localhost` |
| GRANT ALL PRIVILEGES ON `testdb`.* TO `sxlbl`@`localhost` |
+-----------------------------------------------------------+
2 rows in set (0.00 sec)
# testdb의 모든 권한 삭제
revoke all on testdb.* from 'sxlbl'@'localhost';
Query OK, 0 rows affected (0.02 sec)
# 권한삭제 확인
mysql> show grants for 'sxlbl'@'localhost';
+-------------------------------------------+
| Grants for sxlbl@localhost |
+-------------------------------------------+
| GRANT USAGE ON *.* TO `sxlbl`@`localhost` |
+-------------------------------------------+
1 row in set (0.00 sec)