목록프로그래밍 (408)
쌓고 쌓다
인덱스(index)는 데이터를 빠르게 찾게 도와준다. 인덱스의 장점 SELECT 문으로 검색하는 속도 향상. 그 결과로 전체 시스템의 성능이 향상. 인덱스의 단점 인덱스도 공간을 차지하기 때문에 추가적인 공간이 필요하다. 처음에 인덱스를 만드는 데 시간이 오래 걸릴 수 있다. SELECT가 아닌 데이터의 변경(INSERT, UPDATE, DELETE)이 자주 일어나면 오히려 성능 저하. 1. 클러스터형 인덱스(Clustered Index) 기본키로 지정하면 자동 생성되며 테이블에 1개만 만들 수 있고 기본키의 열을 기준으로 자동 정렬 됨. 영어 사전처럼 책의 내용이 이미 알파벳 순서대로 정렬되어 있다. 그래서 별도의 찾아보기(책의 맨뒤)가 없다. 책 자체가 찾아보기이다. 2. 보조 인덱스(Secondar..
뷰(View) 데이터베이스 개체 중에 하나이다. 테이블처럼 데이터를 갖는 것이 아니라 SELECT문으로 만들어져 그 결과가 화면에 출력되는 방식이다. 단순 뷰 : 하나의 테이블과 연관된 뷰 복합 뷰 : 2개 이상의 테이블과 연관된 뷰 뷰의 기본 생성 뷰 개념 SELECT mem_id, mem_name, addr FROM member; SELECT의 결과로 출력된 것이 결국 테이블의 모양이다. 결국 mem_id, mem_name, addr 3개의 열을 가진 테이블로 봐도 된다는 것이다. 뷰가 이런 개념으로 실체가 SELECT문이 되는 것이다. 이 실행 결과를 v_member라고 부르자. 보통 뷰의 이름 앞에 v_를 붙이는 것이 일반적이다. 뷰의 형식 뷰를 만들 때 아래의 형식으로 만든다. CREATE VI..
고유 키 제약조건 '중복되지 않는 유일한 값'을 입력해야 하는 조건이다. 기본 키와 유사하지만, 고유 키 제약은 NULL 값을 허용한다. 기본 키는 테블에 1개만 설정해야 하지만, 고유 키는 여러 개를 설정 가능하다. 회원 테이블에 email은 중복되지 않으므로 고유 키로 설정해보자. CREATE TABLE member ( mem_id CHAR(8) NOT NULL PRIMARY KEY, mem_name VARCHAR(10) NOT NULL, height TINYINT UNSIGNED NULL, email CHAR(30) NULL UNIQUE ); 데이터를 입력해보자. INSERT INTO member VALUES('BLK', '블랙핑크', 163, 'BLK@email.com'); INSERT INTO ..
기준 테이블의 열이 변경될 경우 INSERT INTO member VALUES('BLK', '블랙핑크', 163); INSERT INTO buy VALUES(NULL, 'BLK', '지갑'); INSERT INTO buy VALUES(NULL, 'BLK', '맥북'); member 테이블이 기준 테이블이며, buy 테이블은 참조 테이블이다. 내부 조인을 이용해 INSERT 결과 확인 SELECT M.mem_id, M.mem_name, B.prod_name FROM buy B INNER JOIN member M ON B.mem_id = M.mem_id; 이 상태에서 기준 테이블 member에 있는 회원 아이디 'BLK'를 'PINK'로 바꿔보자. UPDATE member SET mem_id = 'PINK'..
기본 키(primary key)와 외래 키 또한 제약 조건이다. 중복되지 않는 열의 데이터를 위해 고유 키(Unique) 조건 설정. 실수로 말도 안 되는 값의 입력을 방지하기 위해 체크(Check) 조건 설정. 당연한 값을 입력할때 사용하는 기본값(Default) 조건 설정. 반드시 값을 입력해야하는 NOT NULL 조건 설정. 제약조건은 데이터의 무결성을 지키기 위해 제한하는 것이다. 기본 키 제약조건 데이터를 구분할 수 있는 식별자를 기본키라고 부름.(학번, 사번, 아이디) 기본키는 중복될 수 없으며 NULL을 허용하지 않는다. 기본키는 테이블 당 1개만 지정이 가능하며 한 개의 열에 지정해야 함. CREATE TABLE에서 기본 키 설정 방법(1) - PRIMARY KEY 예약어 CREATE TA..
sort 함수는 #include 을 해줘야 사용이 가능하다. sort 함수는 기본이 오름차순 정렬이다. 오름차순 정렬(기본) vector v; v.push_back(1);v.push_back(3); v.push_back(5); v.push_back(2); v.push_back(4); sort(v.begin(), v.end()); 실행 결과 ( 오름차순 ) + compare 함수(정렬 기준 함수 이용) 이용해서 오름차순 정렬 bool comp(int a, int b) { if (a < b) return true; else return false; } sort(v.begin(), v.end(),comp); compare 함수를 만들 때 왼쪽(int a)을 기준으로 오른쪽(int b)와 비교 연산자를 이용해 ..
테이블은 행과 열로 구성 행 : 로우 또는 레코드 열 : 컬럼 또는 필드 데이터베이스 생성 DROP DATABASE IF EXISTS naver_db; CREATE DATABASE naver_db; member 테이블 생성 USE naver_db; DROP TABLE IF EXISTS member; CREATE TABLE member ( mem_id CHAR(8), -- 회원 아이디(PK) mem_name VARCHAR(10), -- 이름 mem_number TINYINT, -- 인원 수 addr CHAR(2), -- 주소(경기,서울,경남 2글지) phone1 CHAR(3), -- 국번(02, 031, 070) phone2 CHAR(8), -- 나머지 전화번호 (하이픈제외) height TINYINT U..
fill 함수 사용을 위해 #include 필요. 함수 원형 void fill(const _FwdIt _First, const _FwdIt _Last, const _Ty& Val) First 와 Last Iterator를 받아 초기화한다. 채우는 범위는 [First, Last)이며 Last는 포함하지않는다. 예제 ( int 배열 초기화 ) int arr[5]; fill(arr, arr + 5, -1); for (int i = 0; i < 5; i++) cout