mysql create table tutorial with examples
이 자습서에서는 구문 및 프로그래밍 예제와 함께 MySQL CREATE TABLE 명령 사용을 살펴 봅니다.
CREATE TABLE 문은 SQL의 DDL (Data Definition Language)의 일부입니다.
SQL 테이블의 명명 규칙에 대한 규칙과 함께 주어진 데이터베이스에서 테이블을 생성하고, 테이블을 생성하는 동안 열 이름 및 DB 엔진을 언급 할 수있는 방법에 대해 설명합니다.
학습 내용 :
전제 조건
SQL 명령을 실행하기위한 전제 조건은 MySQL 서버를 다운로드하는 것입니다. 무료 커뮤니티 에디션을 다운로드 할 수 있습니다. 여기.
또한이 자습서의 모든 예제와 토론에 MySQL Workbench SQL Client를 사용할 것입니다. MySQL Workbench의 무료 커뮤니티 에디션을 다운로드 할 수 있습니다. 여기 (작업중인 OS에 따라 버전을 선택할 수 있습니다.)
MySQL Workbench를 사용하지 않으려는 경우 MySQL Server의 기본 설치와 함께 제공되는 MySQL 명령 줄 클라이언트를 사용할 수도 있습니다.
MySQL CREATE TABLE 명령
CREATE TABLE 명령은 MySQL의 DDL (Data Definition Language) 명령 집합의 일부이며 사용자가 주어진 데이터베이스에 대해 새 테이블을 만들 수 있습니다.
노트 : CREATE TABLE 명령은 MySQL, Postgres, SQL Server 등과 같은 거의 모든 관계형 데이터베이스에 존재합니다.
MySQL CREATE TABLE 구문
가장 간단한 형식으로 기본 옵션 (예 : 테이블 이름 및 열 정의)만으로 CREATE TABLE 명령을 사용할 수 있습니다.
CREATE TABLE (IF NOT EXISTS) tableName ( column1 datatype, column2 datatype, .... );
구문 인수를 자세히 이해하겠습니다.
- tableName : 작성하려는 테이블의 이름이어야합니다. 정규화 된 이름이어야합니다 (기본 데이터베이스 세트가없는 경우). 예를 들면 databaseName.tableName
테이블 이름은 따옴표없이 또는`tableName` 및`databaseName`과 같은 백틱 기호를 사용하여 지정할 수 있습니다 .`tableName` - 열 정의 : SQL의 테이블은 최소한 하나의 열로 구성되어야합니다. 모든 열 정의는 column_name 및 열 데이터 유형으로 구성되어야합니다. 선택적으로 기본 키, null, not null 등과 같은 다른 열 속성을 포함 할 수도 있습니다.
위의 구문을 사용하여 테이블을 만드는 예를 살펴 보겠습니다.
EMPLOYEE_DETAILS (데이터베이스 – SAMPLE_DB)라는 이름의 테이블을 열과 함께 생성합니다.
- 이름: varchar (100)
- 나이: int
- 주소: varchar (100)
CREATE TABLE SAMPLE_DB.employee_details ( name varchar(100), age int, address varchar(100) );
다음은 테이블 생성의 출력입니다.
노트 :
# 1) 위 구문에서 옵션 명령 인 (IF NOT EXISTS) 사용에 유의하십시오.
생성하려는 테이블이 이미 데이터베이스에있는 경우 오류가 발생하지 않도록하려면 일반적으로이 명령을 사용하는 것이 좋습니다.
다음은 IF NOT EXISTS를 사용하거나 사용하지 않는 예입니다.
- IF NOT EXISTS가 없으면 테이블이 이미 존재하는 경우 오류가 발생합니다.
- IF NOT EXISTS는 오류를 생성하지 않습니다. 그러나 테이블이 이미 존재한다는 경고가 표시됩니다.
# 2) CREATE TABLE 명령을 사용하는 동안 'tableName'은 데이터베이스 이름으로 정규화되어야합니다. SAMPLE_DB.employee_details
테이블 이름을 지정하는 다른 방법은‘USE’명령을 사용하여 현재 데이터베이스를 설정하는 것입니다. 예 : SAMPLE_DB 사용; 그런 다음 완전한 테이블 이름 대신 테이블 이름 만 실행 / 사용합니다.
테이블 옵션을 사용하여 테이블 생성
테이블 옵션은 MySQL 테이블의 동작을 최적화하기 위해 사용됩니다. 이는 MySQL CREATE TABLE 명령을 사용하여 테이블을 생성하는 동안 (또는 나중에 ALTER TABLE 명령을 통해) 적용 할 수 있습니다.
구문은 지정할 수있는 추가 테이블 옵션과 동일하게 유지됩니다.
CREATE TABLE (IF NOT EXISTS) tableName ( column1 datatype, column2 datatype, .... ) (table “” not found /)
;
아래에서 가장 널리 사용되는 옵션에 대해 논의 할 것입니다 (테이블 옵션의 전체 목록은 여기 ).
# 1) 엔진
테이블에 대한 스토리지 엔진을 지정하는 데 사용됩니다. 즉 기본값은 InnoDB입니다. 특정 스토리지 엔진이 필요하지 않는 한 변경할 필요가 없습니다. 스토리지 엔진의 다른 유효한 값은 MEMORY, CSV, HEAP 등입니다.
ENGINE을 MySQL CREATE TABLE의 일부로 지정하는 구문은 다음과 같습니다.
CREATE TABLE IF NOT EXISTS SAMPLE_DB.employee_details ( name varchar(100), age int, address varchar(100) )ENGINE='MEMORY';
# 2) AUTO_INCREMENT
이 옵션은 테이블의 초기 AUTO_INCREMENT 값을 설정하는 데 사용됩니다. 즉, 기본값은 1이지만 다른 양의 정수 값으로 재정의 할 수 있습니다.
노트 : AUTO_INCREMENT는 테이블의 한 열에 만 지정할 수 있으며 기본 키 여야합니다. 자동 증가를 10으로 지정하고 자동 증가가 올바르게 설정되었는지 확인하기 위해 레코드를 삽입하는 예를 살펴 보겠습니다.
기본 키로 표시된 추가 id 필드가있는 동일한 employee_details 테이블 (이 명령을 실행하기 전에 기존 테이블을 삭제해야 함)을 사용하고 있습니다.
CREATE TABLE IF NOT EXISTS SAMPLE_DB.employee_details( id int not null AUTO_INCREMENT primary key, name varchar(100), age int, address varchar(100) )AUTO_INCREMENT=10;
ID 값이없는 행을 삽입하고 값이 10으로 시작하는 값부터 삽입되는지 확인합니다.
INSERT INTO SAMPLE_DB.employee_details(name,age,address) values ('aman kumar',20,'mumbai'); select * from SAMPLE_DB.employee_details;
# 3) 체크섬
전체 테이블에 대한 체크섬을 저장하려면 1로 설정해야합니다. 일반적으로 손상된 테이블이 없는지 확인하는 데 사용됩니다.
CREATE TABLE IF NOT EXISTS SAMPLE_DB.employee_details ( name varchar(100), age int, address varchar(100) )CHECKSUM=1;
CHECKSUM은 삽입 또는 업데이트 중에 전체 테이블의 라이브 체크섬을 유지합니다.
분할 세부 정보로 테이블 만들기
필요한 경우 파티셔닝 옵션을 사용하여 사용자 정의 파티셔닝을 언급 할 수도 있습니다.
개념으로서의 파티셔닝은 더 빠른 액세스 시간과 최적화 된 쿼리를 보장하기 위해 파일 시스템 전체에 테이블 내용을 배포하는 데 광범위하게 사용됩니다. 분할은 지정된 전략 또는 분할 키에 따라 큰 테이블을 작은 테이블로 분할합니다.
MySQL CREATE TABLE 명령으로 파티셔닝 세부 정보를 지정하는 방법을 살펴 보겠습니다.
샘플 테이블 employee_details를 사용하고 데이터를 균등하게 분산하기 위해 파티션 해시 키로 사용될 department_id라는 새 정수 열을 추가합니다.
또한 파티션 수를 지정하면 생성 될 실제 파티션 수 (이 경우 4)가 표시됩니다. 지정하지 않으면 기본적으로 파티션이 1 개만 있습니다.
CREATE TABLE IF NOT EXISTS SAMPLE_DB.employee_details ( name varchar(100), age int, address varchar(100), department_id int )PARTITION BY HASH (department_id) PARTITIONS 4;
노트 : 일반적으로 파티션을 만드는 데 사용되는 키는 테이블에 사용될 예상 액세스 패턴에 따라 다릅니다. 이 경우 대부분의 경우 부서 ID를 기반으로 테이블을 쿼리한다고 가정하면 department_id를 해시 키의 일부로 갖는 것이 합리적입니다.
MySQL 테이블 복제 및 복사
때때로 기존 테이블의 복제본을 생성하거나 한 테이블에서 다른 테이블로 내용을 복사 할 수 있습니다. MySQL은 아래와 같이이를 달성하는 두 가지 방법을 지원합니다.
- LIKE 명령 사용
- SELECT 명령 사용
LIKE COMMAND를 사용한 테이블 복제
LIKE 명령을 사용하면 기존 테이블과 정확히 동일한 열 이름 및 속성을 사용하여 새 테이블을 만들 수 있습니다.
다음은 LIKE 명령을 사용하는 구문입니다.
애자일 테스트와 워터 폴 테스트의 차이점
CREATE TABLE tableName1 LIKE tableName2
위의 명령을 사용하면 tableName2와 동일한 구조 및 속성을 사용하여 새 테이블, 즉 tableName1이 생성됩니다.
이 방법을 사용하면 실제 테이블 데이터가 아닌 열 이름과 속성 만 복제됩니다.
employee_details라는 테이블을 만들고이 테이블을 사용하여 LIKE 옵션을 사용하여 student_details라는 새 테이블을 만들어 보겠습니다.
CREATE TABLE IF NOT EXISTS SAMPLE_DB.employee_details ( name varchar(100), age int, address varchar(100), department_id int ); CREATE TABLE SAMPLE_DB.student_details LIKE SAMPLE_DB.employee_details;
아래는 위 명령의 출력입니다.
SELECT COMMAND를 사용한 테이블 복제
이 접근 방식은 SELECT 명령을 사용하여 기존 테이블의 복사본을 새 테이블에 만듭니다.
이 접근 방식을 사용하면 테이블의 데이터도 새 테이블로 복사됩니다.
CREATE TABLE tableName1 AS SELECT * FROM tableName2;
employee_details라는 테이블을 만들고이 테이블을 사용하여 SELECT 옵션을 사용하는 student_details라는 새 테이블을 만들어 보겠습니다.
CREATE TABLE SAMPLE_DB.student_details AS SELECT * FROM SAMPLE_DB.employee_details;
MySQL 테이블 명명 규칙
이전 섹션에서 MySQL 테이블 생성에 대해 배웠습니다. 이제 MySQL과 관련하여 적용되는 제한 사항과 함께 테이블 이름을 지정할 때 유의해야 할 몇 가지 규칙을 살펴 보겠습니다.
이러한 규칙 / 규칙은 SQL 테이블과 데이터베이스 모두에 적용됩니다.
# 1) 이름의 법적 문자
에) 인용되지 않은 이름은 SQL Server 기본 문자 집합의 모든 문자로 구성 될 수 있지만 모든 문자가 숫자가 될 수는 없습니다. 예를 들면 ‘23test’는 유효한 테이블 이름이지만‘2345’는 아닙니다.
따옴표없는 이름에 사용할 수있는 문자 목록은 다음과 같습니다.
ASCII : (0-9, a-z, A-Z $ _) (기본 라틴 문자, 숫자 0-9, 달러, 밑줄)
확장 : U + 0080 .. U + FFFF
ASCII 코드에 대해 더 알아보기 여기
비) 테이블 및 데이터베이스 이름은 백틱 문자 (`)로 인용 할 수 있으며 백틱 문자 자체를 제외한 모든 문자 / 문자를 포함 할 수 있습니다. 인용 된 이름을 사용하면 모든 숫자가있는 테이블 / 데이터베이스 이름도 가질 수 있습니다.
이러한 테이블의 경우 해당 테이블 내의 데이터에 액세스하려면 테이블 및 / 또는 데이터베이스 이름 주위에 백틱을 사용해야합니다.
씨) 테이블 및 데이터베이스 이름은 데이터베이스 및 테이블 구분 기호로 사용되는 마침표 '.'를 포함 할 수 없습니다.
디) 데이터베이스 및 테이블 이름에는 –‘$’및‘_’특수 문자가 포함될 수 있습니다.
# 2) 이름 길이
MySQL에서 데이터베이스 또는 테이블 이름에 허용되는 최대 길이는 다음과 같습니다. 64 문자.
# 3) 이름 한정자
이전 섹션에서 설명했듯이 MySQL에서 테이블은 항상 해당 테이블이 속한 데이터베이스와 컨텍스트에 있습니다. 따라서 테이블에 액세스하려면 정규화 된 테이블 이름을 사용할 수 있습니다. 이는 마침표로 구분 된 데이터베이스 이름과 열 이름의 조합 일뿐입니다.
예를 들면 SAMPLE_DB 데이터베이스의‘EMPLOYEE_DETAILS’테이블에서 모든 요소를 선택하려면 아래와 같이 정규화 된 이름을 사용할 수 있습니다.
SELECT * from SAMPLE_DB.EMPLOYEE_DETAILS;
DB 및 테이블 이름은 아래와 같이 개별적으로 백틱으로 인용하여 지정할 수도 있습니다.
SELECT * from `SAMPLE_DB`.`EMPLOYEE_DETAILS`;
명명 테이블 및 데이터베이스에 대한 업계 권장 규칙 및 모범 사례가 아래에 나와 있습니다.
- 소문자로 테이블 및 데이터베이스 이름 지정 – 이것은 일반적으로 특히 일상적인 DB 쿼리에 관련된 사람들을 위해 DB 입력 및 쿼리 속도를 높입니다.
- 테이블 및 db 이름에 공백 대신 밑줄 (‘_’) 사용 – 이렇게하면 이름을 더 쉽게 읽을 수 있습니다.
- 테이블 및 데이터베이스에 대해 자명 한 이름 사용 - 예를 들면 직원의 세부 정보를 포함하는 테이블은 employee_info, employee_data, employee, employee_details, employee_name_and_address와 같은 다양한 방식으로 이름을 지정할 수 있습니다. 가장 자명 한 이름을 선택하는 것이 좋습니다. 예를 들면 테이블 이름을 employee_details 또는 employee_info로 선택할 수 있습니다. 이것은 주관적인 토론이지만 이러한 엔터티를 사용하고 만들려는 팀의 여러 구성원이 동의해야합니다.
- 데이터베이스 및 테이블 이름에 숫자를 사용하지 마십시오. – sample_db_2, test_table_1 등
자주 묻는 질문과 답변
Q # 1) 인덱스를 사용하여 MySQL에서 테이블을 생성하는 방법은 무엇입니까?
듀얼 WAN 무선 라우터 부하 분산
대답: 테이블 생성 자체 중에 모든 열 (또는 열 조합)에 대해 INDEX를 추가 할 수 있습니다.
employee_details 테이블의 department_id 열에 인덱스를 추가하는 예를 살펴 보겠습니다.
CREATE TABLE IF NOT EXISTS SAMPLE_DB.employee_details ( name varchar(100), id int, age int, address varchar(100), department_id int, index(department_id) );
Q # 2) MySQL에서 날짜로 테이블을 만드는 방법은 무엇입니까?
대답: 날짜는 테이블을 만드는 동안 모든 열과 연결되어야하는 데이터 유형입니다.
샘플 테이블 employee_details의 데이터 유형으로 DATETIME을 갖는 joining_date 열이있는 아래 샘플 CREATE TABLE 명령을 참조하십시오.
CREATE TABLE IF NOT EXISTS SAMPLE_DB.employee_details ( name varchar(100), id int primary key, age int, address varchar(100), joining_date datetime, department_id int );
Q # 3) MySQL에서 테이블 구조를 어떻게 볼 수 있습니까?
대답: 테이블을 생성 한 후 컬럼, 인덱스 등과 같은 테이블 구조를 참조하려면 DESCRIBE 명령을 사용하여 세부 정보를 가져올 수 있습니다.
통사론:
DESCRIBE tableName;
테이블을 만들고 DESCRIBE 명령의 출력을 살펴 보겠습니다.
CREATE TABLE IF NOT EXISTS SAMPLE_DB.employee_details ( name varchar(100), id int primary key, age int, address varchar(100), department_id int ); DESCRIBE sample_db.employee_details;
다음은 DESCRIBE 명령의 출력입니다.
Q # 4) MySQL의 테이블에 FOREIGN KEY를 어떻게 추가합니까?
대답: 외래 키는 MySQL에서 두 테이블을 함께 연결하는 데 사용됩니다. 외래 키 제약 조건을 사용하려면 참조하는 테이블을 이미 생성해야합니다.
>> 자세히 알아보기 MySQL 외래 키 제약
예를 들어 이해해 봅시다. 2 개의 테이블 즉, Department (대학이 보유한 다양한학과에 대한 세부 정보가 있음)와 학생 세부 정보 (학생과 관련된 모든 세부 정보)가 있다고 가정 해 보겠습니다.
부서에는 열이 있습니다. – ID (기본 키) 및 이름.
학생 세부 정보 – id (기본 키), 나이, 주소 및 department_id (부서 테이블에서 참조하는 외래 키).
다음은이 두 테이블에 대한 CREATE TABLE 명령 구문입니다.
CREATE TABLE department ( name varchar(100), id INT NOT NULL, PRIMARY KEY (id) ); CREATE TABLE student_details ( name varchar(100), id int not null, age int, address varchar(100), department_id int, PRIMARY KEY (id), FOREIGN KEY (department_id) references department(id) ON DELETE CASCADE );
열 간의 관계를 언급 한 student_details 테이블의 FOREIGN KEY 참조 구문을 참조하고 department_id는 부서 테이블의 열 id로 참조되어야합니다.
결론
여기서는 Data Definition Language 범주의 명령에 속하는 MySQL의 CREATE TABLE 명령에 대해 자세히 설명했습니다.
테이블에 추가 속성을 설정하기 위해 CREATE TABLE 명령과 함께 언급 할 수있는 ENGINE, CHECKSUM 등과 같은 다양한 테이블 옵션에 대해 배웠습니다.
MySQL에서 기존 테이블의 복제본을 만드는 방법을 살펴 보았습니다. 마지막으로 업계에서 권장하는 모범 사례와 함께 테이블 이름의 명명 규칙에 대해 설명했습니다.
행복한 독서 !!