MySQL 8 教程

MySQL - 主页 MySQL - 简介 MySQL - 功能 MySQL - 版本 MySQL - 变量 MySQL - 安装 MySQL - 管理 MySQL - PHP 语法 MySQL - Node.js 语法 MySQL - Java 语法 MySQL - Python 语法 MySQL - 连接 MySQL - Workbench

MySQL 8 数据库

MySQL - 创建数据库 MySQL - 删除数据库 MySQL - 选择数据库 MySQL - 显示数据库 MySQL - 复制数据库 MySQL - 数据库导出 MySQL - 数据库导入 MySQL - 数据库信息

MySQL 8 用户

MySQL - 创建用户 MySQL - 删除用户 MySQL - 显示用户 MySQL - 更改密码 MySQL - 授予权限 MySQL - 显示权限 MySQL - 撤销权限 MySQL - 锁定用户账户 MySQL - 解锁用户账户

MySQL 8 表

MySQL - 创建表 MySQL - 显示表 MySQL - 修改表 MySQL - 重命名表 MySQL - 克隆表 MySQL - 截断表 MySQL - 临时表 MySQL - 修复表 MySQL - 描述表 MySQL - 添加/删除列 MySQL - 显示列 MySQL - 重命名列 MySQL - 表锁定 MySQL - 删除表 MySQL - 派生表

MySQL 8 查询

MySQL - 查询 MySQL - 约束 MySQL - INSERT 插入查询 MySQL - SELECT 查询 MySQL - UPDATE 更新查询 MySQL - DELETE删除查询 MySQL - REPLACE 替换查询 MySQL - 忽略插入 MySQL - 重复键更新时插入 MySQL - 插入到另一个表语句

MySQL 8 视图

MySQL - 创建视图 MySQL - 更新视图 MySQL - 删除视图 MySQL - 重命名视图

MySQL 8 索引

MySQL - 索引 MySQL - 创建索引 MySQL - 删除索引 MySQL - 显示索引 MySQL - 唯一索引 MySQL - 聚集索引 MySQL - 非聚集索引

MySQL 运算符和子句

MySQL - Where 子句 MySQL - Limit 子句 MySQL - Distinct 子句 MySQL - Order By 子句 MySQL - Group By 子句 MySQL - Having 子句 MySQL - AND 运算符 MySQL - OR 或运算符 MySQL - LIKE 运算符 MySQL - IN 运算符 MySQL - ANY 运算符 MySQL - Exists 运算符 MySQL - NOT 运算符 MySQL - NOT EQUAL 运算符 MySQL - IS NULL 运算符 MySQL - IS NOT NULL 运算符 MySQL - Between 运算符 MySQL - UNION 运算符 MySQL - UNION 与 UNION ALL MySQL - MINUS 运算符 MySQL - INTERSECT 运算符 MySQL - INTERVAL 运算符

MySQL 连接

MySQL - 使用连接 MySQL - Inner Join 内连接 MySQL - LEFT JOIN 左连接 MySQL - RIGHT JOIN 右连接 MySQL - CROSS JOIN 交叉连接 MySQL - 全连接 MySQL - 自连接 MySQL - Delete Join 删除连接 MySQL - UPDATE JOIN 更新连接 MySQL - 联合 vs 连接

MySQL 键

MySQL - UNIQUE 唯一键 MySQL - PRIMARY KEY 主键 MySQL - FOREIGN KEY 外键 MySQL - 复合键 MySQL - 备用键

MySQL 触发器

MySQL - 触发器 MySQL - 创建触发器 MySQL - 显示触发器 MySQL - 删除触发器 MySQL - 插入前触发器 MySQL - 插入后触发器 MySQL - 更新前触发器 MySQL - 更新后触发器 MySQL - 删除前触发器 MySQL - 删除后触发器

MySQL 8 数据类型

MySQL - 数据类型 MySQL - VARCHAR MySQL - BOOLEAN MySQL - ENUM 枚举 MySQL - DECIMAL 十进制 MySQL - INT 整数 MySQL - FLOAT 浮点数 MySQL - BIT 位 MySQL - TINYINT 微小整数 MySQL - BLOB 二进制大对象 MySQL - SET 集合

MySQL 正则表达式

MySQL - 正则表达式 MySQL - RLIKE 运算符 MySQL - NOT LIKE 运算符 MySQL - NOT REGEXP 运算符 MySQL - regexp_instr() 函数 MySQL - regexp_like() 函数 MySQL - regexp_replace() 函数 MySQL - regexp_substr() 函数

MySQL 全文搜索

MySQL - 全文搜索 MySQL - 自然语言全文搜索 MySQL - 布尔全文搜索 MySQL - 查询扩展全文搜索 MySQL - ngram 全文解析器

MySQL8 函数和运算符

MySQL - 日期和时间函数 MySQL - 算术运算符 MySQL - 数字函数 MySQL - 字符串函数 MySQL - 聚合函数

MySQL 8 其他概念

MySQL - NULL 值 MySQL - 事务 MySQL - 序列 MySQL - 处理重复项 MySQL - SQL 注入 MySQL - 子查询 MySQL - 注释 MySQL - 检查约束 MySQL - 存储引擎 MySQL - 将表导出为 CSV 文件 MySQL - 将 CSV 文件导入数据库 MySQL - UUID MySQL - 通用表表达式 MySQL - 级联删除 MySQL - Upsert 操作 MySQL - 水平分区 MySQL - 垂直分区 MySQL - 游标 MySQL - 存储函数 MySQL - SIGNAL 异常处理 MySQL - RESIGNAL 异常处理 MySQL - 字符集 MySQL - 排序规则 MySQL - 通配符 MySQL - 别名 MySQL - ROLLUP 超级聚合 MySQL - 当前日期 MySQL - 字面量 MySQL - 存储过程 MySQL - EXPLAIN 语句 MySQL - JSON MySQL - 标准差 MySQL - 查找重复记录 MySQL - 删除重复记录 MySQL - 选择随机记录 MySQL - 显示进程列表 MySQL - 更改列类型 MySQL - 重置自动增量 MySQL - Coalesce() 函数

MySQL 8 实用资源

MySQL - 实用函数 MySQL - 语句参考 MySQL - 快速指南 MySQL - 实用资源 MySQL - 讨论


MySQL - 创建表

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

MySQL CREATE TABLE 语句

要在 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 列的值。它从下一个可用的数字开始。

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

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

输出

执行上述查询后,将获得以下输出:-

Query OK, 0 rows affected (0.03 sec)

验证

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

DESC CUSTOMERS;

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

Field Type Null Key Default Extra
ID int NO PRI NULL auto_increment
NAME varchar(20) NO NULL
AGE int NO NULL
ADDRESS char(25) YES NULL
SALARY decimal(18,2) YES 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 表的结构和描述 −

Field Type Null Key Default Extra
ID int NO PRI NULL auto_increment
NAME varchar(20) NO NULL
AGE int NO NULL
ADDRESS char(25) YES NULL
SALARY decimal(18,2) YES 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

如果您将 IF NOT EXISTS 子句与 CREATE 语句一起使用(如下所示),则会创建一个新表;如果指定名称的表已存在,则查询将被忽略。

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

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

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

语法

以下是使用各种编程语言创建表的语法 -

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

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

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

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

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

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

要通过 Pyhton 程序在 MySQL 数据库中创建表,我们需要使用 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: "*****"
});
 //连接到 MySQL
  con.connect(function (err) {
  if (err) throw err;
  console.log("Connected!");
  console.log("--------------------------");
  
  //创建一个表
  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
#建立连接
conn = mysql.connector.connect(
   user='root', password='password', host='localhost', database='tut'
)
#创建游标对象
cursor = conn.cursor()
#创建表
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!")
#关闭连接
conn.close()

输出

以下是上述代码的输出 -

The table tutorials_tbl is created successfully!