기술 발전으로 인한 별도의 데이터 관리 프로그램 필요 => 데이터 베이스의 등장(데이터 관리를 학문적으로 체계화 시키자 (사용자 인증/ 사용자 권한 관리/ 동기화 관리))
데이터관리를 학문적으로 체계화 => 데이터 공학
실용기술을 학문적으로 체계화 시킨 것을 엔지니어링이라고 부름
공학 => 체계화
경험적으로 얻은 것을 체계화 하는 것인데 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가 있음
-가변 크기임
-메모리 아낄 수 있음
빈문자열은 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
data:image/jpeg;base64, <= 이런 식으로 저장하는 거임
파일 위치 정보를 저장하거나 base64로 저장하는 두가지 방법이 있음
Base64의 다른 사용 예
=> 8bit 문자열을 7bit 문자열로 변환할 때도 사용(네트워킹 프로그램 사용할 때 사용)
=> 암호화 알고리즘이 아님
회원탈퇴했다고 데이터를 전부 지우는 게 아님
DBMS 마다 boolean 타입이 있는 경우가 있고 없는 경우가 있음 없는 경우에는 char, int 에서 구분함 0,1 같이
boolean
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 중에서 DBMS관리자가 사용하기로 결정한 key = primary key => 한개 이상도 가능
대부분 인공키를 사용함 = 대부분은 정수 값을 사용함
나열한 순서대로 값 줘야함
키를 설정해줘서 중복데이터 입력 방지
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
인덱스를 사용할 때는 데이터가 10만건 정도는 넣어야지 체감이 됨
대괄호는 조건임 줘도 되고 안줘도 되고
mariaDB 에서 primary key 는 알아서 제약 조건 이름에 대해서 지정 안해줘도 됨
직관적으로 써넣어라
고정적인 값을 앞에 넣고 가변적인 값을 뒤에 넣어라 DB만들 때
alter table test1
add column no int;
이렇게 넣었을 때 위로 올리는 방법은 없음
기존 column을 바꿀 수 있는데 명령어는 modifiy 써야함 데이터 타입도 다시 지정해줘야함
데이터가 들어간 상태에서는 modifiy 로 변경 가능하거나 불가능하거나 허용 가능하게 할 수 있음
auto_increment; <= 자동 증가기능 but 반드시 key(primary key 나 unique)여야 한다.
/ auto-increment라도 컬럼의 값을 직접 지정할 수 있다./
insert into test1(no, name) values(1, 'xxx');
=> 이후에 추가하게 되면 마지막 값 +1 된 값이 들어감
Base64****
binary data to text type