목록MySQL (25)
개발자 끄적끄적
- LPAD(값, 총 문자길이 , 채움문자) : 왼쪽 기준으로 지정된 문자, 공백을 채운다는 의미 ex) LPAD(123, 5, '0') -> 결과 : 00123 LPAD(123, 8, '0') -> 결과 : 00000123 - 총 문자길이 - Length(값) = 채움문자수 - RPAD(값, 총 문자길이, 채움문자) : 오른쪽을 기준으로지정된 문자, 공백을 치운다 - LEVEL : 계층적 질의문에서 검색된 결과에 대해 계층별로 레벨 번호를 표시한다 루트 노드는 1이며 하위 레벨로 갈수록 1씩 증가한다 즉, 오라클에서 실행되는 모든 쿼리 내에서 사용 가능한 가상 '열'로써 트리 내에서 어떤 단계(LEVEL)에 있는지를 나타내 는 정수값이다 계층적인 쿼리가 아니라면 모든 값이 0, 즉 같은 단계를 가진다 ..
- 테이블에 데이터가 이미 존재하면 업데이트하고, 존재하지 않으면 입력을 해야하는 경우가 종종 있는데 오라클에서 이런 작업을 한 번에 할 수 있는 쿼리이다 1. 동일한 테이블 구조에서 가지고 있는 B 테이블로부터 데이터를 옮기는 예 MERGE 변경될 테이블명 AS A USING 기준 테이블 명 AS B ON A.컬럼명 = B.컬럼명 WHEN MATCHED THEN 일치할 때 쿼리문 WHEN NOT MATCHED THEN 불일치할 때 쿼리문 1.1 추가 조건 지정을 할 때 MARGE 변경될 테이블명 AS A USING(SELECT 컬럼명 FROM 기준 테이블명) AS B ON(A.컬럼명 = B컬럼명 AND A.컬럼명 = B.컬럼명) WHEN MATCHED AND 조건 THEN INSERT(A.컬럼명) VA..
1. Index Unique Scan - 인덱스를 사용한 검색 방식 중 가장 빠른 방식 - 이 방식을 사용하기 위해서는 키본 키 또는 Unique Index가 생성되어 있어야 하며 인덱스를 구성하고 있는 모든 컬럼이 조건절에서 '='로 비교되어야 한다 - 조인되는 Inner Table 과의 조인 조건에도 Unique index 또는 기본 키 컬럼이 모두 조인에 참여했을 때만 Index Unique Scan을 할 수 있다 2. Index Range Scan - 인덱스를 사용해 인덱스가 생성된 컬럼에 대해 범위를 검색하는 방법 - Unique Index를 사용하지 않거나, 비교연산자를 사용한 대다수의 경우가 이 방식으로 처리되며 비교 연산자로는 =, between, like 등이 사용된다 3. Index S..
~bin>mysql -u root -p Enter password : (비밀번호입력)1111 mysql>show databases; or mysql>show schemas; *database와 schema는 같은 말 mysql>use mysql; : Reading table information for completion of table and column names mysql>show tables; mysql>desc 테이블명; mysql>insert into 테이블명 values(100, 'hong', null); (values값은 모두 작성해야하며 null이면 null을 써야한다 int는 ''를 붙이지 않고, varchar만 붙인다) mysql>select*from 테이블명; (select*from..
- 지정한 컬럼들 기준으로 일종의 목차를 생성하는 것이며 데이터 검색 속도 향상을 위해 사용되는 기술이다 1. 데이블 행의 갯수가 많은 경우 2. 인덱스를 적용한 컬럼이 where절에서 많이 사용되는 경우 3. 검색 결과가 원본 테이블 데이터에 비해 적을 경우 4. 해당 컬럼이 null을 포함하는 경우 1. 테이블의 행의 갯수가 적음 2. 검색결과가 원본테이블 데이터의 많은 비중 3. 원본 테이블의 insert, delete, update가 빈번할 때 1. 인덱스 생성 문법 1) 단일 인덱스 CREATE INDEX 인덱스 명 ON TABLE_NAME(컬럼1); 2) 복합 인덱스 CREATE INDEX 인덱스 명 ON TABLE_NAME(칼럼1, 칼럼2, 칼럼3); 2. 인덱스 조회 문법 SELECT* F..
1. 원자성(Atomicitiy) - 트랜잭션은 데이터베이스 연산의 전부 또는 일부(ALL OR NOTHING)실행 만이 있으며, 일부 실행으로 트랜잭션의 기능을 갖지 않느다 - 즉, 트랜잭션의 처리가 완전히 끝나지 않았을 경우는 전혀 이루어지지 않는 것과 같아야 한다 - Commit, Rollback 2. 일관성(Consistency) - 트랜잭션 실행 결과로 데이터베이스의 상태가 모순되지 않아야 한다 - 트랜잭션 실행 후에도 일관성이 유지되어야 한다 3. 고립성(Isolation) - 트랜잭션이 실행 중에 생성하는 연산의 중간 결과는 다른 트랜잭션이 접근할 수 없다 - 즉, 부분적인 실행 결과를 다른 트랜잭션이 볼 수 없다 4. 지속성(Durability) - 트랜잭션이 그 실행을 성공적으로 완료하면..
- 정규화는 데이터의 일관성, 최소한의 데이터 중복, 최대한의 데이터 유연성을 위한 방법이며 데이터를 분해하는 과정이다 - 정규화는 데이터의 중복을 제거하고 데이터 모델의 독립성을 확보하기 위한 방법이다 - 정규화는 테이블을 분해해서 데이터 중복을 제거하기 때문에 데이터 모델의 유연성을 높인다 - 정규화를 수행하면 비즈니스에 변화가 발생하여도 데이터 모델의 변경을 최소할 수 있다 - 데이터베이스의 성능 향상을 위하여, 데이터 중복을 허용하고 조인을 줄이는 데이터베이스 성능 향상 방법이다 - 반정규화는 조회(SELECT) 속도를 향상하지만, 데이터 모델의 유연성은 낮아진다 - 정규화에 충실하면 종속성, 활용성은 향상되지만 수행 속도가 느려지는 경우 - 다량의 범위를 자주 처리해야 하는 경우 - 특정 범위의..
- 각 속성이 가질 수 있도록 허용된 값들의 집합 - 속성명과 도에민명이 반드시 동일할 필요는 없다 - 릴레이션에서 모든 속성의 도메인은 원자적(Atom-ic)이어야 한다 - 도메인별로 데이터 타입과 길이를 지정한다 - 각 엔터티 속성에 도메인을 할당한다 - 속성을 명사로 분리한다 - 주식별자에 의해 엔터티 내에 모든 인스턴스가 유일하게 구분되어야 한다 - 주식별자를 구성하는 속성의 수는 유일성을 만족하는 최소의 수가 되어야 한다 - 지정된 주식별자의 값은 자주 변하지 않는 것이어야 한다 - 주식별자가 지정되면 반드시 값이 들어와야 한다 1. 반정규화 대상 확인 - 조인(Join)에 사용되는 테이블 및 대량의 데이터 처리, 통계 처리 등을 확인한다 2. 다른 방법 결정 - 인덱스 조정을 통한 튜닝을 실시..
- 분할 투명성 - 위치 투명성 - 중복(복제) 투명성 - 병행 투명성 - 장애 투명성 - 분산 데이터베이스를 사용하는 고객은 시스템이 네트워크로 분산되어 있는지의 여부를 인식하지 못하면서, 자신만의 데이터베이스를 사용하는 것처럼 사용할 수 있다. 이처럼 데이터베이스는 투명성을 제공해야 한다 - 투명성은 분산 데이터베이스에서 중요한 요소이며 투명성의 종류에는 분할, 위치, 지역사상, 중복, 장애 및 병행 투명성이 있다 1. 분할 투명성 - 고객은 하나의 논리적 릴레이션이 여러 단편으로 분할되어 각 단편의 사본이 여러 시스템에 저장되어 있음을 인식할 필요가 없다 2. 위치 투명성 - 고객이 사용하려는 데이터의 저장 장소를 명시할 필요가 없다 - 고객은 데이터가 어느 위치에 있더라도 동일한 명령을 사용하여 ..
- SQL 실행 계획(Execution Plan)을 수립하고 SQL을 실행한다 - 옵티마이저는 SQL의 실행 계획을 수립하고 SQL을 실행하는 데이터베이스 관리 시스템의 소프트웨어이다 - 옵티마이저는 데이터 딕셔너리(Data Diectionary)에 있는 오브젝트 통계, 시스템 통계 등의 정보를 사용해서 예상되는 비용을 산정한다 - 개발자가 SQL을 실행하면 파싱(Parsing)을 실행해서 SQL의 문법 검사 및 구문 분석을 수행한다 - 구문 분석이 완료되면 옵티마이저가 규칙 기반 혹은 비용 기반으로 실행 계획을 수립한다 - 옵티마이저는 기본적으로 비용 기만 옵티마이저를 사용해서 실행 계획을 수립한다 비용 기반 옵티마이저는 통계정보를 활용해서 최적의 실행 계획을 수립하는 것이다 - 실행 계획 수립이 완료..
- 서브쿼리의 결과가 여러 개의 행을 반환하는 것으로 다중 행 연산자를 사용해야 한다 1. IN(Subquery) - Main query의 비교조건이 Subquery의 결과 중 하나만 동일하면 참이 된다 2. ALL(Subquery) - Main query와 Subquery의 결과가 모두 동일하면 참이 된다 3. ANY(Subquery) - Main query의 비교조건이 Subquery의 결과 중 하나 이상 동일하면 참이 된다 4. EXISTS(Subquery) - Main query와 Subquery의 결과가 하나라도 존재하면 참이 된다 - 즉, 어떤 데이터 존재 여부를 확인하는 것으로 결과는 참과 거짓이 반환된다 - 스칼라 Subquery는 반드시 한 행과 한 칼럼만 반환하는 서브쿼리이다 - 만약 ..
- 해시 조인은 먼저 선행 테이블을 결정하고 선행 테이블에서 주어진 조건(WHERE구)에 해당하는 행을 선택한다 - 해당 행이 선택되면 조인 키(JOIN KEY)를 기준으로 해시 함수를 사용해서 해시 테이블을 메인 메모리(MAIN MEMORY)에 생성하고 후행 테이블에서 주어진 조건에 만족하는 행을 찾는다 - 후행 테이블의 조인 키를 사용해서 해시 함수를 적용하여 해당 버킷을 검색한다 - 해시 조인은 EQUI JOIN만 사용 가능한 방법이다 - 해시 함수는 테이블을 해시 메모리에 적재한 후에 해시 함수로써 연결하는 방법이다 - INTERSECT 연산은 두 개의 테이블에서 교집합을 조회한다 - 즉, 두 개 테이블에서 공통된 값을 조회한다 - Non-EQUI는 두 개의 테이블 간에 조인하는 경우 "="을 사..
FROM -> WHERE -> GROUP BY -> HAVING -> SELECT -> ORDER BY SELECT ename FROM emp WHERE empno=10 GROUP BY ename HAVING count(*) >= 1 ORDER BY ename; 1. 명시적(Explicit) 형변환 - 형변환 함수를 사용해서 데이터 타입을 일치 1) TO_NUMBER(문자열) : 문자열을 숫자로 변환 2) TO_CHAR(숫자 혹은 날짜, [FORMAT]) : 숫자 혹은 날짜를 지정된 FORMAT의 문자로 변환한다 3) TO_DATE(문자열, FORMAT) : 문자열을 지정된 FORMAT의 날짜형으로 변환한다 2. 암시적(Implicit) 형변환 - 개발자가 형변환을 하지 않은 경우 데이터베이스 관리 시스..
[begin_label:] LOOP statement_list end loop[end_label] [label] : LOOP ... --terminate the loop if condition then leave [label]; - exit iterate [label]; -반복 end if ... end loop; - leave label : 지정된 label의 반복문을 벗어나게 한다 - iterate label : 지정된 label를 반복하게 한다 ex)1~10까지 출력 create procedure loop_test1() begin declare a int default 0; start_a : loop set a =a+1; if a>10 then leave start_a; end if; select ..
use information_schema; show tables; select * from TABLE_CONSTRAINTS tc ; use lecture; desc student; drop table student; #student table 삭제 where create table member( sno int primary key ); #컬럼을 지정하면서 제약 조건 지정 create table student( sno int primary key, mName varchar(20) not null, phone varchar(30) unique, address varchar(50) default 'seoul', gender varchar(2) check(gender in('m','f')), score int ..
[첫 번째 유형] case value when c1 then p1; when c2 then p2; ... else p3; end case; - c1, c2는 value에 대응되는 상수값 - p1, p2, p3는 처리 내용 ex) create procedure case_test1() begin declare score int default 0; declare str varchar(100); set score = 80; case score when 80 then set str = '팔십'; when 70 then set str = '칠십'; end case select score, str; end; [두 번째 유형] case when c1 then p1 when c2 then p2 else p3 end ca..
- dbms별 유사한 문법 구조를 갖고 있으나 호환되지 않느다 - 컴파일 되어서 해당 dbms내부에 저장된다 따라서 저장형 프로시져라고 불린다 - 반복해서 컴파일 하려면 먼저 기본 procedure를 drop procedure로 삭제해야한다 - procedure은 retrun이 없다 대신, call을 한다 create procedure pro_test1() begin declare cnt int default 0; start_rtn : LOOP insert into test(s_name) values('HONG'); if(cnt>100) then leave start_rtn; end if; set cnt = cnt + 1; end loop; end drop procedure[ if exists ] 프로시..
- 데이터 무결성 유지 - relation을 보다 견고하게 1. PRIMARY KEY(PK) - NOT NULL, UNIQUE의 특성을 갖고 있고 테이블당 하나만 존재 - 둘 이상의 컬럼을 묶어 하나의 PK를 선언 할 수 있다->복합키 - 자동으로 INDEX가 만들어진다 2. FOREIGN KEY(FK) - 외래키. 자식테이블의 데이터가 존재했을 때 부모 테이블의 데이터가 삭제되거나 수정되는 것을 예방 - ON CASSE UPDATE나 ON CASCASE DELETE 옵션을 사용하여 부모 테이블의 데이터가 삭제되거나 수정되었을 때 자식 테이블의 데이터를 삭제하거나 수정할 수 있게 할 수는 있다 - 부모 테이블의 컬럼은 PK나 UNIQUE 제약 조건이 설정되어 있어야 한다 3. NOT NULL - NULL..
- CREATE TABLE 테이블명(컬럼명1 타입(크기) 제약조건, ...) ex) 학번(mid), 성명(irum), 연락처(phone)을 갖는 student테이블 생성 CREATE TABLE student( mid varchar(10),-> 최대 문자수 : 10 irum varchar(50), -> 최대 문자수: 20 phone varchar(20) -> 최대 문자수 : 20 ); ex) data가 없을 때 테이블 생성 create table student( id varchar(10), mName varchar(20), pwd varchar(10), address varchar(50), phone varchar(20) ); - DROP TABLE 테이블명; - CREATE TABLE 테이블명 AS SE..
CREATE FUNCTION 함수명(인자값들) RETURNS 반환타입 BEGIN ... RETURN 반환값; END; *함수생성 시 1418오류가 발생하면, SET GLOBAL log_bin_trust_function_creators = 1; 을 한 번 설정해주고 함수를 생성한다 ex) CREATE FUNCTION f1(a int) RETURNS varchar(50) BEGIN declare rvalue varchar(20); return 'kim'; end; ex) CREATE FUNCTION f1(a int) RETURN varchar(50) BEGIN declare rvalue varchar(20); select firstName into rvalue from employees where emplo..