[SQL : SQL 기본]
select * from user; : user 정보 출력
desc user; : user 테이블 구조 출력
show tables; : 테이블 보기
□ MYSQL은 workbench 라는 에디터를 사용한다.
□ schemas -> DB. 이 안에 테이블들이 존재
□ DB 프로그램마다 함수, 자료형이 조금씩 다르다. 다만, 큰 틀은 같음
□ sys 데이터는 시스템이 관리하는 데이터
□ administration : 권한 설정, 서버 상태, 데이터 내보내기 등..
□ root(관리자)는 모든 권한을 가진다. root가 user를 생성해서 권한을 부여함
□ cmd 창에서 sql문을 다루기 위해서는 시스템 환경 변수를 설정해야 한다.
- 만약 이때 오라클이 설치되어있다면 '위로 이동'을 연타해서 오라클보다 위로 올려준다. 왜냐하면 오라클을 먼저 인식하기 때문에
[cmd]
mysql --version : 버전 확인 (환경변수 설정됐는지 확인)
2. mysql -uroot -p(비밀번호) : 루트 (관리자) 로그인
- 사용자 로그인 시, mysql -u(아이디) -p(비밀번호)
3. show databases; : 가지고 있는 db 목록 보여줌. 숨겨진 목록까지 전부 표시
+--------------------+
| Database |
+--------------------+
| create |
| information_schema |
| library |
| mysql |
| performance_schema |
| sakila |
| sys |
| test |
| test2 |
| world |
+--------------------+
여기서 schema로 끝나는 애들이 숨겨진 목록!
4. use 데이터베이스명; : 쓰고자 하는 DB 선택
□ 구문을 끝낼 때는 세미콜론(;)을 붙여야 한다. 엔터로는 문장이 끝났음을 알릴 수 없음
□ DB를 설계할 때는 화면에서 어떤 정보를 어떻게 받을 것인지를 미리 설정한 후 변수에 따른 구조(NULL값 유무, PK값 등)를 설정한다.
□ 중복성과 종속성을 제거하기 위해 테이블을 분리하여 정보를 관리하는 것을 "정규화"라고 한다.
□ 기본키(PK)는 테이블에서 겹치지 않는 하나의 유효한 값이다. 없어도 되지만 한 테이블에 하나는 꼭 두는 게 좋다. (데이터 구분)
C (create) 생성
R (Read) 읽기 => 조회
U (Update) 갱신, 수정
D (Delete) 삭제
[MYSQL 실습]
DB 생성 -> 유저 생성 -> 권한 부여
1) DB 생성 : 루트 계정에서 실시한다.
create database test;
>> Query OK가 나오면 잘 생성된 것
SHOW DATABASES;
>> DB 생성 잘 됐는지 확인. 잘 됨
□ SHOW DATABASES 했을 때 MYSQL이라는 테이블이 보이는데 MYSQL은 루트에게만 있는 테이블로, 유저를 관리하는 테이블에 해당한다.
use MYSQL;
MYSQL이 user를 관리하는 테이블로 선택
>> Database changed가 나오면 테이블 전환 잘 된 것
2) 유저 생성
create user 'mysqluser'@'localhost';
>> 로컬호스트에서 이 이름으로 유저를 생성해주고
grant all privileges on test.* to 'mysqluser'@'localhost' with grant option';
test 테이블에 대한 모든 권한을 mysqluser에게 준다. 또한, with grant option을 사용하여 mysqluser가 다른 유저에게 권한을 부여할 수 있도록 한다.
identified by 'mysql'; 이 머엿지
flush privileges;
권한 적용
[테이블 제약조건]
PK : Primary Key => 기본키 속성 추가
NN : Not Null => 데이터 값으로 null이 오지 못하게 막음
AI : Auto Increment => 자동 증가 : 정수만 가능
UQ : unique => 중복 안됨.
B : 바이너리 값(이진수. 0과 1)
UN : Unsigned => 음수 안됨
ZF : zero fill => 숫자 앞에 0으로 채움 ex. 0001
G : generated => 속성 자동 생성
default : 기본값
[데이터 자료형 - MYSQL에 국한]
* (m) : 값이 들어감
[숫자]
1. 정수
1) bit(m) : 1~64 Binary 값을 지정
2) bool : TRUE(값으로는 1) / FALSE (값으로는 0) == TINYINT(1)
3) tinyint(m) : 0-255 사이의 작은수 표현 (-128 ~ 127) ★
// 많이 씀
4) smallint(m) : 2BYTE 0 ~ 65536 (-32768 ~ 32767)
5) mediumint(m) : 3BYTE
6) int(m) : 4바이트 => 자바 int와 동일 // 많이 씀
7) bigint(m) : 8바이트 => 자바 long과 동일 // 많이 씀
(자바랑 자료형을 많이 맞추므로 int랑 bigint를 많이 쓰는거임)
2. 실수
1) float(m,d) : 정밀도가 작은 부동소수점 표현 (d : 소수 자리수)
2) double(m,d) : 정밀도가 큰 부동소수점 표현
=> MySQL 8.0.17 이후로 사용되지 않음
3) decimal(m,d) : 고정 소수점 표현 (소수점으로 통합된다면 통합되어 쓰인다
3. 문자
1) char(m) : 고정 길이 문자열 (0-255)★
-> 변하는 길이가 아니라 고정되어있는 글자에 쓰는 것이 좋음★
2) varchar(m) : 가변길이 문자열(0-65536)★
-> 메모리를 효율적으로 쓸 수 있도록 함
(고정된 길이가 아니라면 대부분 varchar 사용)
3) tinytext : 1바이트 문자열 저장 => 가변길이★ (글자가 많을 떄.. 게시글 작성 시 등)
4) tinyBOLB : 바이너리 데이터 저장용 => 이미지, 동영상 처리
(BOLB 자체가 그런 용도로 쓰인다)
5) text : 2바이트 가변길이
6) mediumtext : 3바이트
7) longtext : 4바이트
4.날짜
1) date : 날짜
2) datetime : 날짜 + 시간 => 가장 많이 사용함 (보통 시간까지 같이 체크하는 경우가 많아서)
3) timestamp : insert, update 연산에 유리한 형태(DB에 들어갈 때 연산의 형태라면 많이 사용)
4) year : 연도만
5) time : 시간만
+) 테이블 추가 예제
create table student(
num int,
name varchar(30) not null,
age int default 20,
address varchar(45),
major varchar(45),
score int,
primary key(num)
);
nsert into student(num, name, address, major, score) values (2222, '강길순', 'Seoul', 'English', 87);
* insert into ~ values 의 경우, 만약 모든 필드의 값을 다 넣을 것이라면 values 앞에 필드명 안써줘도 된다!
tel 필드 추가하고 값 넣기!