MySQL数据库连接与基础操作命令大全

2 阅读17分钟

MySQL数据库连接与基础操作命令大全

使用说明:每条SQL语句以分号(;)结尾,MySQL服务端遇到分号才执行语句。输入过程中如出现错误,可使用 \c 终止当前语句重新输入。键入 help;\h 可查看帮助,键入 quit\qexit 可退出MySQL客户端。

一、连接与断开数据库

1.1 使用mysql命令行客户端连接

基础格式

mysql -h 主机地址 -P 端口号 -u 用户名 -p
  • -h:指定MySQL服务器的主机名或IP地址,省略表示连接本机(localhost)
  • -P:指定端口号,默认3306
  • -u:指定登录用户名
  • -p:提示输入密码

常用连接示例

# 连接本机MySQL(省略主机和端口)
mysql -u root -p

# 连接本机MySQL,密码直接写在命令行(不推荐,密码会明文显示)
mysql -u root -p123456

# 连接远程MySQL服务器
mysql -h 192.168.1.100 -P 3306 -u admin -p

# 完整参数示例
mysql -h localhost -P 3306 -u myuser -p

进入MySQL后会显示欢迎信息和 mysql> 命令提示符,表示已成功连接。

1.2 断开连接

mysql> 提示符下,执行以下任一命令即可退出:

mysql> quit;
mysql> exit;
mysql> \q

或在Unix/Linux系统下按 Ctrl + D 断开连接。

1.3 MySQL服务管理命令(适用于Windows/Linux)

# Windows系统启动MySQL服务(服务名称以实际安装名为准)
net start mysql

# Windows系统停止MySQL服务
net stop mysql

# Linux系统使用systemd启动
sudo systemctl start mysql

# Linux系统停止
sudo systemctl stop mysql

二、数据库操作命令

2.1 查看所有数据库

mysql> SHOW DATABASES;

列出当前MySQL服务器上所有可见的数据库。

2.2 选择/切换数据库

mysql> USE 数据库名;

例如:USE company_db; 选择 company_db 作为当前操作的目标数据库。对表进行操作前,通常需要先选择数据库。

2.3 创建数据库

# 基本创建
CREATE DATABASE 数据库名;

# 推荐写法:存在则不报错
CREATE DATABASE IF NOT EXISTS 数据库名;

# 指定字符集示例
CREATE DATABASE 数据库名 CHARACTER SET utf8mb4;

# 示例
CREATE DATABASE IF NOT EXISTS company_db;
CREATE DATABASE test_db CHARACTER SET utf8mb4;

IF NOT EXISTS 选项:如果数据库已存在,命令不会报错,推荐始终使用。注意:删除数据库是永久性操作,数据无法恢复,请谨慎使用。

2.4 删除数据库

# 删除指定数据库
DROP DATABASE 数据库名;

# 推荐写法:存在则删除,不存在也不报错
DROP DATABASE IF EXISTS 数据库名;

# 示例
DROP DATABASE IF EXISTS temp_db;

⚠️ 警告:删除数据库将永久删除该库及其包含的所有表和数据,无法恢复!务必谨慎。

2.5 查看当前使用的数据库

mysql> SELECT DATABASE();

返回当前正在操作的数据库名称。若尚未选择任何数据库,则返回 NULL

2.6 修改数据库字符集

ALTER DATABASE 数据库名 CHARACTER SET utf8mb4;

修改数据库的默认字符集和排序规则。

三、数据表操作命令

3.1 查看当前数据库中的所有表

mysql> SHOW TABLES;

列出当前选定数据库中的所有表。使用前需先用 USE 命令选择目标数据库。

3.2 常用数据类型

MySQL支持多种数据类型,主要分为以下几类:

数值类型TINYINTSMALLINTINT(或INTEGER)、BIGINT(整型);FLOATDOUBLE(浮点型);DECIMAL(M,D)(定点小数,适合财务计算)。

字符串类型CHAR(n)(定长字符串,最多255字节)、VARCHAR(n)(可变长字符串)、TEXT(长文本)。

日期时间类型DATE(日期)、TIME(时间)、DATETIME(日期和时间)、TIMESTAMP(时间戳)。

其他类型还包括 ENUM(枚举,从预定义值列表中选择)、JSON(JSON格式数据)、BLOB(二进制数据)等。

3.3 创建表(CREATE TABLE)

CREATE TABLE [IF NOT EXISTS] 表名 (
    列名1 数据类型 [约束] [COMMENT '注释'],
    列名2 数据类型 [约束] [COMMENT '注释'],
    ...
) [CHARACTER SET 字符集] [ENGINE 存储引擎];

# 示例
CREATE TABLE IF NOT EXISTS users (
    id INT PRIMARY KEY AUTO_INCREMENT COMMENT '用户ID',
    name VARCHAR(100) NOT NULL COMMENT '用户名',
    email VARCHAR(100) UNIQUE COMMENT '邮箱',
    age INT DEFAULT 0 COMMENT '年龄',
    created_at DATETIME DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

IF NOT EXISTS:若表已存在则不报错;COMMENT:为字段添加说明。可使用 SHOW CREATE TABLE 表名; 查看完整的建表语句。

3.4 查看表结构

# 两种方式等价
DESCRIBE 表名;
DESC 表名;                 -- 简写形式

# 示例
DESC users;

显示表的字段信息,包括字段名(Field)、数据类型(Type)、是否允许NULL(Null)、键类型(Key)、默认值(Default)、额外信息(Extra)。

3.5 查看建表语句

SHOW CREATE TABLE 表名;

# 示例
SHOW CREATE TABLE users\G      -- \G 以垂直格式显示,使输出更清晰

3.6 查看表的列信息

SHOW COLUMNS FROM 表名;

# 示例
SHOW COLUMNS FROM users;

显示指定表的列信息,效果与 DESC 类似。

3.7 修改表结构(ALTER TABLE)

添加列

# 添加列
ALTER TABLE 表名 ADD 列名 数据类型 [约束];

# 示例:为 users 表添加 phone 列
ALTER TABLE users ADD phone VARCHAR(20);

# 添加到指定位置(FIRST 或 AFTER 列名)
ALTER TABLE users ADD phone VARCHAR(20) AFTER name;

修改列数据类型

# 修改列的数据类型
ALTER TABLE 表名 MODIFY 列名 新数据类型 [约束];

# 示例:将 age 列从 INT 改为 TINYINT
ALTER TABLE users MODIFY age TINYINT;

修改列名

# 修改列名(包括其数据类型)
ALTER TABLE 表名 CHANGE 旧列名 新列名 数据类型 [约束];

# 示例:将 age 列改名为 user_age
ALTER TABLE users CHANGE age user_age INT;

删除列

ALTER TABLE 表名 DROP 列名;

# 示例:删除 phone 列
ALTER TABLE users DROP phone;

重命名表

RENAME TABLE 旧表名 TO 新表名;

# 或使用 ALTER TABLE
ALTER TABLE 旧表名 RENAME TO 新表名;

# 示例
RENAME TABLE users TO user_accounts;

3.8 删除表

DROP TABLE [IF EXISTS] 表名;

# 示例
DROP TABLE IF EXISTS temp_table;
DROP TABLE users;     -- 永久删除 users 表

⚠️ 删除表是永久性操作,将删除表的所有数据。

四、数据操作命令(DML:增删改查)

4.1 插入数据(INSERT)

向表中所有列插入单行数据

INSERT INTO 表名 VALUES (值1, 值2, 值3, ...);

# 示例
INSERT INTO users VALUES (1, '张三', 'zhang@example.com', 25);

注意:值的顺序必须与表的列定义顺序完全一致。

向指定列插入数据

INSERT INTO 表名 (列名1, 列名2, ...) VALUES (值1, 值2, ...);

# 示例(id 为自增列,可省略)
INSERT INTO users (name, email, age) VALUES ('李四', 'li@example.com', 30);

其余未指定的列自动取默认值(若设置了 DEFAULT)或 NULL。

插入多行数据(推荐使用)

INSERT INTO 表名 (列名1, 列名2, ...) VALUES 
    (值1a, 值2a, ...),
    (值1b, 值2b, ...),
    (值1c, 值2c, ...);

# 示例
INSERT INTO users (name, email, age) VALUES 
    ('王五', 'wang@example.com', 28),
    ('赵六', 'zhao@example.com', 35),
    ('小明', 'ming@example.com', 22);

一次性插入多行可以减少客户端与服务器之间的通信次数,提高效率。值之间用逗号分隔,每组值用括号包裹。

4.2 查询数据(SELECT)

查询所有字段(全列查询)

SELECT * FROM 表名;

# 示例
SELECT * FROM users;

查询指定字段

SELECT 列名1, 列名2, ... FROM 表名;

# 示例
SELECT name, email, age FROM users;

查询时使用别名(AS)

SELECT 列名 AS 别名 FROM 表名;

# 示例
SELECT name AS 用户名, email AS 电子邮箱 FROM users;

别名仅在本次查询中生效,不影响表结构。AS可以省略。

条件查询(WHERE)

SELECT 列名 FROM 表名 WHERE 条件;

# 示例
SELECT * FROM users WHERE age > 25;
SELECT name, email FROM users WHERE name = '张三';

常用WHERE条件运算符

运算符说明示例
=等于WHERE name = '张三'
<>!=不等于WHERE age <> 25
>>=<<=比较大小WHERE age > 18
BETWEEN ... AND ...范围之间WHERE age BETWEEN 18 AND 60
LIKE模糊匹配WHERE name LIKE '张%'
IN (集合)属于某个集合WHERE id IN (1,2,3)
IS NULL / IS NOT NULL是否为NULLWHERE email IS NULL
AND / OR逻辑与/或WHERE age > 18 AND city = '北京'

排序查询(ORDER BY)

SELECT 列名 FROM 表名 ORDER BY 列名 [ASC|DESC];

# 示例
SELECT * FROM users ORDER BY age DESC;        -- 按年龄降序
SELECT * FROM users ORDER BY age ASC;         -- 按年龄升序(ASC可省略)
SELECT * FROM users ORDER BY age DESC, id ASC; -- 多字段排序

ASC表示升序(默认),DESC表示降序。

限制返回行数(LIMIT)

SELECT * FROM 表名 LIMIT 数量;
SELECT * FROM 表名 LIMIT 偏移量, 数量;   -- 用于分页

# 示例
SELECT * FROM users LIMIT 10;           -- 返回前10行
SELECT * FROM users LIMIT 20, 10;       -- 跳过20行,返回后10行(第21-30行)

去重查询(DISTINCT)

SELECT DISTINCT 列名 FROM 表名;

# 示例
SELECT DISTINCT city FROM users;        -- 查看所有不重复的城市

4.3 更新数据(UPDATE)

UPDATE 表名 SET 列名1 = 新值1, 列名2 = 新值2, ... WHERE 条件;

# 示例
UPDATE users SET email = 'newemail@example.com' WHERE name = '张三';
UPDATE users SET age = age + 1 WHERE age < 30;   -- 年龄小于30的涨一岁

⚠️ 警告:如果不加 WHERE 条件,将对表中所有行执行更新操作!请务必确认条件正确。

4.4 删除数据(DELETE)

DELETE FROM 表名 WHERE 条件;

# 示例
DELETE FROM users WHERE name = '张三';
DELETE FROM users WHERE age > 60;

⚠️ 警告:如果不加 WHERE 条件,将删除表中所有数据,但表结构保持不变。如需保留空表结构可用此命令,如要删除整个表(包括结构)请使用 DROP TABLE

4.5 清空表数据(TRUNCATE)

TRUNCATE TABLE 表名;

# 示例
TRUNCATE TABLE users;

DELETE FROM 表名 的区别:TRUNCATE 速度更快,但无法回滚,并且会重置自增计数器。

4.6 导入数据文件(SOURCE)

mysql> SOURCE 文件路径;

# 示例
mysql> SOURCE /path/to/backup.sql;

在MySQL命令行中执行,用于导入 .sql 格式的备份文件。

五、约束(Constraints)

约束是作用于表中字段上的规则,用于限制存储在表中的数据,保证数据的正确性、有效性和完整性。

约束说明用法示例
NOT NULL非空约束,字段值不能为空name VARCHAR(100) NOT NULL
UNIQUE唯一约束,字段值不能重复email VARCHAR(100) UNIQUE
PRIMARY KEY主键约束,非空且唯一,每个表只能有一个主键id INT PRIMARY KEY
DEFAULT默认值约束,未指定值时取默认值age INT DEFAULT 0
CHECK检查约束,保证字段满足条件age INT CHECK (age >= 0 AND age <= 150)
FOREIGN KEY外键约束,关联其他表的主键dept_id INT, FOREIGN KEY (dept_id) REFERENCES dept(id)

创建表时添加约束的综合示例

CREATE TABLE employees (
    id INT PRIMARY KEY AUTO_INCREMENT,
    emp_no VARCHAR(20) UNIQUE NOT NULL,
    name VARCHAR(100) NOT NULL,
    age INT DEFAULT 25 CHECK (age >= 18 AND age <= 60),
    dept_id INT,
    create_time DATETIME DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (dept_id) REFERENCES departments(id)
);

主键约束是一行数据的唯一标识,要求非空且唯一。外键用于关联其他表的主键或唯一键,保证数据的一致性和完整性。

给已有表添加约束

-- 添加 NOT NULL 约束
ALTER TABLE users MODIFY name VARCHAR(100) NOT NULL;

-- 添加 UNIQUE 约束
ALTER TABLE users ADD CONSTRAINT uk_email UNIQUE (email);

-- 添加 CHECK 约束
ALTER TABLE users ADD CONSTRAINT chk_age CHECK (age >= 0);

删除约束

# 删除外键约束
ALTER TABLE 表名 DROP FOREIGN KEY 外键约束名;

# 删除主键
ALTER TABLE 表名 DROP PRIMARY KEY;

# 删除唯一约束
ALTER TABLE 表名 DROP INDEX 约束名;

六、常用聚合函数与分组查询

6.1 核心聚合函数

函数说明示例
COUNT(*)统计行数SELECT COUNT(*) FROM users;
COUNT(列名)统计指定列非NULL的行数SELECT COUNT(email) FROM users;
SUM(列名)求和(数值列)SELECT SUM(salary) FROM employees;
AVG(列名)求平均值SELECT AVG(age) FROM users;
MAX(列名)求最大值SELECT MAX(salary) FROM employees;
MIN(列名)求最小值SELECT MIN(age) FROM users;

6.2 分组查询(GROUP BY)

SELECT 分组字段, 聚合函数(列名) FROM 表名 GROUP BY 分组字段;

# 示例:按部门分组,统计每个部门的员工数和平均薪资
SELECT dept_id, COUNT(*) AS 人数, AVG(salary) AS 平均薪资 
FROM employees 
GROUP BY dept_id;

GROUP BY 用于将查询结果按某个或某些字段进行分组,通常配合聚合函数使用,实现对每个分组的统计。

6.3 分组后过滤(HAVING)

SELECT 分组字段, 聚合函数(列名) 
FROM 表名 
GROUP BY 分组字段 
HAVING 聚合函数条件;

# 示例:只返回平均薪资大于50000的部门
SELECT dept_id, AVG(salary) AS avg_sal 
FROM employees 
GROUP BY dept_id 
HAVING avg_sal > 50000;

WHERE 用于分组前过滤原始数据,HAVING 用于分组后过滤聚合结果,两者使用了不同的过滤时机,语法不能混淆。

七、事务操作命令

事务是一组原子性的数据库操作,要么全部成功提交,要么全部失败回滚,确保数据的一致性。

命令说明
START TRANSACTIONBEGIN开始一个新事务
COMMIT提交当前事务,使所有更改永久生效
ROLLBACK回滚当前事务,撤销所有已执行的更改
SET autocommit = 0关闭当前会话的自动提交模式
SAVEPOINT 名称设置回滚点
ROLLBACK TO SAVEPOINT 名称回滚到指定保存点

事务操作示例

-- 方式一:使用 START TRANSACTION(推荐)
START TRANSACTION;
    UPDATE accounts SET balance = balance - 100 WHERE id = 1;
    UPDATE accounts SET balance = balance + 100 WHERE id = 2;
COMMIT;  -- 或 ROLLBACK 来撤销所有更改

-- 方式二:使用 BEGIN
BEGIN;
    INSERT INTO orders (user_id, amount) VALUES (1, 500);
    UPDATE users SET total_spent = total_spent + 500 WHERE id = 1;
COMMIT;

使用保存点进行部分回滚

START TRANSACTION;
    INSERT INTO users (name) VALUES ('张三');
    SAVEPOINT before_update;
    UPDATE users SET name = '李四' WHERE name = '张三';
    -- 发现错误,回滚到保存点
    ROLLBACK TO SAVEPOINT before_update;
COMMIT;  -- 只提交了 INSERT,UPDATE 被撤销

八、索引操作命令

索引用于加速数据查询,但会占用额外存储空间并影响写入性能。

8.1 创建索引

# 创建普通索引
CREATE INDEX 索引名 ON 表名 (列名);

# 创建唯一索引(保证列值唯一)
CREATE UNIQUE INDEX 索引名 ON 表名 (列名);

# 创建全文索引(适用于TEXT类型字段的全文搜索)
CREATE FULLTEXT INDEX 索引名 ON 表名 (列名);

# 创建表时直接定义索引
CREATE TABLE example (
    id INT PRIMARY KEY,
    name VARCHAR(100),
    INDEX idx_name (name)           -- 创建索引 idx_name
);

8.2 查看索引

SHOW INDEX FROM 表名;

# 示例
SHOW INDEX FROM users;

显示指定表的所有索引信息。

8.3 删除索引

# 方式一:使用 DROP INDEX(推荐)
DROP INDEX 索引名 ON 表名;

# 方式二:使用 ALTER TABLE
ALTER TABLE 表名 DROP INDEX 索引名;

# 示例
DROP INDEX idx_name ON users;

九、视图操作命令

视图是存储的查询,在调用时生成结果集,充当虚拟表(不实际存储数据)。它可以帮助简化复杂查询并实现数据安全控制。

9.1 创建视图

CREATE VIEW 视图名 AS SELECT 查询语句;

# 示例:创建一个只包含在职员工的视图
CREATE VIEW active_users AS 
SELECT id, name, email FROM users WHERE status = 'active';

9.2 查看视图

# 查看视图定义
SHOW CREATE VIEW 视图名;

# 描述视图结构(与表类似)
DESC 视图名;

9.3 删除视图

DROP VIEW [IF EXISTS] 视图名;

# 示例
DROP VIEW IF EXISTS active_users;

删除视图只删除视图的定义,不影响原表数据。

十、用户与权限管理命令

10.1 查看所有用户

SELECT user, host FROM mysql.user;

查询 mysql.user 系统表以显示所有用户及其允许登录的主机名。

10.2 创建用户

CREATE USER '用户名'@'主机名' IDENTIFIED BY '密码';

# 示例
CREATE USER 'john'@'localhost' IDENTIFIED BY 'SecurePass123';
CREATE USER 'app_user'@'%' IDENTIFIED BY 'AppPass456';  -- % 表示任意主机
CREATE USER 'admin'@'192.168.1.%' IDENTIFIED BY 'AdminPass'; -- CIDR主机范围

10.3 授予权限(GRANT)

# 权限范围写法(ON子句)
-- *.*                           所有数据库的所有表
-- database_name.*               指定数据库下的所有表
-- database_name.table_name      指定数据库中的具体表

# 格式
GRANT 权限类型 ON 作用范围 TO '用户名'@'主机名' [WITH GRANT OPTION];

# 示例
GRANT SELECT ON company_db.* TO 'reader'@'%';
GRANT ALL PRIVILEGES ON company_db.* TO 'john'@'localhost';
GRANT INSERT, UPDATE, DELETE ON company_db.users TO 'app_user'@'%';
GRANT SELECT(id, name) ON company_db.users TO 'limited'@'localhost';     -- 仅授予特定列

权限类型包括 ALL PRIVILEGES(全部权限,慎用)、SELECT(查询)、INSERT(插入)、UPDATE(更新)、DELETE(删除)、CREATE(创建库/表)、DROP(删除)、INDEX(索引管理)等。

10.4 撤销权限(REVOKE)

REVOKE 权限类型 ON 作用范围 FROM '用户名'@'主机名';

# 示例
REVOKE INSERT ON company_db.users FROM 'app_user'@'%';
REVOKE UPDATE ON company_db.* FROM 'john'@'localhost';
REVOKE ALL PRIVILEGES ON *.* FROM 'old_user'@'%';

10.5 刷新权限

FLUSH PRIVILEGES;

在直接修改了 mysql.user 系统表后,需要执行此命令使权限变更立即生效。通过 GRANTREVOKE 命令修改权限时,系统会自动刷新,通常无需手动执行。

10.6 修改用户密码

# MySQL 5.7及更早版本
SET PASSWORD FOR '用户名'@'主机名' = PASSWORD('新密码');

# MySQL 8.0+ 推荐方式
ALTER USER '用户名'@'主机名' IDENTIFIED BY '新密码';

# 示例
ALTER USER 'john'@'localhost' IDENTIFIED BY 'NewSecurePass456';

10.7 删除用户

DROP USER '用户名'@'主机名';

# 示例
DROP USER 'old_user'@'localhost';
DROP USER 'app_user'@'%';

十一、备份与恢复命令

11.1 备份数据库(mysqldump)

需要在Linux/macOS终端的命令行执行(不在MySQL客户端内),语法如下:

# 备份整个数据库
mysqldump -u 用户名 -p 数据库名 > 备份文件.sql

# 备份指定的多个数据库
mysqldump -u 用户名 -p --databases 数据库1 数据库2 > 备份文件.sql

# 备份所有数据库
mysqldump -u 用户名 -p --all-databases > 全库备份.sql

# 仅备份表结构,不备份数据(--no-data)
mysqldump -u 用户名 -p --no-data 数据库名 > 结构备份.sql

# 示例
mysqldump -u root -p mydatabase > mydatabase_backup.sql

执行后会提示输入密码,密码正确后开始导出。mysqldump 将数据库的结构和数据导出为SQL语句保存至 .sql 文件。

11.2 恢复数据库

恢复同样在操作系统命令行中执行,使用 mysql 命令:

# 恢复前通常需要先创建目标数据库
mysql -u 用户名 -p -e "CREATE DATABASE 新数据库名"

# 恢复数据到指定数据库
mysql -u 用户名 -p 目标数据库名 < 备份文件.sql

# 完整示例
mysql -u root -p -e "CREATE DATABASE restored_db"
mysql -u root -p restored_db < mydatabase_backup.sql

如果备份文件是通过 --all-databases 生成的,恢复时通常直接导入而不需预先创建数据库;如果只是单个数据库备份,恢复前需要先创建目标数据库(可使用 -e 参数快速创建并执行其他SQL命令)。

11.3 在MySQL客户端内导入

mysql> USE 数据库名;
mysql> SOURCE /path/to/backup.sql;

登录到MySQL客户端后,使用 SOURCE 命令执行SQL文件。路径中最好不要包含中文字符。

十二、系统信息查询命令

命令说明示例
SELECT VERSION();查看MySQL服务器版本号SELECT VERSION();
SELECT NOW();查看当前日期和时间SELECT NOW();
SELECT DATABASE();查看当前使用的数据库名SELECT DATABASE();
SELECT USER();查看当前登录用户SELECT USER();
SHOW STATUS;查看MySQL服务器状态信息SHOW STATUS;
SHOW VARIABLES;查看MySQL服务器配置参数SHOW VARIABLES LIKE 'character%';
SHOW PROCESSLIST;查看当前数据库连接和正在执行的查询SHOW PROCESSLIST;
SELECT CONNECTION_ID();查看当前连接IDSELECT CONNECTION_ID();

备注SELECT DATABASE(); 返回当前数据库名,若未选择任何数据库则返回 NULLSELECT USER(); 同样返回当前登录用户字符串。

十三、mysql命令行快捷命令

以下命令在 mysql> 客户端提示符下可直接输入使用:

快捷命令完整命令说明
\c清除当前输入的语句
\g;发送语句到服务器执行
\G以垂直格式显示结果(每条记录纵向显示)
\hhelp显示帮助信息
\qquitexit退出MySQL客户端
\sstatus显示服务器状态信息
\u 数据库名USE 数据库名切换数据库
\dDELIMITER设置语句分隔符
\T 文件名tee记录输出到文件
\tnotee停止输出记录

特别说明\G 命令非常实用,例如执行 SELECT * FROM users\G 可以将查询结果以每行一个字段的竖排格式展示,方便查看有多列记录的结果集。\T 命令用于将所有输出内容实时保存到指定日志文件,便于调试和记录操作历史。


温馨提示:由于MySQL版本迭代较快,建议在首次使用不熟悉的版本时查阅对应版本的官方文档确认具体语法的支持情况。以上命令基于MySQL 5.7/8.0版本编写,兼容大部分主流版本。