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 的表:

Open Compiler
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

Learn MySQL in-depth with real-world projects through our MySQL certification course. Enroll and become a certified expert to boost your career.

从现有表创建表

我们可以使用 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 相同。

Open Compiler
CREATE TABLE SAMPLE AS SELECT * FROM CUSTOMERS;

输出

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

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

验证

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

Open Compiler
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://localhost: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!
广告