SQL(Structed Query Language)

maro·2024년 3월 18일

데이터 베이스

  • 지속적으로 유지, 관리되어야 하는 데이터들의 집합

데이터베이스 관리 시스템

  • Database Management System(DBMS) : 데이터를 관리하는 소프트웨어. 프로세스.
  • MySQL, Oracle 등

관계형 데이터 베이스(Relational Database, RDB)

  • 표 형태로 데이터를 관리하는 데이터베이스
  • 데이터를 관계 있는 여러 항목(열)의 집합으로 표현 -> 이 데이터 집합을 관계(Relation)이라고 함.

테이블(Table)

데이터 저장 단위

  • Entity
    - 독립적으로 관리하길 원하는 데이터. 하나의 데이터
  • Table
    - Entity를 물리적으로 표현하는 방식
  • 열(column), 행(row, record)의 이차원 표형식으로 관리.

열(Column, Attribute)

  • 데이터 속성

행(Row, Record)

  • 하나의 데이터(ex. 한 사람의 데이터)

DBMS 처리흐름

DBMS : 클라이언트가 요청한 내용을 데이터 베이스에 처리(삽입/삭제/수정/조회). SQL을 통해서 처리.
DB : 저장장치

Client - Server 구조

  • Client - Server는 네트워크를 통해 연결. CS 구조라고 함.
  • MySQL workbench는 client 프로그램''

SQL

데이터베이스와 관련된 작업만 할 수 있는 언어

  • DML(Data Manipulation Language) : 데이터 관리. 데이터 삽입/수정/삭제/선택
    - 데이터 조작

    • 테이블에 데이터 삽입, 수정, 삭제, 조회
  • DDL(Data Definition Language) : 데이터베이스와 관련되는 객체들을 생성, 삭제, 수정
    - Create, Alter, Drop, Truncate(테이블에 있는 데이터 싹 삭제)

  • DCL(Data Control Language) : 사용자의 권한에 접근 제어
    - 사용자에게 권한을 주거나 없애는 언어.

DDL

DB 생성 및 조회

  • 관리자(DB를 관리하는 사람) 계정으로 들어간다.
  • 생성 : CREATE DATABASE 이름
  • 조회 : SHOW DATABASE
  • 사용 : USE 이름

사용자 계정 생성 및 권한 설정

  • 사용자 계정 생성
    CREATE USER 계정명@HOST IDENTIFIED BY ‘PASSWORD’
    - HOST :
    – localhost : LOCAL 접속 계정
    – ‘%’ : 원격 접속 계정

(깨알정보 IP : 나라, Port번호 : 항구)

테이블 생성

CREATE TABLE 테이블이름
( 컬럼이름 datatype [제약조건][,컬럼이름 datatype . . .]
[,제약조건]
)

데이블명, 컬럼명 규칙
– 영문자, 숫자, _ 만 가능하다.
– 첫 글자는 반드시 영문자여야 한다.

데이터베이스에 생성된 테이블들 조회
– show tables;

-- localhost : 로컬로 접속할 수 있는 계정
create user 'playdata'@'localhost' identified by '1111';
-- 원격 접속 사용자 계정
create user 'playdata'@'%' identified by '1111';
-- 등록된 사용자 계정 조회.
select user, host from mysql.user;

-- 생성한 계정에 권한 부여 (모든 권한 ==> 관리자 계정.)
grant all privileges on *.* to 'playdata'@'localhost';
grant all privileges on *.* to 'playdata'@'%';
-- grant 부여할 권한 on Database.테이블 to 계정. *.*는 모든이라는 뜻
-- database 생성
create database testdb;
-- database들 조회
show databases;

-- 특정 데이터베이스를 사용
use testdb; -- database이름.테이블이름 로 해야되는데 -> use를 하면 database이름을 생략 가능.
/* 
create table 이름(
	컬럼이름1 데이터타입 제약조건, 
    컬럼이름2 데이터타입 제약조건, 
    컬럼이름3 데이터타입 제약조건, 
    컬럼이름4 데이터타입 제약조건
)
*/
use testdb;
-- 테이블 : member, 속성 : id, password, name, point, email, gender, age, join_date
create table member (
	id varchar(10) primary key,
    password varchar(10) not null, 
    name varchar(50) not null,
    point int default 1000, -- 값을 넣지 않으면 1000을 기본값으로 넣는다. not null (x) -> null을 허용하는 컬럼.(nullable)
    email varchar(100) unique, 
    gender char(1) check(gender in ('M', 'F')),
    age int check(age > 0),
    join_date timestamp not null default current_timestamp -- 값을 넣는 sql이 실행되는 시점의 일시를 넣는다.
);
-- 테이블 조회
show tables;

-- 테이블의 컬럼들 조회
desc member;

-- 테이블 삭제. create로 만든거는 drop으로 삭제한다. 보통 만든 테이블 위에 이 명령어를 위치시킨다.
drop table if exists member;
show tables;

-- 테이블을 삭제했으므로 테이블 생성을 다시 해줌.
-- 데이터를 추가 (insert문 - 행추가)
-- 전체 컬럼에 다 값을 넣을 경우 컬럼명은 생략 가능.
-- 문자열 : ''로 감싼다.
-- 일시 : ''로 감싼다. '년-월-일 시:분:초'
insert into member values ('id-1', 'abc111', '이순신', 2000, 'a@a.com', 'M', 20, '2000-10-02 10:10:20');
insert into member (id, password, name, join_date)
values ('id-2', '11111', '유관순', '2001-01-02 15:22:33');
select * from member;

profile
공부 & 프로젝트 & 개발 블로그

0개의 댓글