챕터 3에 나온 내용임 다시 복습
1. 기본키 (primary key)


1-1 기본키 변경하기
alter table people Drop primary key;
이렇게 하면 어차피 테이블당 프라이머리 키는 하나니까 ~ 기본키 삭제됨.
alter table people add primary key (last_name);
이렇게 추가도 가능!
1-2 다중 기본키
프라이머리키를 여러개 둔다는 것이 아니라, 프라이머리키 안에 컬럼이 여러개 들어갈 수 있음
무슨말이냐? 컬럼들이 겹치지 않으면 됨..(?)
두가지가 다 같지 않아야 함 , 예를들어 펄스트네임, 라스트네임을 묶어서 프라이머리키로 했다면
같은 홍씨 같은 전씨 는 상관없고 같은 이름도 상관 없지만 , 같은 성+이름 조합이면 안되는 것!
2. 고유키(unique) 더 알기
3. 외래키
외래키 추가하기
지정하는 것도 있고 아닌 것도 있음
용도상 개념은 섹션과 비즈니스 등 테이블간의 연결!!
제약이 있지 않음 . 없는 번호라든지 중간 삭제해서 붕뜬다든지 하는 경우를 컨트롤 해주지 않음!

요렇게 설정!
외래키 삭제하기
ALTER TABLE _자식테이블명 DROP FOREIGN KEY _자식테이블외래키
외래키 제약

실제 테이블이 아니라 실제테이블에서 어떤 셀렉트문을 실행한 결과 또는 실제테이블들을 조인하거나 서브쿼리들을 이어서 표형태의 어떤 결과물을 출력한 것을 실제 테이블처럼 사용할 수 있도록 이름을 지어서 저장한 것
-- 뷰 생성
CREATE VIEW section_view AS
SELECT section_id, section_name
FROM sections;
쿼리를 테이블로 저장 하듯 !
-- 뷰 조회
SELECT * FROM section_view;
-- 뷰 삭제
DROP VIEW section_view;
1. 보안 - 테이블 구조 및 내용 숨기기
최상위 관리자 계정 말고 다른 계정에서는 한정된 테이블만 접근해야 한다면?
일부만 자유롭게 허가 하고 싶다면 !! 뷰를 만들어서 -> 일부 내용만 보게 권한을 줌!!
2. 편의 - 복잡한 쿼리 사전 구현
매번 쿼리 길게 쳐서 실행하는 것 귀찮으니까 그걸 한줄로 구현 해놔 !!
** 내용 수정이 가능한 뷰

위 내용 참고!
다량의 데이터가 필요해욤
특정 컬럼에 대한 목차생성 - 검색 가속화
테이블 내용변경(추가,수정,삭제)시 시간 더 소모

** 인덱스의 종류(알고만 있어두댕)
1. B-Tree 인덱스
2. full-text 인덱스
3. Hash 인덱스
4. 비트맵 인덱스
만드는 프로그램에서 , 내부적으로 , 트랜잭션~ 돌린다 알고있기 위해..
모든 구문이 성공,혹은 실패 하도록 하기 위해
원자성을 갖기위해? 먼소리야
원자 - 더 나눠지지 않음
여러 구문을 실행했을 때, 어떤 것은 실패하고 어떤것은 성공하면 안되니까..?
은행 송금한다치면 a가 b한테 돈을 보내면 a계좌에선 빠져나가고 b는 입금돼야해
그런데 이 거래가 이뤄지는 순간에 오류발생해서
잘 안됐다면? 출금만 되고 입금이 되지 않았따면? 문제 생김
이런걸 막기위해 트랜잭션이 사용됨!
-- 트랜잭션 시작
START TRANSACTION;
DELETE FROM sections
WHERE section_id > 0;
SELECT * FROM sections;
-- 롤백
ROLLBACK;
SELECT * FROM sections;
일련의 작업을 하고 문제 생겨서 다시 백지화 시켜야 할때 - 롤백 쓰임
트랜잭션 지점까지 돌아가는듯..(?)
commit
savepoint
현재까지는 루트 계정을 이용했어!
루트 계정이라 함은 처음 깔 때 생기는 최고 권한
다양하게 활용할 때 루트계정 사용하면 위험, 실수, 악용, 해킹 위험 있어요
권한이 제한된 부계정을 만들어서 그걸로 사용하는 것이 좋아요
USE mysql;
SELECT * FROM user;
이거하면은 현재 내컴퓨터에 어떤 사용자가 있는지 살펴볼 수 있음!
localhost 127.0.0.1 현재 내컴퓨터 말함
-- CREATE USER '사용자명'@'접속위치' IDENTIFIED BY '비밀번호';
-- CREATE USER 'user_1'@'localhost' IDENTIFIED BY 'abcdefg';
-- CREATE USER 'user_1'@'12.345.678.90' IDENTIFIED BY 'abcdefg';
CREATE USER 'user_1'@'%' IDENTIFIED BY 'abcdefg';
어떤위치든 가능하면 %로!!!
iden ~ 다음은 패스워드!!
그럼 추가돼용. ^^!
사용자 삭제
DROP USER 'user_1'@'%';
-- 사용자에 권한 추가
GRANT SELECT ON mydatabase.businesses
TO 'user_1'@'%';
// 그랜트 다음 ㅇㅇㅇ / 셀렉트 할 권한을 준거임!
GRANT UPDATE, DELETE ON mydatabase.businesses
TO 'user_1'@'%';
// 이렇게 업데이트 딜리트까지 주면댐 ~~
-- 사용자 권한 조회
SHOW GRANTS FOR 'user_1'@'%';
실수로 잘못주거나 바꿔야할 때
-- 사용자 권한 박탈
REVOKE DELETE ON mydatabase.businesses
FROM 'user_1'@'%';
//그랜트만 revoke로
SHOW GRANTS FOR 'user_1'@'%';
-- 데이터베이스의 모든 권한 부여
GRANT ALL PRIVILEGES ON mydatabase.*
TO 'user_1'@'%';
// 모든거주고싶으면 all ㄱㄱ
얄코 수업 참고(유료강의 부분)
https://www.yalco.kr/@sql-adv/4-2/