- 14장 - 뷰31514데이터베이스를 설계할 때 테이블을 비공개로 유지하고 사용자가 뷰 집합을 통해서만 데이터에 접근할 수 있게 할 수 있다.-- E-mail 정보를 마스킹하는 과정create view customer_vw (customer_id, first_name, last_name, email )asselect customer_id, first_name, last_name, concat(substr(email, 1, 2), '*****', substr(email, -4)) emailfrom customer;뷰는 데이터를 사전 집계하여 데이터베이스에 저장하는 것처럼 보일 수 있는 좋은 방법이다.미리 조인된 결과를 뷰에 저장하는 방식은 적절하게 활용하면 복잡한 쿼리를 단순화하고 성능을 향상시키는 데 도움이 된..
- 2024-09-25 11:11:51
- 13장 - 인덱스와 제약조건31514인덱스는 일반적인 데이터 테이블과 달리 특정 순서로 유지되는 특수 테이블이다.다만 인덱스는 모든 데이터를 포함하는 대신, 행이 실제로 존재하는 위치에 대한 정보와 함께 데이터 테이블에서 행을 찾을 때 필요한 열만 포함한다.따라서 인덱스의 역할은 테이블의 모든 행을 확인할 필요 없이 테이블의 행과 열의 서브셋을 쉽게 검색하는 것이다.SHOW 명령어를 사용해서 특정 테이블의 모든 인덱스를 확인할 수 있다.show index from table \G; 테이블을 생성할 때 명시하는 UNIQUE 제약 조건과 테이블을 생성한 후 설정하는 UNIQUE 인덱스는 어떤 차이가 있을까?∴ 고유 인덱스는 더 유연한 옵션을 제공할 수 있고 쿼리 성능 최적화가 목표다.인덱스가 많을수록 서버가 모든 스키마를 최신 상태로 유지하기..
- 2024-09-24 11:43:24
- 12장 - 트랜잭션31514잠금은 데이터베이스 서버가 데이터 자원의 동시 사용을 제어하는 데 사용되는 메커니즘이다.대부분의 데이터베이스 서버는 다음 두 가지 방법의 잠금 방식을 사용한다.데이터를 수정할 때 쓰기 잠금을 서버에 요청하고 수신하며, 쓰기 잠금이 해제될 때까지는 읽기 요청이 차단된다.다중 버전 동시성 제어(MVCC) : 스냅샷을 활용하여 어떤 읽기/쓰기 요청을 차단하지 않고 일관된 데이터 버전을 사용한다트랜잭션은 여러 SQL 문을 함께 그룹화해서 모든 구문이 성공하거나 성공하지 않도록 하는 장치다.SET AUTOCOMMIT=0MySQL에서 자동 커밋 모드를 해제할 수 있다.commit 또는 rollback 명령어를 실행했을 때뿐만 아니라 다른 작업으로 인해 트랜잭션이 종료될 수 있다.서버가 종료되고 서버가 재시작되면 자..
- 2024-09-23 12:07:34
- 9장 - 서브쿼리31514SQL 구문이 실행을 완료한 후 데이터베이스 서버가 서브쿼리 결과에 할당된 메모리를 해제한다.비상관 서브쿼리 - 독립적으로 실행되는 서브쿼리select city_id, cityfrom citywhere country_id (select country_id from country where country = 'India');상관 서브쿼리 - 하나 이상의 열을 참조하는 포함 구문에 의존적인 서브쿼리따라서 포함 구문이 실행되기 전까지 실행되지 않는다.select c.first_name, c.last_namefrom customer cwhere 20 = (select count(*) from rental r where r.customer_id = c.customer_id);주의할 점은 포함 쿼리의 각 ..
- 2024-09-20 13:15:59
- 8장 - 그룹화와 집계31514count(*)는 테이블의 전체 행을 반환하고, count(컬럼명)은 null 값을 제외하고 컬럼에 저장된 값의 수를 반환한다.WITH ROLLUPselect 컬럼명1, 컬럼명2, count(*)from tablegroup by 컬럼명1, 컬럼명2 with rollup전체 행의 개수와, (컬럼명1, 컬럼명2)로 묶인 그룹의 개수도 반환된다.GROUP BY 절을 포함하는 쿼리에 필터를 추가할 때, WHERE 절에 써서 원시 데이터에 대해 동작하도록 할지 아니면 HAVING 절에 써서 그룹화된 데이터에 대해 동작하도록 할지는 신중하게 고려해야 한다.
- 2024-09-19 16:44:30
- 6장 - 집합 연산자31514집합 연산자 UNION, INTERSECT, EXCEPT를 사용하려면 두 테이블은 다음과 같은 조건을 가져야 한다.두 테이블은 같은 수의 열을 가져야 한다.각 열의 자료형은 서로 동일하거나, 서버가 서로 변환할 수 있어야 한다.UNION 연산자의 경우 중복을 포함하기 위해서는 UNION ALL을 사용한다.MySQL 버전 8.0은 INTERSECT와 EXCEPT 연산자를 지원하지 않는다.집합 연산자 사용 후에 ORDER BY를 통해 데이터를 정렬할 수 있다.
- 2024-09-12 17:45:27
- 4장 - 필터링31514not 연산자를 포함하는 where 절은 읽기 어려울 수 있으므로, 두 번째 코드처럼 변경하면 좋다.where not (first_name = 'STEVEN' or last_name = 'YOUNG') and create_date > '2006-01-01'where first_name 'STEVEN' and last_name 'YOUNG' and create_date > '2006-01-01'select customer_id, rental_datefrom rentalwhere rental_date = '2005-06-14';위와 같이 부등호를 사용하지 않고 between을 사용할 수 있다.select customer_id, rental_datefrom rentalwhere rental_date b..
- 2024-09-11 17:47:34
- 5장 - 다중 테이블 쿼리31514한 테이블에 존재하는 값이 다른 테이블에도 있는지 확인하려고 외래키 제약조건을 선택적으로 생성할 수 있다. 다만, 두 테이블을 조인하기 위해 외래키 제약조건을 반드시 생성할 필요는 없다.내부 조인을 사용한다고 해도 조인 유형을 명시하는 것이 좋다.조인을 수행할 때 테이블의 순서는 중요하지 않다.SQL은 비절차적 언어이고, DBMS의 옵티마이저가 실행 계획을 세울 때, 어떤 테이블을 시작점으로 할 지 선택하고 조인의 순서를 결정한다.그러나 쿼리의 테이블이 항상 특정 순서로 조인되어야 하는 경우, DBMS 마다 다른 부가적인 설정을 통해 순서를 유지할 수 있다.책에서는 단순히 조인을 하는 것보다 하나 이상의 서브쿼리를 사용하는 편이 성능 및 가독성 측면에서 유리하다고 하는데, 개인적으로 나는 조인이 더 유리..
- 2024-09-11 17:45:44
스킨 업데이트 안내
현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)