본문 바로가기

아옳옳의 코딩공부/아옳이의 데이터베이스 MySQL

2021-06-01 MySQL 데이터베이스 테이블 종합 실습 , 유저권한 , 트렌젝션 , 뷰

반응형

테이블 종합 실습

@테이블 압축하기 

ROW_FORMAT= COMPRESSED

압축을 하게 되면 일단 크기가 작은것이 장점이지만, 압축을 하는 과정이 있기때문에 실행시간이 더욱 길어진다는 단점이 있다. 

 

@임시 테이블

TEMPORARY

#사용법은 일반 테이블과 같으나 세션이 종료 되면 자동으로 삭제됨 . 그 말은 워크벤치를 종료하거나 MySQL을 종료하면 사라지는 테이블이다. 

#테이블생성한 클라이언트만 접근 가능하고 , 내 다른테이블과 동일한 이름을 사용 가능하지만 동일 이름시 임시테이블에만 접근 가능하고 기존 테이블 접근 불가 (종료 하거나 삭제해야 기존 테이블 접근 가능 )

 

@테이블 삭제 ( 기존에 많이 다뤘었지만 중요 하니 한번더 !! ) 

 

@ 테이블 수정  ( 기존에 많이 다뤘었지만 중요 하니 한번더 !! ) 

@테이블에서 칼럼 삭제하기  ( 기존에 많이 다뤘었지만 중요 하니 한번더 !! ) 

 

@테이블에서 원하는 열만 지우기 ( 기존에 많이 다뤘었지만 중요 하니 한번더 !! ) 

만약 전부를 지우고 싶다면 테이블 이름만 적어주고 일부만 지우고 싶다면 조건 넣어주면 된다. 

참고로 DROP은 테이블 자체를 삭제해버리고 DELETE는 속에 데이터만 지우고 칼럼은 남겨 놓는다 

 

@테이블에 데이터 열이름 데이터형식 및 속성 변경하기 ★ 자주사용함

@CHAGE 제약조건    ★중요함
예를 들면 어떤 회사에서 필요한 물건의 발주를 100개만 넣어야 하는데 직원이 실수로 0을 하나 더 넣어 1000개를 발주 넣은것이다. 이러한 불상사를 미리 방지하고자 해당 항목에 대해서 50 ~ 200개 라는 제약조건을 주는 것이다. 그럼 실수로 1000개를 적으면 바로 오류가 발생되어 실수를 알수 있는 것이다.

 

나이를 0살부터 120살 사이만 입력 가능하도록 한것이다.


유저권한

회사에서 데이터베이스를 사용한다고 가정해보자

회사라면 직급에따라 하는 일 다를 것이다 그떄 직급에 따라 데이터 베이스에 접근을 해야 한다 

예를들면 이제막 입사한 신입사원이 모든데이터베이스에 접근가능하다고 보면 신입사원이 잘못 만져 데이터베이스가 잘못될수도있고 혹은 신입이 보지 말아햐할 데이터들이 있을것이다. 

그렇다고 신입사원은 놀고만 있냐? 아니다 신인사원도 데이터베이스로 일을 해야 하기 때문에 접근해도 문제없는 데이터 베이스만 접근하도록 유저의 권한을 설정 하는 것이다.

@ 유저 생성 

@내 데이터베이스 접근 가능자 확인 

@정보 변경 

@권한 보기 

@권한 주기 

잘 봐야하는 부분은 노란 부분이다. 지금은 ALL을 줘서 모든 권한을 다 주었지만 ALL 부분에 내가 주고 싶은 권한만 따로 설정해서 줄수 있으며,  *.* 부분은 앞부분*는 데이터베이스 이름 뒷부분* 은 테이블 이름으로 데이터베이스와 테이블에도 권한을 주어 접근조차도 못하게 막을수 있다. 

 

@권한 해제

여기도 권한 준거랑 마찮가지로 권한 해제할때도 내가 원하는 항목만 지정 할수 있다. 

 

@유저삭제

트렌젝션

트렌젝션은 쉽게 설명하면 게임에서 세이브한다고 생각하면된다. 

데이터베이스를 가지고 작업을 하다 실수로 데이터를 수정하거나 삭제했을때 내가 미리 지정해놓은 곳으로 돌아 갈수 있는 기능이다. 

실제로 회사에서는 많이 사용하고 있으며 보다더 데이터를 안전하게 관리하기 위함이다. 

 

@ 트렌젝션 시작하기 먼저 선언을 해주어야 다음에 세이브 포인트 설정이 먹힌다 .

@세이브포인트 만들기

지금은 이름을 b 라고 지정 했지만 이름은 내마음대로 지정이다.

 

@세이브 포인트로 돌아가기

이렇게 보면 잘 모를거 같아서 전체적인 부분을 보면 이해가 될것이다.

아까 위에서 임시테이블에 대해서 배웠다.  임시테이블은 말그대로 임시테이블이라 프로그램 종료시 없어진다고 생각하면된다. 하지만 뷰는 테이블과 같은 형식의 다른 테이블이라고 생각하는게 편할거 같다 .

 한가지더 미리 지정해놓은 sql문을 저장하여 다른곳에 사용할 수도 있다. 

 

이러한 employee 테이블이 있다. 그런데 신입사원은 rating_grade와 address는 알면 안되는 정보이기 때문에 신입사원이 이러한 정보를 보지 못하게 하고 싶다 이럴때 뷰를 사용할수 있다. 

@뷰 생성하기 

 

뷰에 이렇게 생겨나게 된다 이렇게 생기면 다른 테이블처럼 사용이 가능하다 .

 

@ 다른곳에서 사용하기 

이렇게 처음 테이블에서 원하는 것들만 뺴내서 따로 뷰로 만들어 주었다 . 이렇게 보안에 도움을 줄수도 있고 

이러한 복잡한 쿼리문을 뷰로 저장하여 나중에 불러와 사용할때 이름만 가지고도 복잡한 쿼리문을 간결하게 할떄도 사용이 된다. 

 

@몇가지 알아야할 사항들 

뷰는 수정 삭제등이 가능하지만 수정을 하기보다는 다시 만드는게 좋다 어짜피 수정을해서 사용하나 다시 만들어서 사용하나 그게 그거다 그래서 수정은 잘 안씀 

 

뷰의 속성은 원본이랑 똑같다 . 그래서 원본에 not null이 걸려 있거나 했을때 속성을 안넣게 되면 오류

위와 같은 사항이라고 생각해보면된다.  신입만 볼수 있도록 몇가지를 빼고 뷰를 만들어 주었는데 넣지 않은 항목의 속상값이 not null 이라면 뷰에서는 없는 옵션이라 않넣어도 될거 같지만 실제로는 오류가 난다.  

 

예를들어 뷰를 생성할때 키가 180 이상인 사람들만 가져와서 뷰를 만들었다.  

그리고 난뒤에 뷰에 키가 160인 사람을 넣는다고 생각해보면 오류가 날거 같지만 정상 실행된다 

그 이유는 추가를 했을때 원본에는 삽입이 되지만 실제 뷰는 아까 180이상인 사람들만 가져와 만든다는 실행문이 한번더 실행되기 때문에 실제로 뷰에서 검색을 했을때는 없는것으로 나온다 

그러한 상황을 방지하고자 뷰를 생성할때 마지막에 

이렇게 추가해주면 저것이 감지를 하고 오류를 띄워 주게 된다 .

 

마지막 사용자는 참조가 불가능 하다 .

반응형