MySQL CREATE TABLE 语句用于创建新表。创建表涉及为表提供名称并定义每列的名称和数据类型(例如 varchar、整数、日期等)。

语法

使用的语法MySQL 中的 CREATE TABLE 语句如下:

CREATE TABLE table_name (
  column1 datatype,
  column2 datatype,
  column3 datatype,
  .....
  .....
); 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

示例:创建表

下面提到的语句创建一个名为 Employee 的表,该表包含五列:EmpID、Name、City、Age 和 Salary。

CREATE TABLE Employee (
  EmpID INT NOT NULL PRIMARY KEY,
  Name VARCHAR(255) NOT NULL,
  City VARCHAR(100),
  Age INT,
  Salary DECIMAL(18,2)
); 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

在上面的语句中,数据类型指定了该列可以保存什么类型的数据。在数据类型之后,可以为每列提供可选属性,例如 NOT NULL 用于确保列不能有 NULL 值。有关详细信息,请参阅 MySQL 约束

上述语句将创建一个名为 Employee 的空表。包含五列。成功创建表后,会显示一条消息。除此之外,还可以使用 DESC 命令进行检查,如下所示:

DESC Employee; 

    这将产生如下所示的结果:

    FieldTypeNullKeyDefaultExtra
    EmpIDint(11)NoPRI
    Namevarchar(255)No
    Cityvarchar(100)YesNULL
    Ageint(11)YesNULL
    Salarydecimal(18,2)YesNULL

    这表明员工现在在数据库中可用,可用于存储与员工相关的信息。

    使用另一个表创建表

    MySQL CREATE TABLE AS 语句用于通过复制现有表的列来从现有表创建表。以这种方式创建表时,新表将填充现有表中的记录(基于 SELECT 语句)。

    语法

    使用 CREATE TABLE 的语法MySQL 中的 AS 语句如下:

    /* 复制表的所有列 */
    CREATE TABLE new_table
      AS (SELECT * FROM old_table);
    
    /* 复制表的多个列 */
    CREATE TABLE new_table
      AS (SELECT column_1, column2, ...
          FROM old_table);
    
    /* 从多个表创建新的表 */
    CREATE TABLE new_table
      AS (SELECT column_1, column2, ...
          FROM old_table_1, old_table_2, ...); 
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    示例:

    考虑一个名为 Employee 的数据库表,其中包含以下记录:

    EmpIDNameCityAgeSalary
    1JohnLondon253000
    2MarryNew York242750
    3JoParis272800
    4KimAmsterdam303100
    5RameshNew Delhi283000
    6HuangBeijing282800

    复制表的所有列:以下语句用于创建一个名为Employee_PT 通过复制 Employee 表的所有列。新表将包含 Employee 表中员工年龄小于 28 岁的记录。

    CREATE TABLE Employee_PT
      AS (SELECT * FROM Employee
        WHERE Age < 28);
    
    -- 查看结果
    SELECT * FROM Employee_PT; 
    • 1
    • 2
    • 3
    • 4
    • 5

    这将产生如下所示的结果:

    EmpIDNameCityAgeSalary
    1JohnLondon253000
    2MarryNew York242750
    3JoParis272800

    复制表的选定列:使用 CREATE TABLE AS 语句时也可以复制选定的列。在下面的示例中,复制的列为:EmpID、Name 和 City。

    CREATE TABLE Employee_PT
      AS (SELECT EmpID, Name, City FROM Employee
        WHERE Age < 28);
    
    -- 查看结果
    SELECT * FROM Employee_PT; 
    • 1
    • 2
    • 3
    • 4
    • 5

    这将产生如下所示的结果:

    EmpIDNameCity
    1JohnLondon
    2MarryNew York
    3JoParis

    使用AS子句:AS子句可用于重命名列名。请参阅下面的示例:

    CREATE TABLE Employee_PT
      AS (SELECT EmpID, Name AS EmployeeName, City FROM Employee
        WHERE Age < 28);
    
    -- 查看结果
    SELECT * FROM Employee_PT; 
    • 1
    • 2
    • 3
    • 4
    • 5

    这将产生如下所示的结果:

    EmpIDEmployeeNameCity
    1JohnLondon
    2MarryNew York
    3JoParis

    从多个表复制列:考虑另一个名为 Contact_Info 的表,其中包含以下记录:

    Phone_NumberEmpIDAddressGender
    +1-80540980002Brooklyn, New York, USAF
    +33-1479961013Grenelle, Paris, FranceM
    +31-2011503194Geuzenveld, Amsterdam, NetherlandsF
    +86-10997324586Yizhuangzhen, Beijing, ChinaM
    +65-672348247Yishun, SingaporeM
    +81-3577990728Koto City, Tokyo, JapanM

    以下语句用于创建一个名为 Employee_PT 的新表,其中将包含 Employee 和 Contact_Info 表的选定列。新表将包含基于 INNER JOIN 的记录。

    CREATE TABLE Employee_PT
      AS (SELECT A.EmpID, A.Name, A.City, B.Address 
        FROM Employee A
        INNER JOIN Contact_Info B
        ON A.EmpID = B.EmpID);
    
    -- 查看结果
    SELECT * FROM Employee_PT; 
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    这将产生如下所示的结果:

    EmpIDNameCityAddress
    2MarryNew YorkBrooklyn, New York, USA
    3JoParisGrenelle, Paris, France
    4KimAmsterdamGeuzenveld, Amsterdam, Netherlands
    6HuangBeijingYizhuangzhen, Beijing, China