IT/DB

[SQL : SQL 기본]

_KH_ 2025. 2. 11. 16:41
 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 필드 추가하고 값 넣기!