제약 (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. 이전 1 2 다음 more