의미 있는 테이블 생성
이전 강의에서 우리는 이미 테이블 생성을 위한 쿼리에 대해 조금 알게 되었습니다. 이제 이에 대해 더 깊이 파고들 차례입니다.
테이블 생성은 Java에서 클래스를 선언하는 것과 매우 유사하며 다음과 같은 패턴을 가집니다.
CREATE TABLE table_name (
column1 datatype,
column2 datatype,
column3 datatype,
....
);
예를 들어 사용자가 포함된 테이블을 만드는 쿼리를 작성해 보겠습니다.
CREATE TABLE user (
id INT,
name VARCHAR(100),
level INT,
created_date DATE,
);
여기에는 많은 뉘앙스가 표시되어 있지 않기 때문에 매우 간단해 보입니다.
첫째, 테이블에 추가 설정이 있을 수 있습니다.
둘째, 각 열에는 추가 설정이 있을 수 있습니다.
그리고 열 생성 설정부터 시작하겠습니다.
테이블의 키
이름 및 데이터 유형 외에도 테이블 열에는 다음 설정이 있을 수 있습니다.
기본 키 | 열은 테이블의 키입니다. |
고유 키 | 모든 열 값은 고유해야 합니다. |
기본값 | 기본값 |
NULL이 아님 | 값 NULL 허용 금지 |
자동 증가 | 새 레코드가 테이블에 추가되면 SQL Server가 자동으로 값을 증가시킵니다. |
생성됨 | 계산된 필드 |
저장 | 데이터 저장 위치: 디스크 또는 메모리 |
논평 | 열 주석(예: 현지 언어로 된 제목) |
아래에서 그 중 일부를 살펴보겠습니다.
먼저 PRIMARY KEY 입니다 .
대부분의 경우 이것은 이름이 id이고 유형이 INT인 별도의 열입니다. 이것은 소위 테이블의 "마스터 키"이며 모든 행에는 이 키에 대한 고유한 값이 있습니다. 다른 테이블이 우리 테이블의 레코드를 참조하고 특정 레코드를 가리킬 수 있도록 주로 사용됩니다.
두 번째는 UNIQUE KEY 입니다 .
어떤 면에서는 PRIMARY KEY와 유사하지만 의미론적 로드는 완전히 다릅니다. 열에 UNIQUE 속성이 있는 경우 해당 열의 모든 값은 고유해야 합니다. UNIQUE KEY와 PRIMARY KEY의 차이점에 대한 좋은 예는 여권 사무소에 있는 사람들의 목록입니다.
세금 번호는 PRIMARY KEY로, 다른 테이블에서 올바른 사람을 쉽게 참조할 수 있도록 하기 위해 사용됩니다.
여권 번호는 고유 키입니다. 두 사람이 동일한 여권 번호를 가질 수 없습니다. 단, 여권번호는 변경이 가능합니다. 예를 들어 성을 변경할 때. 그리고 세금 번호는 영원히 남을 것입니다. 이것이 PRIMARY KEY의 주요 업무입니다. PRIMARY KEY를 지정하는 쿼리의 예:
CREATE TABLE user (
id INT PRIMARY KEY,
name VARCHAR(100),
level INT,
created_date DATE,
);
데이터 유형 설정
덜 중요하지만 유용한 속성이 있습니다.
기본값
테이블에 데이터를 삽입(새 행 추가)할 때 기본값이 있는 일부 열의 값을 생략할 수 있습니다. 이 경우 SQL 서버는 단순히 열 자체의 값을 설정합니다.
MySQL 버전 8부터 식을 값으로 지정할 수 있습니다.
NULL이 아님
테이블을 만들 때 열에 대해 NOT NULL 특성을 지정하면 SQL Server는 이 열에 NULL 값을 저장할 수 없도록 합니다. 기본적으로 모든 열은 INT 열을 포함하여 NULL 값을 가질 수 있습니다. Java 프로그래머에게는 다소 명확하지 않습니다.
자동 증가
일반적으로 열 ID에 사용됩니다. 테이블에 새 행을 추가할 때 SQL 서버가 이 항목에 대한 ID를 할당하기를 원할 것입니다. 테이블에 얼마나 많은 행이 있는지 서버보다 더 잘 아는 사람은 누구입니까? 특히 다른 클라이언트의 요청이 동일한 SQL 서버로 이동하는 경우.
이것이 바로 AUTO_INCREMENT 속성이 하는 일입니다. 새 행을 추가할 때 단순히 ID로 아무 것도 전달하지 않으며 SQL 서버는 이 레코드에 대한 올바른 ID를 지정합니다. 마지막 기존 레코드의 ID를 가져와 1씩 증가시킵니다. 이 속성은 정수 및 실수 유형과 함께 사용됩니다. 물론 이러한 테이블을 만드는 예를 들어 보겠습니다.
CREATE TABLE user (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(100) NOT NULL,
level INT DEFAULT 1,
created_date DATE NOT NULL,
);