수색…


통사론

  • CREATE TABLE table_name (column_name1 data_type (size), column_name2 data_type (size), column_name3 data_type (size), ....); // 기본 테이블 생성

  • CREATE TABLE table_name [존재하지 않는 경우] (column_name1 data_type (size), column_name2 data_type (size), column_name3 data_type (size), ....); // 기존 테이블 생성 검사

  • CREATE [TEMPORARY] TABLE table_name [존재하지 않는 경우] (column_name1 data_type (size), column_name2 data_type (size), column_name3 data_type (size), ....); // 임시 테이블 생성

  • 테이블 만들기 new_tbl [AS] SELECT * FROM orig_tbl; // SELECT에서 테이블 생성

비고

CREATE TABLE 문은 ENGINE 사양으로 끝나야합니다.

CREATE TABLE table_name ( column_definitions ) ENGINE=engine;

일부 옵션은 다음과 같습니다.

  • InnoDB : (5.5.5 버전 이후의 디폴트) Transition-safe (ACID 호환) 엔진입니다. 트랜잭션 커밋 및 롤백, 충돌 복구 기능 및 행 수준 잠금 기능을 제공합니다.
  • MyISAM : (버전 5.5.5 이전의 디폴트) 이것은 평범한 엔진입니다. 트랜잭션이나 외래 키를 지원하지 않지만 데이터웨어 하우징에 유용합니다.
  • Memory : 모든 데이터를 매우 빠른 작업을 위해 RAM에 저장하지만 데이터베이스 재시작시 테이블 날짜가 손실됩니다.

여기에 더 많은 엔진 옵션이 있습니다 .

기본 테이블 생성

CREATE TABLE 문은 MySQL 데이터베이스에 테이블을 만드는 데 사용됩니다.

CREATE TABLE Person (
    `PersonID`      INTEGER NOT NULL PRIMARY KEY,
    `LastName`      VARCHAR(80),
    `FirstName`     VARCHAR(80),
    `Address`       TEXT,
    `City`          VARCHAR(100)
) Engine=InnoDB;

모든 필드 정의에는 다음이 있어야합니다.

  1. 필드 이름 : 올바른 필드 이름입니다. `-chars에 이름을 포함시켜야한다. 이렇게하면 fieldname에 예를 들어 space-chars를 사용할 수 있습니다.
  2. 데이터 유형 [Length] : 필드가 CHAR 또는 VARCHAR 이면 필드 길이를 지정해야합니다.
  3. 속성 NULL | NOT NULL : NOT NULL 을 지정하면 해당 필드에 NULL 값을 저장하려는 시도가 실패합니다.
  4. 데이터 유형 및 속성에 대한 자세한 내용은 여기를 참조 하십시오 .

Engine=... 은 테이블의 스토리지 엔진을 지정하는 데 사용되는 선택적 매개 변수입니다. 스토리지 엔진이 지정되지 않은 경우 서버의 기본 테이블 스토리지 엔진 (일반적으로 InnoDB 또는 MyISAM)을 사용하여 테이블이 생성됩니다.

기본값 설정

또한 DEFAULT 를 사용하여 각 필드의 기본값을 설정할 수 있습니다.

CREATE TABLE Address (
    `AddressID`   INTEGER NOT NULL PRIMARY KEY,
    `Street`      VARCHAR(80),
    `City`        VARCHAR(80),
    `Country`     VARCHAR(80) DEFAULT "United States",
    `Active`      BOOLEAN DEFAULT 1,
) Engine=InnoDB;

삽입 중에 Street 을 지정하지 않으면 검색시 해당 필드가 NULL 됩니다. 삽입시 Country 를 지정하지 않으면 기본값은 "미국"입니다.

BLOB , TEXT , GEOMETRYJSON 필드를 제외한 모든 열 유형에 대한 기본값을 설정할 수 있습니다.

기본 키로 테이블 생성

CREATE TABLE Person (
    PersonID     INT UNSIGNED NOT NULL,
    LastName     VARCHAR(66) NOT NULL,
    FirstName    VARCHAR(66),
    Address      VARCHAR(255),
    City         VARCHAR(66),
    PRIMARY KEY (PersonID)
);

기본 키 는 테이블의 행을 고유하게 식별하는 NOT NULL 단일 또는 다중 컬럼 식별자입니다. 인덱스 가 생성되고 NOT NULL 로 명시 적으로 선언되지 않으면 MySQL은 자동으로 암시 적으로이를 선언합니다.

테이블에는 PRIMARY KEY 가 하나만있을 수 있으며 각 테이블에는 하나의 PRIMARY KEY 가있는 것이 좋습니다. InnoDB는 그다지 바람직하지 않지만, 부재시에 자동적으로 InnoDB를 생성 할 것이다 ( MySQL 문서 에서 볼 수있다).

대개 "대리 키"라고도하는 AUTO_INCREMENT INT 는 얇은 인덱스 최적화 및 다른 테이블과의 관계에 사용됩니다. 이 값은 새 레코드가 추가 될 때마다 1 씩 증가합니다 (기본값은 1).

그러나 그 이름에도 불구하고, 가치가 점진적이고 유일한 것이라는 점을 보증하는 것이 목적은 아닙니다.

TRUNCATE TABLE 문을 사용하여 테이블을 절단하지 않는 한 테이블의 모든 행이 삭제되면 자동 증가 INT 값이 기본 시작 값으로 재설정되지 않습니다.

하나의 열을 기본 키 (인라인 정의)로 정의

기본 키가 단일 열로 구성된 경우 PRIMARY KEY 절을 열 정의와 함께 인라인으로 배치 할 수 있습니다.

CREATE TABLE Person (
    PersonID     INT UNSIGNED NOT NULL PRIMARY KEY,
    LastName     VARCHAR(66) NOT NULL,
    FirstName    VARCHAR(66),
    Address      VARCHAR(255),
    City         VARCHAR(66)
);

이 명령 형식은 더 짧고 읽기 쉽습니다.

다중 열 기본 키 정의

둘 이상의 컬럼을 포함하는 기본 키를 정의 할 수도 있습니다. 이는 외래 키 관계의 하위 테이블에서 수행 할 수 있습니다. 참여하는 열을 별도의 PRIMARY KEY 절에 나열하여 다중 열 기본 키를 정의합니다. PRIMARY KEY 인라인은 하나의 열만 선언 될 수 있으므로 여기서는 인라인 구문을 사용할 수 없습니다. 예 :

CREATE TABLE invoice_line_items (
    LineNum      SMALLINT UNSIGNED NOT NULL,
    InvoiceNum   INT UNSIGNED NOT NULL,
    -- Other columns go here
    PRIMARY KEY (InvoiceNum, LineNum),
    FOREIGN KEY (InvoiceNum) REFERENCES -- references to an attribute of a table
);

기본 키의 열은 논리적 정렬 순서로 지정 되어야 하며 위의 예와 같이 열이 정의 된 순서와 다를 있습니다.

인덱스가 클수록 디스크 공간, 메모리 및 I / O가 더 많이 필요합니다. 따라서 키는 가능한 한 작아야합니다 (특히 구성된 키와 관련하여). InnoDB에서, 모든 '2 차 인덱스'는 PRIMARY KEY 컬럼의 사본을 포함한다.

외래 키로 테이블 생성

CREATE TABLE Account (
    AccountID     INT UNSIGNED NOT NULL,
    AccountNo     INT UNSIGNED NOT NULL,
    PersonID    INT UNSIGNED,
    PRIMARY KEY (AccountID),
    FOREIGN KEY (PersonID) REFERENCES Person (PersonID)
) ENGINE=InnoDB;

외래 키 : 외래 키 ( FK )는 참조 테이블에서 단일 열 또는 열의 다중 열 합성입니다. 이 FK참조 된 테이블에 존재하는 것으로 확인됩니다. FK 확인하는 참조 된 테이블 키가 기본 키이지만 적용되지 않는 것이 좋습니다. 이 쿼리는 고유해야 할 필요가없는 참조 된 부분에 대한 빠른 검색으로 사용되며 실제로는 가장 왼쪽에있는 인덱스가 될 수 있습니다.

외래 키 관계에는 중앙 데이터 값을 보유하는 상위 테이블과 해당 상위를 가리키는 동일한 값을 갖는 하위 테이블이 있습니다. FOREIGN KEY 절이 하위 테이블에 지정됩니다. 상위 테이블과 하위 테이블은 동일한 스토리지 엔진을 사용해야합니다. TEMPORARY 테이블이 아니어야합니다.

외부 키와 참조 된 키의 해당 열은 유사한 데이터 유형을 가져야합니다. 정수 유형의 크기와 부호는 동일해야합니다. 문자열 유형의 길이는 동일 할 필요는 없습니다. 이항 (문자) 문자열 열의 경우 문자 집합과 데이터 정렬이 동일해야합니다.

주 : 외래 키 제약은 InnoDB 스토리지 엔진 (MyISAM 또는 MEMORY가 아님)에서 지원됩니다. 다른 엔진을 사용하는 DB 설정은이 CREATE TABLE 문을 허용하지만 외래 키 제약 조건을 준수하지는 않습니다. (최신 MySQL 버전은 기본적으로 InnoDB 되어 있지만 명시 적으로 사용하는 것이 좋습니다.)

기존 테이블 복제

테이블은 다음과 같이 복제 될 수 있습니다.

CREATE TABLE ClonedPersons LIKE Persons;

새 테이블은 인덱스와 열 속성을 포함하여 원본 테이블과 완전히 동일한 구조를 갖습니다.

테이블을 수동으로 생성하는 것뿐만 아니라 다른 테이블에서 데이터를 선택하여 테이블을 생성 할 수도 있습니다.

CREATE TABLE ClonedPersons SELECT * FROM Persons;

다음과 같이 SELECT 문의 일반적인 기능을 사용하여 데이터를 수정할 수 있습니다.

CREATE TABLE ModifiedPersons
SELECT PersonID, FirstName + LastName AS FullName FROM Persons
WHERE LastName IS NOT NULL;

SELECT 에서 테이블을 만들 때 기본 키와 인덱스는 보존되지 않습니다. 당신은 그들을 다시 선언해야합니다 :

CREATE TABLE ModifiedPersons (PRIMARY KEY (PersonID))
SELECT PersonID, FirstName + LastName AS FullName FROM Persons
WHERE LastName IS NOT NULL;

SELECT에서 테이블 만들기

CREATE TABLE 문의 끝에 SELECT 문을 추가하여 다른 테이블을 만들 수 있습니다.

CREATE TABLE stack (
    id_user INT,
    username VARCHAR(30),
    password VARCHAR(30)
);

같은 데이터베이스에 테이블 만들기 :

-- create a table from another table in the same database with all attributes
CREATE TABLE stack2 AS SELECT * FROM stack;

-- create a table from another table in the same database with some attributes
CREATE TABLE stack3 AS SELECT username, password FROM stack;

다른 데이터베이스에서 테이블 만들기 :

-- create a table from another table from another database with all attributes
CREATE TABLE stack2 AS SELECT * FROM second_db.stack;

-- create a table from another table from another database with some attributes
CREATE TABLE stack3 AS SELECT username, password FROM second_db.stack;

주의

다른 데이터베이스에있는 다른 테이블과 동일한 테이블을 만들려면 다음과 같이 데이터베이스의 이름을 지정해야합니다.

FROM NAME_DATABASE.name_table

테이블 구조 표시

테이블의 스키마 정보를 보려면 다음 중 하나를 사용할 수 있습니다.

SHOW CREATE TABLE child; -- Option 1

CREATE TABLE `child` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `fullName` varchar(100) NOT NULL,
  `myParent` int(11) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `mommy_daddy` (`myParent`),
  CONSTRAINT `mommy_daddy` FOREIGN KEY (`myParent`) REFERENCES `parent` (`id`) 
      ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

mysql 커맨드 라인 툴에서 사용된다면 이것은 덜 장황하다 :

SHOW CREATE TABLE child \G

테이블 구조를 보여주는 덜 설명적인 방법 :

mysql> CREATE TABLE Tab1(id int, name varchar(30));
Query OK, 0 rows affected (0.03 sec)

mysql> DESCRIBE Tab1; -- Option 2 

+-------+-------------+------+-----+---------+-------+ 
| Field | Type        | Null | Key | Default | Extra |  
+-------+-------------+------+-----+---------+-------+ 
| id    | int(11)     | YES  |     | NULL    |       | 
| name  | varchar(30) | YES  |     | NULL    |       |  
+-------+-------------+------+-----+---------+-------+ 

DESCRIBEDESC 모두 동일한 결과를 제공합니다.

한 번에 데이터베이스의 모든 테이블에서 수행 된 DESCRIBE 보려면이 예제를 참조하십시오.

마지막 업데이트를 표시하는 타임 스탬프 열이있는 테이블 만들기

행이 마지막으로 갱신 된시기는 TIMESTAMP 열에 표시됩니다.

CREATE TABLE `TestLastUpdate` (
    `ID` INT NULL,
    `Name` VARCHAR(50) NULL,
    `Address` VARCHAR(50) NULL,
    `LastUpdate` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
)
COMMENT='Last Update'
;


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow