[Database] MySQL DDL, DML, DCL

h220101·2022년 4월 30일
0

DDL (Data Definition Language)

  • 데이터를 담는 그릇을 정의하는 언어
  • 관계형 데이터베이스의 구조 정의

CREATE / DB 오브젝트를 생성
ALTER / DB 오브젝트를 변경
DROP / DB 오브젝트를 삭제
TRUNCATE / DB 오브젝트 내용 삭제

DML (Data Manipulation Language)

  • 데이터의 생명주기(삽입, 삭제, 갱신)를 제어하는 언어

INSERT / 테이블 신규 내용 삽입
SELECT / 테이블 내용 조회
UPDATE / 테이블 내용 변경
DELETE / 테이블 내용 삭제

DCL (Data Control Language)

  • 데이터에 대한 액세스를 제어하는 언어

GRANT / DB 사용자 권한 부여
REVOKE / DB 사용자 권한 회수
COMMIT  -TCL / 트랜잭션 확정
ROLLBACK  -TCL / 트랜잭션 취소
CHECKPOINT  -TCL / 복귀지점 설정

CRUD (creat read update delete)

CRUD는 대부분의 컴퓨터 소프트웨어가 가지는 기본적인 데이터 처리 기능인 Create(생성), Read(읽기), Update(갱신), Delete(삭제)를 묶어서 일컫는 말이다. 사용자 인터페이스가 갖추어야 할 기능(정보의 참조/검색/갱신)을 가리키는 용어로서도 사용된다.


데이터베이스 생성 DDL


root : 최상위관리자

  1. MySQL에 데이터베이스 생성
    CREATE DATABASE hhy23db DEFAULT CHARACTER SET UTF8;
    CREATE DATABASE +db이름(hhy23db)+ 옵션(인코딩 방식)

  2. MySQL에생성된 모든 데이터베이스 조회
    SHOW DATABASES;

  3. MySQL에 사용자 아이디 생성
    CREATE user 'db아이디'@'%' IDENTIFIED BY 'db비번';

  4. MySQL에 사용자 아이디 삭제
    DROP USER db아이디@'%';


사용자계정 생성 및 권한 부여문장
grant select,insert,update,delete,create,drop,alter on db이름.
to 'db아이디'@'localhost' identified by 'db비번';


데이터베이스 권한 DCL


  1. 사용자 아이디 권한 부여
    GRANT ALL PRIVILEGES ON db이름.* TO 'db아이디'@'%';

  2. 변경된 내용을 메모리에 반영
    FLUSH PRIVILEGES;

  3. MySQL 에 생성된 DB에 사용자 권한 회수
    REVOKE ALL ON db이름.* FROM db아이디;


테이블 생성 DDL - (CREATE)


  1. MySQL에생성된 db선택
    USE db이름;

  2. 선택된 db에 테이블 생성
    ---예) 회원테이블

CREATE TABLE 테이블이름
( u_id		VARCHAR(100) NOT NULL PRIMARY KEY COMMENT '회원 아이디'
 ,u_pw		VARCHAR(100) NOT NULL COMMENT '회원 비밀번호'
 ,u_name	VARCHAR(100) NOT NULL COMMENT '회원 이름'
 ,u_birth	DATE COMMENT '회원 생년월일'
 ,u_add		VARCHAR(100) NOT NULL COMMENT '회원 주소'
 ,u_mobile1	VARCHAR(100) COMMENT '회원 연락처1'
 ,u_mobile2	VARCHAR(100) COMMENT '회원 연락처2'
 ,u_date	DATE COMMENT '등록일자'
);



테이블 데이터삽입 DML - (INSERT)


  1. 테이블 데이터 삽입
    ---예) 회원테이블
INSERT INTO tb_user
	(u_id, u_pw, u_name, u_birth, u_add, u_mobile1, u_mobile2, u_date)
	VALUES(); 

테이블 열을 선택해서 INSERT 생성을 누르면 자동으로 생성된다.
추가하고자 하는 데이터 값을 입력한다.


테이블 조회 DML - (SELECT)


  1. 테이블 내 전체 데이터 조회 (*)

SELECT * FROM tb_user

  1. 테이블 내 선택 데이터 조회 (where)
    as - 별칭
    ---예) u_name 데이터값이 '나재민'과 일치하는 행만 찾아서 보여준다.
SELECT 
	u_id, 
	u_pw, 
	u_name, 
	u_birth, 
	u_add, 
	u_mobile1, 
	u_mobile2, 
	u_date
FROM 
	tb_user
WHERE 
	u_name = '나재민'; 


테이블 데이터수정 DML - (UPDATE)


SELECT 
*
FROM 
	tb_user
WHERE 
	u_id = 'id001'; 

-> where 구문으로 u_id 속성에 id001값을 가진 데이터 먼저 확인한다.
-> 실행순서 :
1. FROM -테이블내의
2. WHERE -위치(범위)를 찾아가서
3. SELECT -전체를 조회해라.

UPDATE 
	tb_user
SET
	u_add='덕진동',
WHERE 
    u_id='id001';

-> where 구문으로 u_id가 id001인 값을 찾아 u_add 속성값을 덕진동으로 업데이트(수정)한다.


AS 로 호출을 짧게 하자.

SELECT 
*
FROM 
	tb_user
WHERE 
	tb_user.u_id = 'id001'; 

SELECT 
*
FROM 
	tb_user as u
WHERE 
	u.u_id = 'id001'; 

테이블 데이터삭제 DML - (DELETE)


지우고자하는 테이블의 속성값과 데이터가 있는지 먼저 꼭 확인한다.

DELETE
FROM
	tb_user
WHERE
	u_id = 'id001';

-> DELETE : 행들을 하나씩 전부삭제한다.

where 구문을 추가해 행을 선택하면 해당데이터만 삭제한다.

DDL - (TRUNCATE)

TRUNCATE TABLE 테이블이름;

-> TRUNCATE : 테이블 전체 삭제한 뒤 새로 생성한다.


테이블 복제


전체 복제

CREATE TABLE tb_user_backup_all 
(SELECT 
      * 
 FROM 
    tb_user); 


부분 복제

CREATE TABLE tb_user_backup
(SELECT
    u.u_id
   ,u.u_pw
   ,u.u_name
 FROM
   tb_user AS u);


테이블 정렬, ORDER BY


ASC; 오름차순
DESC; 내림차순

SELECT
*
FROM
	tb_user
ORDER BY u_id DESC;


데이터 조회, LIMIT


제한된 조회


-> 내림차순 desc로 2개까지만 보여준다.

-> 테이블을 찾아가서, 해당 컬럼을 불러오고, 아이디기준 내림차순으로 10까지 보이도록 하여라.


-> 오름차순 asc로 7개까지만 보여준다.


데이터 중복조회


DISTINCT



-> 데이터 조회

-> 한글 정렬

GROUP BY 그룹

count : 중복된 값의 카운트를 센다.

HAVING 그룹 조건식

count 에 조건을 걸어 만족하는 GROUP 값만 보여준다.


테이블 데이터삽입키 중복 시 수정


ON DUPLICATE KEY UPDATE

사용자가 직접 원하는 값을 설정할 수 있다.

INSERT INTO tb_user (u_id, u_pw, u_name, u_birth, u_add, u_mobile1, u_mobile2, u_date)
VALUES
('id001', 'pw001', '홍01', '2020-01-10', '덕진동', '010', '00010001', '2020-03-10')

ON DUPLICATE KEY UPDATE
u_birth = '2019-01-10’;

IGNORE

중복키 에러가 발생했을 때 신규로 입력되는 레코드를 무시하는 방법.

INSERT IGNORE INTO tb_user (u_id, u_pw, u_name, u_birth, u_add, u_mobile1, u_mobile2, u_date)
VALUES('id010','pw010','홍10','2020-10-10','덕진동','010','00010001','2020-03-10');

INSERT IGNORE INTO tb_user (u_id, u_pw, u_name, u_birth, u_add, u_mobile1, u_mobile2, u_date)
VALUES('id011','pw011','홍11','2020-11-10','덕진동','010','00010001','2020-03-10');
profile
기록하는 삶

0개의 댓글