MySQL - 创建表



在 MySQL 关系数据库系统中,SQL 用于以结构化表的形式存储数据。这些表由字段和记录组成。字段表示定义要在表中存储的数据类型的列,记录是包含实际数据的行。MySQL 提供各种查询来与数据交互,允许您创建表、更新表、删除表等。

MySQL 创建表语句

要在提示符下在 MySQL RDBMS 中创建表,使用 CREATE TABLE 语句。

可以在 SQL Server 数据库中创建任意数量的表。但是,数据库中存在的对象数量存在限制。包括表、视图、索引等,数据库不能超过 2,147,483,647 个对象。因此,单个用户定义的表最多可以定义 1024 列。

创建表的 MySQL 查询必须定义表的结构。结构由表名和表中列的名称组成,以及每列的数据类型。请注意,每个表在数据库中必须具有唯一的名称。

首先,表创建命令需要以下详细信息:

  • 表的名称。
  • 列的名称。
  • 每列的定义。

语法

以下是创建 MySQL 表的基本 SQL 语法:

CREATE TABLE table_name(
   column1 datatype,
   column2 datatype,
   .....
   columnN datatype,
   PRIMARY KEY( one or more columns )
);

示例

在以下查询中,我们使用 CREATE TABLE 语句创建一个名为 CUSTOMERS 的表:

CREATE TABLE CUSTOMERS (
   ID INT 				AUTO_INCREMENT,
   NAME VARCHAR(20) 	NOT NULL,
   AGE INT 				NOT NULL,
   ADDRESS CHAR (25),
   SALARY DECIMAL (18, 2),
   PRIMARY KEY (ID)
);

这里,一些项目需要解释:

  • MySQL 中的字段属性 AUTO_INCREMENT 会自动将 ID 列中的值递增 1,用于您添加的每个新记录。它从下一个可用数字开始。

  • 使用字段属性 NOT NULL 是因为我们不希望该字段为 NULL。因此,如果用户尝试创建具有该字段中 NULL 值的记录,则 MySQL 将引发错误。

  • 关键字 PRIMARY KEY 用于将列定义为主键。它确保该列中的每条记录都是唯一的。您还可以通过逗号分隔它们来将其用于多列。

输出

当我们执行上述查询时,将获得如下输出:

Query OK, 0 rows affected (0.03 sec)

验证

创建表完成后,我们可以使用以下查询检查它是否已成功创建:

DESC CUSTOMERS;

上述查询显示 CUSTOMERS 表的结构:列名、数据类型等。

字段 类型 默认值 额外
ID int PRI NULL auto_increment
NAME varchar(20) NULL
AGE int NULL
ADDRESS char(25) NULL
SALARY decimal(18,2) NULL

从命令提示符创建表

我们可以通过定义其结构和列从命令提示符创建 MySQL 表。

以下是执行从命令提示符创建 MySQL 表的步骤

  • 首先,打开命令提示符并输入以下命令:mysql -u root -p 以访问 MySQL 数据库管理系统。

  • 输入命令后,输入密码以登录到 MySQL 服务器。

  • 然后,我们可以使用相应的 SQL CREATE TABLE 查询开始创建表。

示例

在以下示例中,我们从命令提示符创建了一个名为 CUSTOMERS 的 MySQL 表。

CREATE TABLE CUSTOMERS (
   NAME VARCHAR(20) NOT NULL,
   ID INT AUTO_INCREMENT,
   AGE INT NOT NULL,
   ADDRESS CHAR (25),
   SALARY DECIMAL (18, 2),
   PRIMARY KEY (ID)
);

注意 - 在 SQL 命令末尾使用分号 (;) 之前,MySQL 不会终止命令。

输出

当我们执行上述查询时,将获得如下输出:

Query OK, 0 rows affected (0.03 sec)

验证

我们可以使用以下查询验证表是否已成功创建:

mysql> DESC CUSTOMERS;

以上查询将显示 CUSTOMERS 表的结构和描述。

字段 类型 默认值 额外
ID int PRI NULL auto_increment
NAME varchar(20) NULL
AGE int NULL
ADDRESS char(25) NULL
SALARY decimal(18,2) NULL

从现有表创建表

我们可以使用 SQL 的 CREATE TABLE 和 SELECT 语句创建现有表的副本,包括其结构和数据。副本表具有相同的列及其定义,并且还填充与原始表相同的数据。

注意 - 因为它是一个全新的表,因此对它进行的任何更改都不会反映在原始表中。

语法

以下是根据另一个表创建表的语法:

CREATE TABLE NEW_TABLE_NAME AS
SELECT [column1, column2...columnN]
FROM EXISTING_TABLE_NAME
[WHERE CONDITION];

这里,column1、column2... 是现有表的字段,并且将用于创建新表的字段。WHERE 子句是可选的。

示例

让我们考虑 TUTORIALS 数据库中现有的表 CUSTOMERS

mysql> USE TUTORIALS;
Database changed
mysql> SELECT * FROM CUSTOMERS;

以下是 CUSTOMERS 表:

ID NAME AGE ADDRESS SALARY
1 Ramesh 32 Ahmedabad 2000.00
2 Khilan 25 Delhi 1500.00
3 kaushik 23 Kota 2000.00
4 Chaitali 25 Mumbai 6500.00
5 Hardik 27 Bhopal 8500.00
6 Komal 22 Hyderabad 4500.00
7 Muffy 24 Indore 10000.00

现在,使用以下查询,我们创建一个名为 SAMPLE 的新表,其结构和记录与 CUSTOMERS 相同。

CREATE TABLE SAMPLE AS
SELECT * FROM CUSTOMERS;

输出

正如我们在输出中看到的,SAMPLE 表已成功创建。

Query OK, 7 rows affected (0.03 sec)
Records: 7  Duplicates: 0  Warnings: 0

验证

使用以下 SELECT 语句,让我们验证新表 SAMPLE 是否包含记录。

SELECT * FROM SAMPLE;

正如我们在下面的输出中看到的,SAMPLE 表已创建,其中包含来自 CUSTOMERS 表的所有记录。

ID NAME AGE ADDRESS SALARY
1 Ramesh 32 Ahmedabad 2000.00
2 Khilan 25 Delhi 1500.00
3 kaushik 23 Kota 2000.00
4 Chaitali 25 Mumbai 6500.00
5 Hardik 27 Bhopal 8500.00
6 Komal 22 Hyderabad 4500.00
7 Muffy 24 Indore 10000.00

IF NOT EXISTS 子句

如果您尝试创建名称已存在的表,则会生成错误。

CREATE TABLE Employee(Name VARCHAR(255));
ERROR 1050 (42S01): Table 'employee' already exists

如果您在 CREATE 语句中使用 IF NOT EXISTS 子句(如下所示),则会创建一个新表;如果具有给定名称的表已存在,则会忽略该查询。

CREATE TABLE Test(Name VARCHAR(255));
Query OK, 0 rows affected (0.69 sec)

使用客户端程序在 MySQL 数据库中创建表

除了使用 MySQL 查询在 MySQL 数据库中创建表之外,我们还可以使用客户端程序执行 CREATE TABLE 操作。

语法

以下是各种编程语言中创建表的语法:

要在 MySQL 数据库中通过 PHP 程序创建表,我们需要使用 mysqli 函数 query() 执行 CREATE TABLE 语句,如下所示:

$sql = "CREATE TABLE table_name (column_name column_type)";
$mysqli->query($sql);

要在 MySQL 数据库中通过 Node.js 程序创建表,我们需要使用 mysql2 库的 query() 函数执行 CREATE TABLE 语句,如下所示:

sql = "CREATE TABLE table_name (column_name column_type)";
con.query(sql);

要在 MySQL 数据库中通过 Java 程序创建表,我们需要使用 JDBC 函数 executeUpdate() 执行 CREATE TABLE 语句,如下所示:

String sql = "CREATE TABLE table_name (column_name column_type)";
statement.execute(sql);

要在 MySQL 数据库中通过 Python 程序创建表,我们需要使用 MySQL Connector/Pythonexecute() 函数执行 CREATE TABLE 语句,如下所示:

sql = "CREATE TABLE table_name (column_name column_type)";
cursorObj.execute(sql);

示例

以下是程序:

$dbhost = 'localhost';
$dbuser = 'root';
$dbpass = 'root@123';
$dbname = 'TUTORIALS';
$mysqli = new mysqli($dbhost, $dbuser, $dbpass, $dbname);

if($mysqli->connect_errno ) {
   printf("Connect failed: %s<br />", $mysqli->connect_error);
   exit();
}
printf('Connected successfully.<br />');

$sql = "CREATE TABLE tutorials_tbl( ".
   "tutorial_id INT NOT NULL AUTO_INCREMENT, "
   "tutorial_title VARCHAR(100) NOT NULL, ".
   "tutorial_author VARCHAR(40) NOT NULL, ".
   "submission_date DATE, ".
   "PRIMARY KEY ( tutorial_id )); ";
if ($mysqli->query($sql)) {
   printf("Table tutorials_tbl created successfully.<br />");
}
if ($mysqli->errno) {
   printf("Could not create table: %s<br />", $mysqli->error);
}
$mysqli->close();

输出

获得的输出如下所示:

Connected successfully.
Table tutorials_tbl created successfully.
var mysql = require('mysql2');
var con = mysql.createConnection({
   host: "localhost",
   user: "root",
   password: "*****"
});

  //Connecting to MySQL
  con.connect(function (err) {
  if (err) throw err;
  console.log("Connected!");
  console.log("--------------------------");
  
  //Creating a table
  sql = "CREATE TABLE tutorials_tbl(tutorial_id INT NOT NULL AUTO_INCREMENT,tutorial_title VARCHAR(100) NOT NULL,tutorial_author VARCHAR(40) NOT NULL,submission_date DATE,PRIMARY KEY ( tutorial_id ));"
  con.query(sql, function (err, result) {
    if (err) throw err;
    console.log("The table tutorials_tbl is created successfully!");
  });
});

输出

生成的输出如下所示:

Connected!
--------------------------
The table tutorials_tbl is created successfully!
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class CreateTable {
   public static void main(String[] args) {
      String url = "jdbc:mysql://127.0.0.1:3306/TUTORIALS";
        String username = "root";
        String password = "password";
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
            Connection connection = DriverManager.getConnection(url, username, password);
            Statement statement = connection.createStatement();
            System.out.println("Connected successfully...!");

            //Create new table...!
            String sql = "CREATE TABLE tutorials_tbl (ID Int Auto_Increment not null, tutorial_title Varchar(50) Not Null, tutorial_author Varchar(30) Not Null, Primary Key(ID))";
            statement.executeUpdate(sql);
            System.out.println("Table created successfully...!");

            ResultSet resultSet = statement.executeQuery("DESCRIBE tutorials_tbl");
            while (resultSet.next()) {
                System.out.print(resultSet.getNString(1));
                System.out.println();
            }
            connection.close();
        } catch (Exception e) {
            System.out.println(e);
        }
    }
}

输出

获得的输出如下所示:

Connected successfully...!
Table created successfully...!
ID
tutorial_title
tutorial_author
import mysql.connector
#establishing the connection
conn = mysql.connector.connect(
   user='root', password='password', host='localhost', database='tut'
)
#Creating a cursor object 
cursor = conn.cursor()
#Creating a table
sql ='''CREATE TABLE tutorials_tbl(
   tutorial_id INT NOT NULL AUTO_INCREMENT,
   tutorial_title VARCHAR(100) NOT NULL,
   tutorial_author VARCHAR(40) NOT NULL,
   submission_date DATE,
   PRIMARY KEY ( tutorial_id )
)'''
cursor.execute(sql)
print ("The table tutorials_tbl is created successfully!")
#Closing the connection
conn.close()

输出

以下是以上代码的输出:

The table tutorials_tbl is created successfully!
广告