14.6.1 InnoDB 테이블 만들기
InnoDB
테이블을 만들려면 특별한 어구없이 CREATE TABLE
문을 사용합니다. 이전에는 ENGINE=InnoDB
절이 필요했지만, InnoDB
가 기본 스토리지 엔진이 되었기 때문에 필요 없습니다. (기본 스토리지 엔진이 MyISAM
인 MySQL 5.1 이전 버전이 실행되는 서버에서 mysqldump 또는 복제를 사용하여 CREATE TABLE
문을 재현하려는 경우에는 해당 조항을 계속 사용할 수 있습니다.)
-- Default storage engine = InnoDB. CREATE TABLE t1 (a INT, b CHAR (20), PRIMARY KEY (a)); -- Backward-compatible with older MySQL. CREATE TABLE t2 (a INT, b CHAR (20), PRIMARY KEY (a)) ENGINE=InnoDB;
innodb_file_per_table
설정에 따라 InnoDB
는 시스템 테이블 스페이스 에서 또는 테이블마다 별도의 테이블 스페이스 ( .ibd 파일 로 표시됩니다) 내에 각 테이블과 연관된 기본 키 인덱스가 생성됩니다. MySQL은 MySQL 데이터베이스 디렉토리 아래에있는 test
디렉토리에 t1.frm
및 t2.frm
파일이 생성됩니다. 내부적으로 InnoDB
자체 데이터 사전 테이블 항목이 추가됩니다. 이 항목은 데이터베이스 이름이 포함됩니다. 예를 들어, t1
테이블이 생성 된 데이터베이스가 test
인 경우, 항목은 'test/t1'
입니다. 즉, 다른 여러 데이터베이스에 같은 이름 t1
테이블을 만들 수 있으며, InnoDB
내부에서 테이블 이름 충돌은 발생하지 않습니다.
이 테이블의 특성을 표시하려면 SHOW TABLE STATUS
명령문을 발행합니다.
SHOW TABLE STATUS FROM test LIKE 't %'\ G;
상태 출력은 이러한 첫 번째 테이블의 행 형식 특성을 「Compact」
임을 표시됩니다. 이 설정은 기본적인 실험에는 적합하지만, 가장 강력한 InnoDB
의 성능 기능을 활용하려면 바로 「Dynamic」
또는 「Compressed」
등의 다른 행 포맷의 사용으로 가십시오. 이 값을 사용하려면 먼저 약간의 설정이 필요합니다.
SET GLOBAL innodb_file_per_table=1; SET GLOBAL innodb_file_format=barracuda; CREATE TABLE t3 (a INT, b CHAR (20), PRIMARY KEY (a)) ROW_FORMAT=DYNAMIC; CREATE TABLE t4 (a INT, b CHAR (20), PRIMARY KEY (a)) ROW_FORMAT=COMPRESSED;
반드시 InnoDB
테이블마다 기본 키 를 설정하고 다음과 같은 컬럼 (여러 적용될 수 있음)을 지정하십시오.
가장 중요한 쿼리에서 참조된다.
공백되어 있지 않다.
중복 값이 없다.
삽입 후 값이 변경된다하더라도 극히 드물다.
예를 들어, 사람에 대한 정보를 포함하는 테이블에서 여러 사람이 같은 이름을 가질 가능성도있어 성을 공백으로하거나 이름을 변경하거나하는 사람도 있기 때문에 (名、姓)
에 기본 키 를 작성하지 않습니다. 제약이 많은 기본 키로 사용하는 명확한 컬럼 세트가없는 것도 많을 경우에는 기본 키의 전부 또는 일부로하는 숫자 ID의 새로운 컬럼을 작성하십시오. 행이 삽입되면 자동으로 오름차순 값이 입력되도록 자동 증가 컬럼을 선언 할 수 있습니다.
-- The value of ID can act like a pointer between related items in different tables. CREATE TABLE t5 (id INT AUTO_INCREMENT, b CHAR (20), PRIMARY KEY (id)); -- The primary key can consist of more than one column. Any autoinc column must come first. CREATE TABLE t6 (id INT AUTO_INCREMENT, a INT, b CHAR (20), PRIMARY KEY (id,a));
기본 키를 정의하지 않아도 테이블은 정상적으로 작동하지만 주키는 많은 성능 요소와 관련하여 큰 테이블이나 자주 사용되는 테이블 중요한 설계 요소입니다. 항상 CREATE TABLE
문에서 지정하는 습관을하십시오. (테이블을 만들고 데이터를로드 한 후 ALTER TABLE
을 실행하고 나중에 기본 키를 추가하는 경우 작업 테이블을 만들 때 기본 키를 정의하는 것보다 훨씬 많은 시간이 걸립니다.)