본문 바로가기

Language/MySQL

(33)
[MySQL] 관계형 모델 관계형 모델을 기반으로 작성된 데이터베이스가 '관계형 데이터베이스'이다. SQL은 관계형 모델에 의해 구축된 데이터베이스를 조작하는 체계적인 명령의 집합이지만, 관계형 모델에서 사용하는 용어와 SQL 용어는 일치하지 않다. 관계형 모델(Relational Model)의 기본적인 요소는 릴레이션(Relation)이다. 릴레이션이라는 말 자체가 관계를 뜻하지만 SQL에서는 테이블에 해당한다. 관계형 모델의 릴레이션에는 몇 가지 속성(Attribute)이 있는데 이는 SQL에서 열에 해당한다. 그리고 SQL에서의 행은 관계형 모델에서 튜플(tuple)이라 부른다. 관계형 모델은 데이터 구조에 관해 정의한다. 릴레이션은 튜플의 집합이며, 릴레이션에 대한 연산이 집합에 대한 연산에 대응된다는 이론을 관계대수라 한..
[MySQL] 테이블 결합 - JOIN 보통 데이터베이스는 하나의 테이블에 많은 데이터를 저장하지 않고 몇 개의 테이블로 나누어 저장한다. 이렇게 여러 개로 나뉜 데이터를 하나로 묶어 결과를 내는 방법이 테이블 결합이다. 여기서 결합을 이해하는 동시에 기본이 되는 개념이 집합론의 '곱집합'이다. 곱집합은 합집합이나 교집합처럼 집합의 연산 방법 중 하나이다. 두 개의 집합을 곱하는 연산 방법 으로 '적집합' 또는 '카티전곱(Cartesian product)'라고도 불린다. 데이터베이스의 테이블은 집합의 한 종류라고 할 수 있다. SELECT 명령에서 FROM 구에 테이블을 두 개 지정하면 이들은 곱집합으로 계산된다. 실행결과, 야구의 대진표처럼 집합이 계산된 것을 알 수 있다. FROM구에 복수의 테이블을 지정하면 교차결합(Cross Join)..
[MySQL] 집합 연산 - UNION RDBMS의 창시자인 에드거 커드(Edgar F. Codd)는 관계형 모델을 고안한 인물이다. 관계형 모델을 채택한 데이터베이스를 관계형 데이터베이스라 부른다. 관계형 모델에서의 관계형은 수학 집합론의 관계형 이론에서 유래했다. 데이터베이스에서 하나의 테이블이 집합이고, 테이블의 행이 요소에 해당한다. 행은 여러 개의 열로 구성되는 경우도 있으므로, 수치 상으로는 복수의 값이 존재하나, 집합의 요소라는 측면에서 보면 하나의 행이 곧 하나의 요소가 된다. 집합의 연산에는 '합집합'이 있는데 이는 집합을 서로 더한 것을 말한다. SQL에서 합집합을 계산할 경우 UNION 키워드를 사용한다. [SYNTAX] SELECT 명령 UNION SELECT 명령 위의 예시에서 보이듯 2라는 요소가 a와 b의 테이블에 ..
[MySQL] 뷰 작성과 삭제 뷰(VIEW)는 테이블과 같은 부류의 데이터베이스 객체 중 하나이다. 데이터베이스 객체란 테이블이나 인덱스 등 데이터베이스 안에 정의하는 모든 것을 말한다. 반면 SELECT 명령은 객체가 아니다. 본래 데이터베이스 객체로 등록할 수 없는 SELECT 명령을 객체로서 이름을 붙여 관리할 수 있도록 한 것이 뷰이다. 예를 들어 앞에서 공부했던 서브 쿼리는 FROM구에서도 기술할 수 있다. select * from (select * from sample54) sq; 여기서 FROM구에 기술된 서브 쿼리에 이름을 붙이고 데이터베이스 객체화하여 쓰기 쉽게 한 것을 뷰라고 한다. 뷰를 만든 후 SELECT 명령에서 뷰의 이름을 지정하면 참조할 수 있다. select * from sample_view_67; 복잡한..
[MySQL] 인덱스 작성과 삭제 [SYNTAX] CREATE INDEX DROP INDEX 인덱스는 데이터베이스 객체의 하나로 DDL을 사용해서 작성하거나 삭제한다. 표준 SQL에는 CREATE INDEX 명령은 없고, 인덱스 자체가 데이터베이스 제품에 의존하는 선택적인 항목으로 취급된다. 하지만, 대표적인 데이터베이스 제품에는 모두 인덱스 구조가 도입되어 비슷한 관리방법으로 인덱스를 다룰 수 있다. 인덱스는 이름을 붙여 관리하는데 인덱스가 데이터베이스 객체가 될지, 테이블의 열처럼 취급될지는 데이터베이스 제품에 따라 다르다. Oracle이나 DB2 등에서 인덱스는 스키마 객체가 되어 스키마 내 이름이 중복하지 않도록 지정해 관리한다. SQL Server나 MySQL에서 인덱스는 테이블 내의 객체가 되어, 테이블 내에 이름이 중복되지 ..
[MySQL] 인덱스 구조 '색인'이라고도 불리는 인덱스는 데이터베이스 객체 중 하나이다. 인덱스는 검색 속도를 향상할 수 있는데 여기서 말하는 검색이란 SELECT 명령에서 WHERE구로 조건을 지정하고 그에 일치하는 행을 찾는 일련의 과정을 말한다. 테이블에 인덱스가 지정되어 있으면 효율적으로 검색이 가능해 WHERE구로 조건이 지정된 SELECT 명령의 처리 속도가 향상된다. 인덱스는 테이블과 별개로 독립된 데이터베이스 객체로 작성되지만, 인덱스만으로는 아무런 의미가 없어 인덱스는 테이블에 의존하는 객체라 할 수 있다. 검색에 사용하는 알고리즘 풀 테이블 스캔(full table scan) 인덱스가 지정되지 않은 테이블을 검색할 때는 풀 테이블 스캔이라 불리는 검색 방법을 사용한다. 테이블에 저장된 모든 값을 처음부터 차례로..
[MySQL] 제약 CREATE TABLE로 테이블을 정의할 경우, 열 이외에 제약도 정의할 수 있다. 테이블에 제약을 설정함으로써 저장될 데이터를 제한할 수 있다. NOT NULL 제약 외에도 기본키(Primary Key) 제약이나 외부 참조(정합) 제약 등이 있다. 외부 참조(정합) 제약 복수의 테이블 사이에서 정합성을 유지하기 위해 설정하는 것으로 테이블 간에는 부모 자식과 같은 관계를 가지며 정합성을 유지한다. 자식 테이블에서는 외부 키(Foreign Key)를 지정해 부모 테이블을 참조한다. 부모 테이블에서 참조될 열은 반드시 유일성(Unique Key, Primary Key)을 가진다 a 열에는 NOT NULL 제약, b 열에는 NOT NULL, UNIQUE 제약이 걸려있다. 이처럼 열에 대해 정의하는 제약을 '..
[MySQL] 테이블 작성, 삭제, 변경 [SYNTAX] 테이블 작성 : CREATE TABLE 테이블명(열 정의 1, 열 정의 2,... ) 테이블 삭제 : DROP TABLE 테이블명 테이블 변경 : ALTER TABLE 테이블명 하부 명령 SELECT, INSERT, DELETE, UPDATE는 SQL 명령 중에서도 DML(데이터 조작하는 명령)로 분류된다. 위에 나열된 테이블 작성, 삭제, 변경하는 SYNTAX들은 DDL(데이터를 정의하는 명령)로 스키마 내의 객체를 관리할 때 사용한다. DDL은 모두 같은 문법을 사용한다. CREATE로 작성, DROP으로 삭제, ALTER로 변경할 수 있다. 테이블 작성 RDBMS에서 데이터베이스 상에 제일 먼저 만드는 객체 중 하나가 바로 테이블이다. 이때 CREATE TABLE 명령을 사용한다. ..