본문 바로가기
제약 (Constraint) 주로 열에 저장되는 데이터들을 제어하는 규칙을 정의하는 것을 제약이라고 한다. 제약은 데이터의 무결성을 유지하기 위해 필요하다. 데이터의 정확성, 일관성을 유지하는 것을 데이터의 무결성이 유지된다고 생각하면 된다. 데이터의 무결성은 데이터의 가치, 신뢰성면에서 꼭 필요한 속성이다. 제약은 컬럼 레벨과 테이블 레벨로 테이블 생성 시 줄 수 있다. 제약의 종류는 다음과 같다. NOT NULL UNIQUE PRIMARY KEY FOREIGN KEY CHECK DEFAULT NULL CONSTRAINT NOT NULL 제약은 특정 열이 NULL값을 가지지 못하도록 하는 제약이다. CREATE TABLE student ( ..., student_name VARCHAR(20) NOT NULL, student_age.. 2022. 8. 14.
(MySQL) INNER JOIN INNER JOIN //두 query의 결과는 같다. //INNER JOIN 사용 SELECT * FROM product INNER JOIN ordering ON product.product_id = ordering.product_id; //INNER JOIN 사용x SELECT * FROM product, ordering WHERE product.product_id = ordering.product_id; EQUI JOIN, NON-EQUI JOIN, NATURAL JOIN 1. EQUI JOIN 일반적인 INNER JOIN 형태로 두 테이블에서 기준 컬럼의 로우값이 같은 로우 반환 JOIN 조건 절에 EQUAL 연산자(=)로 연결 주로, Primary key와 Foreign key 컬럼이 조인할 때 .. 2022. 8. 12.
System Call user process가 kernel 영역의 기능을 수행할 수 있게 해주는 programming interface다. 즉, user process가 HW 접근하여 필요한 기능을 수행할 수 있게 해준다. 파일을 읽어오거나, 쓰고, 화면에 메시지를 출력하는 kernel 모드의 기능을 process가 수행할 수 있도록 해주는 것이 System Call의 역할이다. user process가 소프트웨어 인터럽트를 통해 커널의 기능을 이용하기 위한 서비스를 요청하는 하나의 방법 https://limjunho.github.io/2021/05/11/SystemCall.html https://luckyyowu.tistory.com/133 2022. 1. 25.
32bit → 64bit CPU의 레지스터 크기가 달라졌다. 레지스터란 CPU가 내부에서 처리할 명령이나 연산 중간값 등을 일시적으로 저장하는 임시 기억 장소이다. 메모리 중에서 가장 빠른 속도를 가졌다. 즉, CPU가 한 번에 처리할 수 있는 데이터의 크기가 32bit에서 64bit로 커졌다는 의미이다. 게다가 32bit 시스템일 땐 CPU가 인식할 수 있는 최대 램 용량이 4GB뿐이었다. 더 높은 용량의 램을 설치해도 4GB 밖에 활용할 수 없었다. 2^32 = 4,294,967,296 (0~4,294,967,295) 까지의 수를 레지스터가 저장(표현)할 수 있고, 운영체제는 메모리 내부의 주소를 1byte 크기씩 숫자를 매겨 관리하기 때문에 총 4,294,967,295byte(=4GB)만큼의 메모리(RAM)만 CPU가 인식.. 2021. 12. 7.
인덱스 인덱스는 테이블의 특정 열을 특정 자료구조에 맞게 정리한 것으로, I/O 빈도를 줄이고, 해당 자료구조에 맞는 특정 알고리즘으로 데이터를 빠르게 검색하는데 사용한다. 즉, 인덱스의 역할은 검색속도의 향상이다. 인덱스가 없으면 MySQL은 처음부터 끝까지 전체 테이블을 검색한다. (full table scan) DBMS의 인덱스는 레코드의 키 값을 기준으로 항상 정렬되어 있다. 항상 정렬되어 있기 때문에, 주로 SELECT 명령의 검색을 빠르게 하기 위해 사용한다. 테이블에 데이터를 INSERT, UPDATE, DELETE 할 때는 인덱스를 정렬하는 작업도 같이 하기 때문에, 데이터의 변경이 자주 일어나는 테이블에서는 인덱스의 사용을 조심해야 한다. 인덱스의 자료구조는 B-tree(혹은 B+tree) 방식.. 2021. 12. 6.
DELETE / TRUNCATE / DROP 비교 DELETE DML WHERE 구를 사용하여 원하는 행을 선택하여 삭제할 수 있고, 사용하지 않으면 테이블 모든 행을 삭제할 수 있다. 내부적으로 한줄씩 제거하는 과정을 거친다. 따라서 쿼리문 처리속도가 느릴 수 있다. 데이터는 삭제하지만 데이터가 있던 storage는 release되지 않고 그대로다. DELETE FROM table1; DELETE FROM table1 WHERE 조건식; ROLLBACK; COMMIT; TRUNCATE DDL 데이터를 전부 삭제하지만, 테이블 정의는 지워지지 않는다. 테이블이 최초 생성되었을 당시로 돌아간다. 즉, 최초 생성 시 storage만 남아있고, 데이터가 있던 stroage는 release 된다. TRUNCATE TABLE table1; DROP DML 테이블.. 2021. 12. 4.
테이블 생성 / 삭제 / 변경 테이블 생성 (CREATE) CREATE TABLE 테이블명 ( 열 정의1, 열 정의2, ... ); 열 정의는 열명 자료형 [DEFAULT 기본값] [NULL | NOT NULL] 형태다. 예) CREATE TABLE sample ( no INTEGER DEFAULT 0 NOT NULL, name VARCHAR(30), date DATE); 기본값은 DEFAULT + 해당 자료형 리터럴로 설정하거나 생략 가능하다. NOT NULL로 지정한 경우만 NULL을 허용하지 않고, NULL을 명시하거나 생략 시 NULL을 허용한다. 테이블 삭제 (DROP) DROP TABLE 테이블명; 여기서 DROP 명령은 테이블 안 데이터는 물론 테이블 정의까지 전부 다 삭제한다. 데이터 삭제 만일 테이블 정의는 그대로 두.. 2021. 12. 4.
데이터베이스 계층 구조 인스턴스 - 데이터베이스 - 스키마 - 테이블, 인덱스 .프로시저. 뷰 등등 표준 관계형 데이터베이스에선 4계층 구조를 가진다. MySQL에선 데이트베이스 = 스키마로 보는 3계층으로 이루어져있다. Oracle에선 4계층 구조를 지닌 듯 보이지만 인스턴스 아래 하나의 데이터베이스만 만들 수 있다. 그래서 인스턴스 바로 아래 스키마 층이 있는 것처럼 여겨지기도 한다. 2021. 12. 4.
IN / EXISTS / 상관 서브쿼리 IN 열명 IN (집합) 스칼라 값은 = 연산자로 비교가 가능하다. 하지만 비교대상이 집합인 경우에는 = 연산자를 사용할 수가 없기 때문에 IN 키워드를 사용하여 집합 내에 해당 값이 존재하는지 비교할 수 있다. 집합 내에 해당 값이 존재하면 참이다. 여러 OR 조건문을 하나의 식으로 쓴 것이다. IN 왼쪽에는 하나의 열만 지정되기 때문에 집합은 집합 패턴 1, 2의 경우만 가능하다. 예) table1 no name 1 aa 2 bb 3 cc 4 dd 5 NULL table2 no name 1 가가 2 나나 3 다다 SELECT * FROM table1 WHERE table1.no IN (SELECT table2.no FROM table2); 결과) no name 1 aa 2 bb 3 cc 먼저 tabl.. 2021. 12. 4.
서브쿼리 SQL 명령문 안에 지정하는, 하부 SELECT 명령으로 괄호로 묶어서 지정한다! 일반적인 4가지 패턴 1. 햐나의 값 반환 MIN(a) 10 이 경우 '스칼라 값을 반환한다.'고 한다. 만일 = 연산자를 사용하여 비교할 경우에는 스칼라 서브쿼리여야 한다. 2. 하나의 열, 여러개의 행 a 1 2 3 3. 하나의 행, 여러개의 열 MIN(a) MAX(b) COUNT(c) AVG(d) 12 40 70 8 4. 여러 행, 열 no a b 1 45 5 2 78 25 WHERE 구에서 주로 사용하고 SELECT 구, FROM 구, INSERT 구 등 다양한 곳에서 쓰일 수 있다. INSERT 명령과 서브쿼리 INSERT 명령에서는 1. VALUES 구의 일부로 서브쿼리를 사용하는 경우와 2. VALUES 구 대.. 2021. 12. 3.