- 12장 - 트랜잭션31514잠금은 데이터베이스 서버가 데이터 자원의 동시 사용을 제어하는 데 사용되는 메커니즘이다.대부분의 데이터베이스 서버는 다음 두 가지 방법의 잠금 방식을 사용한다.데이터를 수정할 때 쓰기 잠금을 서버에 요청하고 수신하며, 쓰기 잠금이 해제될 때까지는 읽기 요청이 차단된다.다중 버전 동시성 제어(MVCC) : 스냅샷을 활용하여 어떤 읽기/쓰기 요청을 차단하지 않고 일관된 데이터 버전을 사용한다트랜잭션은 여러 SQL 문을 함께 그룹화해서 모든 구문이 성공하거나 성공하지 않도록 하는 장치다.SET AUTOCOMMIT=0MySQL에서 자동 커밋 모드를 해제할 수 있다.commit 또는 rollback 명령어를 실행했을 때뿐만 아니라 다른 작업으로 인해 트랜잭션이 종료될 수 있다.서버가 종료되고 서버가 재시작되면 자..
- 2024-09-23 12:07:34
- 1장 - 서론31514운영체제를 공부하는 이유거의 모든 코드가 운영체제 위에서 실행되므로 운영체제 작동방식에 대한 지식은 적절하고 효율적이며, 효과적이고 안전한 프로그래밍에 중요하기 때문이다.운영체제가 할 일운영체제는 단순히 다른 프로그램이 유용한 작업을 할 수 있는 환경을 제공한다.운영체제는 컴퓨터 시스템을 효율적이고 공정하게 운영할 수 있도록 어느 요청에 자원을 할당할지를 결정해야 한다.운영체제는 제어 프로그램이기 때문에 컴퓨터의 부적절한 사용을 방지하기 위해 사용자 프로그램의 수행을 제어한다.컴퓨터 시스템의 구성하드웨어는 어느 순간이든 시스템 버스를 통해 CPU에 신호를 보내 인터럽트를 발생시킬 수 있다.인터럽트는 다른 많은 목적으로도 사용되며 운영체제와 하드웨어의 상호 작용 방식의 핵심 부분이다.인터럽트는 최신 운영체..
- 2024-09-22 00:30:26
- 4장 - 집약과 자르기31514GROUP BY 구를 사용했을 때 SELECT 구에 입력할 수 있는 건 상수, 집약키, 집약 함수 뿐이다.집약을 사용하면 내부적으로 정렬 또는 해시 알고리즘을 사용하는데, 최근에는 대부분 해시를 사용하는 경우가 많다.예를 들어 GROUP BY 구에 지정되어 있는 필드를 해시 함수를 사용해서 해시키로 변환하고, 같은 해시키를 가진 그룹을 모아 집약하는 방식이다.특히 해시의 성질상 GROUP BY의 유일성이 높으면 더 효율적으로 작동한다.GROUP BY 성능정렬과 해시 모두 메모리를 많은 사용하므로, 충분한 워킹 메모리가 확보되지 않으면 스왑이 발생한다.스왑이 발생하면 저장소 위의 파일이 사용되면서 굉장히 느려진다.따라서 연산 대상 레코드 수가 많은 GROUP BY 구를 사용할 때 충분한 성능 검증을 해줘야..
- 2024-09-20 13:37:22
- 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
- 3장 - SQL의 조건 분기31514SQL은 조건 분기를 할 때, CASE 식을 사용하지만 UNION을 사용하는 경우도 있다.하지만 UNION을 사용하면 내부적으로 여러 개의 SELECT 구문을 실행하는 실행 계획으로 해석되기 때문에 테이블에 접근하는 횟수가 많아져서 I/O 비용이 증가한다. UNION 조건 분기의 문제점-- UNION을 사용한 조건 분기 쿼리(예시)select item_name, year, price_tax_ex as price from items where year = 2002;좋지 않은 가독성TABLE FULL ACCESS로 2번 접근 -> 성능 감소해결 방법SELECT item_name, year, CASE WHEN year = 2002 THEN price_tax_in END AS price FROM item..
- 2024-09-19 15:08:13
- 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
스킨 업데이트 안내
현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)