
관계형 데이터베이스는 현재 가장 많이 사용하는 데이터베이스 모델입니다.
Oracle의 Oracle Database가 가장 유명하고 널리 사용 됩니다.
오픈 소스 데이터베이스 : MySQL, MariaDB, PostgreSQL 서버 등의 제품들이 널리 사용되고 있음.

- 스키마( Schema )
- 외부 스키마(External) : 사용자 뷰
- 사용자의 입장에서 정의한 데이터 베이스의 논리적 구조
- 데이터들을 어떤 형식, 구조, 화면을 통해 사용자에게 보여줄 것인가에 대한 명세를 말하며 하나의 데이터베이스에는 여려개의 외부 스키마가 있을 수 있음
- 일반 사용자는 SQL을 이용하여 DB를 쉽게 사용 할 수 있음
- 응용 프로그래머는 C, 자바 등의 언어를 사용하여 DB에 접근
- 개념 스키마(Conceptual) : 전체적인 뷰
- 데이터베이스의 전체적인 논리적 구조
- 모든 이용자가 필요로 하는 데이터를 총합한 조직 전체의 데이터 베이스로 하나만 존재함
- 개체 간의 관계와 제약 조건 데이터 베이스의 접근 권한,보안 등에 관한 명세를 나타냄
- 데이터 베이스 관리자에 의해서 구성
- 내부 스키마(Internal)
- 물리적 저장 장치의 입장에서 본 데이터 베이스 구조
- 실제로 데이터베이스에 저장될 레코드의 물리적인 구조, 저장 데이터 항목의 표현 방법, 내부 레코드의 물리적 순서등을 나타냄
• 패키지 설치
mariadb-server 혹은 mariadb, mariadb-client
• 서비스 활성화
mariadb
• 방화벽 설정
mysql
• 기본 보안 설정
mysql_secure_installation
• 설정파일
/etc/my.cn
-----------------------------------------------------
• mysql_secure_installation
- Enter current password for root (enter for none) :
현재 root 계정의 패스워드를 입력, 초기값은 설정되지 않았기 때문에 Enter 입력
Switch to unix_socket authentication [Y/n]
- 유닉스 소켓이라는 인증 방식으로 전환할 것인지 물어보는 질문
Change the root password? [Y/n]
- root password를 변경할 건지 물어보는 질문
Remove anonymous users? [Y/n]
- 익명 사용자를 제거할 건지 물어보는 질문. 만약 Y를 하면 mysql -u root 로 로그인 해야 됨
- n를 하면 ‘mysql’로도 로그인 되지만 익명 사용자가 권한을 갖는 것이기 때문에 보안상
지워주는 게 좋음
Disallow root login remotely [Y]
- localhost의 ip가 아닌 곳에서 root로 로그인이 가능하게 할 지에 대한 질문
- Y를 하면 원격 로그인이 안됨
- test 용도이며 장소를 옮긴다 하면 n를 권장. 로컬에서만 사용하면 y
Remove test database and access to it? [Y/n]
- test 데이터베이스를 제거할지에 대한 질문
- 쓸 일이 없으면 n
Reload privilege tables now? [Y/n]
- 권한을 변경을 했다면 y
-----------------------------------------------------
| 구문 | 설명 |
|---|---|
| SELECT | 데이터 조회 |
| INSERT | 데이터 추가 |
| UPDATE | 데이터 수정 |
| DELETE | 데이터 삭제 |
| CREATE | 객체 생성 |
| DROP | 객체 제거 |
| ALTER | 객체 특성 수정 |
| GRANT | 권한 부여 |
| REVOKE | 권한 제거 |
| COMMIT | 수정사항 적용 |
| ROLLBACK | 수정사항 반영 안함 |
SELECT 구문
DML 구문
TCL 구문 : COMMIT / ROLLBACK
DDL문장
사용자 관리
===================================================
데이터 베이스 실습
mysql -u root -p
데이터 베이스 구문
SHOW DATABASES;
CREATE DATABASE test;
Use test;
SHOW tables;
USE mysql;
SHOW tables;
DESCRIBE user;
-----------------------------------------------------
SELECT 구문
SELECT host FROM user;
SELECT host,user,password FROM user;
WHERE 구문
* 숫자
- 부등호, 등호
SELECT host,user,password,max_updates FROM user WHERE max_updates = 0;
SELECT host,user,password,max_updates FROM user WHERE max_updates > 0;
SELECT host,user,password,max_updates FROM user WHERE max_updates >= 0;
SELECT host,user,password,max_updates FROM user WHERE max_updates != 1;
SELECT host,user,password,max_updates FROM user WHERE max_updates <> 1;
- BETWEEN number AND number
SELECT host,user,password,max_updates FROM user WHERE max_updates BETWEEN -1 AND 1;
SELECT host,user,password,max_updates FROM user WHERE max_updates BETWEEN 0 AND 1;
SELECT host,user,password,max_updates FROM user WHERE max_updates BETWEEN 1 AND 2;
- IN (....)
SELECT host,user,password,max_updates FROM user WHERE max_updates IN (1,2,3,4);
SELECT host,user,password,max_updates FROM user WHERE max_updates IN (1,2,3,0);
- IS NULL & IS NOT NULL
SELECT host,user,password,max_updates FROM user WHERE max_updates IS NULL;
SELECT host,user,password,max_updates FROM user WHERE max_updates IS NOT NULL;
* 문자열 검색
- =
SELECT host,user FROM user WHERE host = 'localhost';
- LIKE
SELECT host,user FROM user WHERE host LIKE 'localhost';
SELECT host,user FROM user WHERE host LIKE 'local_';
SELECT host,user FROM user WHERE host LIKE 'local_%';
SELECT host,user FROM user WHERE host LIKE '_ocal%';
SELECT host,user FROM user WHERE host LIKE 'ocal%';
SELECT host,user FROM user WHERE host LIKE 'localhost%';
SELECT host,user FROM user WHERE host LIKE '_____host%';
SELECT host,user FROM user WHERE host LIKE '_o___host%';
- LIKE + 논리연산자 (AND , OR)
SELECT host,user FROM user WHERE host LIKE '%local%' AND user LIKE 'root';
SELECT host,user FROM user WHERE host LIKE '%local%' OR user LIKE 'root';
----------------------------------------------------------------------------
DML 구문
* 준비 과정 ( 테이블 생성 )
USE test;
CREATE TABLE user
( name varchar(10),
uid int,
locate varchar(10),
email varchar(20) );
char(10) : 2글자 건 10글자 건 무조건 10글자 인식
varchar(10) : 사용하는 글자에 따라서 글자수 인식
int : 정수
SELECT * FROM user;
DESCRIBE user;
- INSERT 구문
INSERT INTO user (name,uid,locate,email)
VALUES ('Lee',1,'seoul','lee@test.example.com');
SELECT * FROM user;
INSERT INTO user (uid,name,email,locate)
VALUES (2,'KIM','kim@test.example.com','daegu');
SELECT * FROM user;
INSERT INTO user
VALUES ('Lim',3,'kyunggi','lim@test.example.com');
SELECT * FROM user;
INSERT INTO user
VALUES (4,'kyunggi','park@test.example.com','Park');
SELECT * FROM user;
- UPDATE 구문
UPDATE user
SET name='Park'
WHERE uid=0;
- DELETE 구문
DELETE FROM user
WHERE uid=0;
-------------------------------
조심해야 할 사항
UPDATE 나 DELETE에 WHERE 을 지정해주지 않으면 전체 내용으로 반영
UDATE user
SET locate = busan;
SELECT * FROM user;
DELETE FROM user;
SELECT * FROM user;
------------------------------
트랜잭션 설정 확인
SHOW variables LIKE 'auto%';
실시간만 autocommit 설정
SET autocommit = on/off; ( true/false )
SET autocommit = off;
SHOW variables LIKE 'auto%';
INSERT INTO user
VALUES ('Lim',3,'kyunggi','lim@test.example.com');
SELECT * FROM user;
ROLLBACK
SELECT * FROM user;
exit
---------------------------
mysql -u root -p
----------------------------
SHOW variables LIKE 'autocommit';
ON 확인
exit
--------------------------------
영구설정
vi /etc/my.cnf
autocommit = 0
:wq
systemctl restart mysql
-------------------------------
mysql -u root -p
------------------------------
SHOW variables LIKE 'autocommit';
OFF 확인
======================================================
테이블 수정
ALTER TABLE user ADD age int;
SELECT * FROM user;
DESCRIBE user;
ALTER TABLE user ADD level int(5);
DESCRIBE user;
ALTER TABLE DROP level;
DESCRIBE user;
ALTER TABLE user MODIFY email int;
DESCRIBE user;
SELECT * FROM user;
ALTER TABLE user ADD PRIMARY KEY(uid);
DESCRIBE user;
ALTER TABLE user MODIFY name varchar(10) NOT NULL;
DESCRIBE user;
ALTER TABLE user MODIFY locate varchar(10) UNIQUE;
에러 발생 : 중복된 값이 있음.
-----------------------------------------------------------------------------------
사용자 설정
USE mysql;
SHOW TABLE;
DESCRIBE user;
SELECT host, user FROM user;
CREATE user user01@localhost IDENTIFIED BY '123';
- hostname => ex) 192.168.xxx.100 or 127.0.0.1 or '% ' 도 가능
DESCRIBE user;
SELECT Select_priv, user FROM user;
SHOW GRANT FOR user01@localhost
SHOW GRANT FOR root@localhost
GRANT SELECT ON test.user to user01@localhost;
SHOW GRANT FOR user01@localhost
---------------------------------------------------------------------------------------
데이터베이스 백업
백업
# mysqldump -u root -p test > test.dump
# mysql -u root -p
USE test
SHOW TABLES;
DROP TABLE user;
SHOW TABLES;
exit
백업 풀기
# mysql -u root -p test < test.dump
# mysql -u root -p
USE test
SHOW TABLES;