본문 바로가기

SQL

MySQL - SQL 기본(2)

728x90

1. SQL의 분류

  • DML(Data Manipulation Language) : 테이블의 조작하는데 사용되는 언어. → 트랜잭션 발생 O
    • 데이터의 선택 : SELECT
      • SELECT select_expr
        	[FROM table_references]
            [WHERE where_condition]
            [GROUP BY {col_name | expr | position}]
            [HAVING where_condition]
            [ORDER BY {col_name | expr | position}]
    • 데이터의 삽입 : INSERT
      • INSERT [INTO] 테이블[(열1, 열2, ···)] VALUES (값1, 값2, ···)
        
        -- 테이블 이름 다음에 나오는 열은 생략 가능
        -- 열의 순서를 바꿔서 입력하고 싶을 때는 열 이름을 입력할 순서에 맞춰 나열
        
        -- 다른 테이블의 데이터를 가져와서 대량으로 입력하는 효과
        INSERT INTO 테이블이름 (열 이름1, 열이름2, ···)
        	SELECT문 ;
    • 데이터의 수정 : UPDATE
      • UPDATE 테이블이름
        	SET 열1 = 값1, 열2 = 값2 ···
            WHERE 조건 ;
            
        -- WHERE절은 생략 가능하지만 생략할 시 테이블 전체의 행이 변경.  
        
        -- 구매 테이블에서 현재의 단가가 모두 1.5배 인상되었을 때
        USE sqldb;
        UPDATE buytbl SET price = price * 1.5 ;
    • 데이터의 삭제 : DELETE
      • -- 행 단위로 삭제
        DELETE FROM 테이블이름 WHERE 조건 ;
      • DML문인 DELETE는 트랜잭션 로그를 기록하는 작업 때문에 삭제가 오래 걸림.
      • DDL문인 DROP은 테이블 자체를 삭제하며 트랜잭션 로그를 기록하는 작업이 없기에 삭제가 빠름. 
      • DDL문인 TRUNCATE문은 DELETE와 동일한 효과를 가지지만 트랜잭션 로그를 기록하지 않아서 속도 빠름.
      • 대용량의 테이블 전체 내용을 삭제할 때
        • 테이블 자체가 필요없을 경우에는 DROP문 이용해 삭제하는 것이 효율적.
        • 테이블의 구조는 남겨놓고 싶다면 TRUNCATE문을 이용해 삭제하는 것이 효율적.
    • 조건부 데이터 입력, 변경
      • -- 기본 키가 중복되면 데이터가 수정되도록
        INSERT INTO memberTBL VALUES('BBK', '비비코', '미국')
        	ON DUPLICATE KEY UPDATE name = '비비코', addr = '미국';
        INSERT INTO memberTBL VALUES('DJM', '동짜몽', '일본')
        	ON DUPLICATE KEY UPDATE name = '동짜몽', addr = '일본';
        SELECT * FROM memberTBL
        
        -- ON DUPLICATE UPDATE는 PK가 중복되지 않으면 일반 INSERT가 되고, 중복되면 UPDATE문이 실행
  • DDL(Data Definition Language) : 데이터베이스 개체를 생성/삭제/변경하는 역할. → 트랜잭션 발생 X
    • CREATE, DROP, ALTER
  • DCL(Data Control Language) : 사용자에게 권한을 부여하거나 빼앗을 때 주로 사용하는 구문
    • GRANT, REVOKE, DENY

 

2. 데이터의 형식

  • 숫자 데이터 형식
    • 데이터 형식 바이트 수 숫자 범위 설명
      SMALLINT 2 -32,768 ~ 32,767 정수
      INT(INTEGER) 4 약 -21억 ~  21억 정수
      BIGINT 8 약 -900경 ~ 900경 정수
      FLOAT 4 -3.40E+38~-1.17E-38 소수점 아래 7자리까지
      DEC(DECIMAL) 5~17    
    • DECIMAL 데이터 형식은 정확한 수치를 저장.
    • FLOAT, DOUBLE은 근사치의 숫자를 저장.
  • 문자 데이터 형식
    • 데이터 형식 바이트 수 설명
      CHAR(n) 1~255 고정길이 문자형
      VARCHAR(n) 1~65535 가변길이 문자형
      LONGTEXT 1~4294967295 최대 4GB 크기의 TEXT 데이터 값
      LONGBLOB 1~4294967295 최대 4GB 크기의 BLOB 데이터 값
    • CHAR(100)에서 'ABC' 3글자만 저장해도 100자리를 모두 확보하고 97자리는 낭비
    • VARCHAR(100)에서 'ABC' 3글자만 저장하면 3자리만 사용.
    • INSERT/UPDATE시에 CHAR형식이 성능이 더 좋음. 
  • 날짜와 시간 데이터 형식
    • 데이터 형식 바이트 수 설명
      DATE 3 'YYYY-MM-DD'
      DATETIME 8 'YYYY-MM-DD HH:MM:SS'

'SQL' 카테고리의 다른 글

SQL 용어 정리  (0) 2021.09.01
PHP와 MySQL 연동하기(1) - 회원관리시스템  (0) 2021.09.01
MySQL - SQL 고급  (0) 2021.08.23
MySQL - SQL 기본(1)  (0) 2021.08.20
MySQL(1)  (0) 2021.08.17