sql기초지식-2

아기코딩단2·2022년 3월 13일
0

기술 발전으로 인한 별도의 데이터 관리 프로그램 필요 => 데이터 베이스의 등장(데이터 관리를 학문적으로 체계화 시키자 (사용자 인증/ 사용자 권한 관리/ 동기화 관리))

데이터관리를 학문적으로 체계화 => 데이터 공학

실용기술을 학문적으로 체계화 시킨 것을 엔지니어링이라고 부름

공학 => 체계화

경험적으로 얻은 것을 체계화 하는 것인데 database학문 체계에 따라 만든 것을 DBMS라고 함

데이터베이스의 특징

실시간 접근성
지속적인 변화
동시 공유
내용에 대한 참조
데이터 논리적 독립성

데이터베이스는 수요가 적음

설치파일 mariaDB은 mysql인데 그거는 mariaDB가 mysql 따라서 만들었기 때문

1) DDL - 데이터 구조 정의, 함수/(함수와 유사한)프로시저/리스너.. 를 정의하는 DDL
2) DML - 데이터 변경, 추가, 삭제/ insert, update, delete
3) DQL - select

char(n)의 장점은 데이터의 크기가 같기 때문에 데이터를 찾기가 쉽다. 내가 자리를 10개를 준다면 1자를 저장할 때도 10칸을 사용해서 저장함 OXXX.....<= 이런 식 but 메모리 낭비있음

varchar(n) <= 오라클은 2천자 까지만 가능 오라클은 varchar2가 있음
-가변 크기임
-메모리 아낄 수 있음

  • 요즘에는 varchar 많이 씀

빈문자열은 null이 아니고 문자열임

한글 영어 제한없이 5자라는 것임

where 다음에 조건

char찾을 때 빈칸까지 줘야하는 DBMS도 있음 근데 mariaDB/mysql 는 그렇지 않음

sql은 값을 비교할 때 =하나만 씀 JAVA 같은 경우는 == 사용함

text(65535), mediumtext(약 1.6MB), longtext(약 2GB)
텍스트가 어떻게 1.6MB를 넘는가?
게시글의 내용중에 그림이 있는 경우 글은 문자열로 넣고 그림같은 경우는 binary데이터로 되어있는데 이를 text로 바꿔버림 => 텍스트와 한꺼번에 묶어서 저장해버림
=> 여기서 실습함 C:\Users\bitcamp\git\bitcamp-study\java-lang\app\src\main\java\com\eomcs\io\ex15\Exam0110.java

binary 데이터란 ? 전용 편집기를 통해서 읽어야하고 수정해야함 JPG이미지 파일 등등

insert into member(name, photo) <=이렇게 저장할 때 sql문은 텍스트이기 때문에 binary 데이터를 저장할 수 없음 왜냐? binary 데이터는 전용 편집기가 필요한데 sql 은 텍스트이기 때문 저장못함!!

content에 이미지가 저장될 수 있기도 하고 없기도 하니까 이미지에 대해서 따로 Column 만들지 않고 text로 저장해줌

Base64는 암호화가 아님 암호화는 key 가 필요하기 때문 Base64는 그냥 용도가 binary 데이터를 text로 바꾸는 거

데이터베이스 column을 저장할 때는 Base64 기능을 쓰면 된다. 근데..네이버에 자스 에디터 있음

date

  • 날짜 정보를 저장할 때 사용한다.
  • 년,월,일 정보를 저장한다.
  • 오라클의 경우 날짜 뿐만 아니라 시간 정보도 저장한다.
    mysql / mariaDB는 datetime 써야함

data:image/jpeg;base64, <= 이런 식으로 저장하는 거임

파일 위치 정보를 저장하거나 base64로 저장하는 두가지 방법이 있음

Base64의 다른 사용 예
=> 8bit 문자열을 7bit 문자열로 변환할 때도 사용(네트워킹 프로그램 사용할 때 사용)
=> 암호화 알고리즘이 아님

회원탈퇴했다고 데이터를 전부 지우는 게 아님

DBMS 마다 boolean 타입이 있는 경우가 있고 없는 경우가 있음 없는 경우에는 char, int 에서 구분함 0,1 같이

boolean

  • 보통 true, false를 의미하는 값을 저장할 때는 정수 1 또는 0으로 표현한다.
  • 또는 문자로 Y 또는 N으로 표현하기도 한다.
  • 실제 컬럼을 생성할 때 tinyint(1) 로 설정한다.

mariaDB에서 boolean 값을 저장하려면 내부에서 정한 true false 상수값을 주거나 1, 0 문자를 줘도 되고 숫자 1, 0 을 줘도 된다. 근데 문자 Y, N을 주면 안됨

실제타입이 tinyInt이기 때문에 3을 저장해도 오류가 뜨지 않음 즉 걸러주지 않음 그래서 상수 true false 를 쓰도록 하자

책 -ISBM 라고 고유의 번호가 있음

key column : 데이터를 구분할 때 사용하는 값

데이터를 구분하는 기준 필요

key는 컬럼이 여러개가 될 수 있음
=>
{email, id}, {id, name, email} ...

  • candidate key (후보키 = 최소키)
    • key 들 중에서 최소 항목으로 줄인 키
    • {jumin}, {email}, {id}, {name, tel}

candidate key 중에서 DBMS관리자가 사용하기로 결정한 key = primary key => 한개 이상도 가능

  • primary key (주 키)
    • candidate key 중에서 DBMS 관리자가 사용하기로 결정한 키
    • 예) DBMS 관리자가 id 컬럼의 값을 데이터를 구분하는 키로 사용하기로 결정했다면,
      • 주 키는, {id} 가 된다.
      • 주 키로 선택되지 않은 모든 candidate key는 alternate key가 된다.
  • alternate key (대안 키)
    • candidate key 중에서 primary key로 선택된 키를 제외한 나머지 키.
    • 비록 primary key는 아니지만, primary key 처럼 데이터를 구분하는
      용도로 대신 사용할 수 있다고 해서 대안 키(alternate key) 라 부른다.

대부분 인공키를 사용함 = 대부분은 정수 값을 사용함

  • primary key 값은 다른 데이터에서 사용하기 때문에,
    - 예) 게시글을 저장할 때 회원 이메일을 저장한다고 가정하자.
    • pk 값을 변경하면 그 값을 사용한 모든 데이터에 영향을 끼친다.
    • 그래서 PK 값을 다른 데이터에서 사용한 경우,
      DBMS는 PK 값을 변경하지 못하도록 통제한다.
    • 이렇게 변경될 수 있는 값인 경우에는 PK로 사용하지 말라.
    • 대신 회원 번호와 같은 임의의 키(인공 키)를 만들어 사용하는 것이 좋다.

나열한 순서대로 값 줘야함

키를 설정해줘서 중복데이터 입력 방지
Duplicate entry 'aaa' for key 'PRIMARY' <= primary key 설정했을 때 중복데이터 입력 오류
primary key 는 무조건 not null 임 => 필수입력항목
Primary key를 두개이상 주려면 묶어서 설정해줘야함
constraint 제약조건이름 primary key (컬럼명, 컬럼명, ...)

constraint test1_pk primary key(name, age)
=> 둘중 하나만 달라도 데이터 입력가능

/ 번호는 중복되지 않았지만, name과 age값이 중복되는 경우를 막을 수 없다/

surrogate key = 인공키

unique 주면 alternatekey 줄 수 있음

table 에 index 지정해주면 빠르게 찾을 수 있음

index

  • 검색 조건으로 사용되는 컬럼인 경우 따로 정렬해 두면 데이터를 찾을 때 빨리 찾을 수 있다.
  • 특정 컬럼의 값을 A-Z 또는 Z-A로 정렬시키는 문법이 인덱스이다.
  • DBMS는 해당 컬럼의 값으로 정렬한 데이터 정보를 별도의 파일로 생성한다.
  • 보통 책 맨 뒤에 붙어있는 색인표와 같다.
  • 인덱스로 지정된 컬럼의 값이 추가/변경/삭제 될 때 인덱스 정보도 갱신한다.
  • 따라서 입력/변경/삭제가 자주 발생하는 테이블에 대해 인덱스 컬럼을 지정하면,
    입력/변경/삭제 시 인덱스 정보를 갱신해야 하기 때문에
    입력/변경/삭제 속도가 느려지는 문제가 있다.
  • 대신 조회 속도는 빠르다.

인덱스를 사용할 때는 데이터가 10만건 정도는 넣어야지 체감이 됨

대괄호는 조건임 줘도 되고 안줘도 되고

mariaDB 에서 primary key 는 알아서 제약 조건 이름에 대해서 지정 안해줘도 됨

직관적으로 써넣어라
고정적인 값을 앞에 넣고 가변적인 값을 뒤에 넣어라 DB만들 때
alter table test1
add column no int;
이렇게 넣었을 때 위로 올리는 방법은 없음

기존 column을 바꿀 수 있는데 명령어는 modifiy 써야함 데이터 타입도 다시 지정해줘야함

데이터가 들어간 상태에서는 modifiy 로 변경 가능하거나 불가능하거나 허용 가능하게 할 수 있음

auto_increment; <= 자동 증가기능 but 반드시 key(primary key 나 unique)여야 한다.

컬럼 값 자동 증가

  • 숫자 타입의 PK 컬럼 또는 Unique 컬럼인 경우 값을 1씩 자동 증가시킬 수 있다.

/ auto-increment라도 컬럼의 값을 직접 지정할 수 있다./
insert into test1(no, name) values(1, 'xxx');
=> 이후에 추가하게 되면 마지막 값 +1 된 값이 들어감

Base64****
binary data to text type

profile
레거시 학살자

0개의 댓글