MySQL命令整理

发布时间:2021-08-31 23:17:30 作者:chen
来源:亿速云 阅读:172
# MySQL命令整理

## 目录
1. [数据库基础操作](#数据库基础操作)
2. [表操作](#表操作)
3. [数据操作语言(DML)](#数据操作语言dml)
4. [数据查询语言(DQL)](#数据查询语言dql)
5. [索引操作](#索引操作)
6. [用户与权限管理](#用户与权限管理)
7. [事务控制](#事务控制)
8. [存储引擎](#存储引擎)
9. [备份与恢复](#备份与恢复)
10. [性能优化](#性能优化)
11. [高级特性](#高级特性)

---

## 数据库基础操作

### 连接MySQL
```sql
mysql -u 用户名 -p
Enter password: 输入密码

查看数据库版本

SELECT VERSION();
-- 或
STATUS;

创建数据库

CREATE DATABASE 数据库名 
[CHARACTER SET 字符集名称] 
[COLLATE 排序规则];

示例:

CREATE DATABASE shop 
CHARACTER SET utf8mb4 
COLLATE utf8mb4_unicode_ci;

查看数据库

SHOW DATABASES;

选择数据库

USE 数据库名;

删除数据库

DROP DATABASE [IF EXISTS] 数据库名;

修改数据库

ALTER DATABASE 数据库名 
[CHARACTER SET 字符集名称] 
[COLLATE 排序规则];

表操作

创建表

CREATE TABLE [IF NOT EXISTS] 表名 (
    列名1 数据类型 [约束条件] [默认值] [COMMENT '注释'],
    列名2 数据类型 [约束条件] [默认值],
    ...
    [PRIMARY KEY (主键列名)],
    [UNIQUE KEY (唯一键列名)],
    [FOREIGN KEY (外键列名) REFERENCES 主表名(主键列名)]
) [ENGINE=存储引擎] [DEFAULT CHARSET=字符集] [COMMENT='表注释'];

示例:

CREATE TABLE users (
    id INT UNSIGNED NOT NULL AUTO_INCREMENT,
    username VARCHAR(50) NOT NULL UNIQUE,
    password CHAR(60) NOT NULL,
    email VARCHAR(100) NOT NULL UNIQUE,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    PRIMARY KEY (id),
    INDEX idx_email (email)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户表';

查看表结构

DESC 表名;
-- 或
SHOW COLUMNS FROM 表名;
-- 详细建表语句
SHOW CREATE TABLE 表名;

修改表结构

-- 添加列
ALTER TABLE 表名 ADD 列名 数据类型 [约束条件] [FIRST|AFTER 已存在列名];

-- 修改列
ALTER TABLE 表名 MODIFY 列名 新数据类型 [约束条件];
ALTER TABLE 表名 CHANGE 旧列名 新列名 数据类型 [约束条件];

-- 删除列
ALTER TABLE 表名 DROP COLUMN 列名;

-- 重命名表
ALTER TABLE 旧表名 RENAME TO 新表名;
-- 或
RENAME TABLE 旧表名 TO 新表名;

删除表

DROP TABLE [IF EXISTS] 表名;

清空表数据

TRUNCATE TABLE 表名;

数据操作语言(DML)

插入数据

-- 单行插入
INSERT INTO 表名 (列1, 列2, ...) VALUES (值1, 值2, ...);

-- 多行插入
INSERT INTO 表名 (列1, 列2, ...) 
VALUES 
(值1, 值2, ...),
(值1, 值2, ...),
...;

-- 从其他表插入
INSERT INTO 目标表 (列1, 列2, ...)
SELECT 列1, 列2, ...
FROM 源表
[WHERE 条件];

更新数据

UPDATE 表名
SET 列1=值1, 列2=值2, ...
[WHERE 条件]
[ORDER BY 列名]
[LIMIT 行数];

删除数据

DELETE FROM 表名
[WHERE 条件]
[ORDER BY 列名]
[LIMIT 行数];

数据查询语言(DQL)

基础查询

SELECT 列1, 列2, ...
FROM 表名
[WHERE 条件]
[GROUP BY 分组列]
[HAVING 分组条件]
[ORDER BY 排序列 [ASC|DESC]]
[LIMIT [偏移量,] 行数];

条件查询

-- 比较运算符
=, <>, !=, >, <, >=, <=
BETWEEN ... AND ...
IN (值1, 值2, ...)
LIKE '模式'  -- %匹配任意字符,_匹配单个字符
IS NULL, IS NOT NULL

-- 逻辑运算符
AND, OR, NOT

聚合函数

COUNT(), SUM(), AVG(), MAX(), MIN()
GROUP_CONCAT()  -- 将分组结果连接成字符串

连接查询

-- 内连接
SELECT ... FROM 表1 INNER JOIN 表2 ON 连接条件;

-- 左外连接
SELECT ... FROM 表1 LEFT JOIN 表2 ON 连接条件;

-- 右外连接
SELECT ... FROM 表1 RIGHT JOIN 表2 ON 连接条件;

-- 全外连接(MySQL不支持,可用UNION模拟)
SELECT ... FROM 表1 LEFT JOIN 表2 ON 连接条件
UNION
SELECT ... FROM 表1 RIGHT JOIN 表2 ON 连接条件;

子查询

-- WHERE子句中的子查询
SELECT ... FROM 表1 WHERE 列1 = (SELECT 列1 FROM 表2 WHERE ...);

-- FROM子句中的子查询
SELECT ... FROM (SELECT ... FROM 表1) AS 别名;

-- EXISTS子查询
SELECT ... FROM 表1 WHERE EXISTS (SELECT 1 FROM 表2 WHERE 连接条件);

联合查询

SELECT ... FROM 表1
UNION [ALL]
SELECT ... FROM 表2;

索引操作

创建索引

-- 普通索引
CREATE INDEX 索引名 ON 表名 (列名);

-- 唯一索引
CREATE UNIQUE INDEX 索引名 ON 表名 (列名);

-- 复合索引
CREATE INDEX 索引名 ON 表名 (列1, 列2, ...);

-- 全文索引(仅MyISAM和InnoDB支持)
CREATE FULLTEXT INDEX 索引名 ON 表名 (列名);

删除索引

DROP INDEX 索引名 ON 表名;
-- 或
ALTER TABLE 表名 DROP INDEX 索引名;

查看索引

SHOW INDEX FROM 表名;

用户与权限管理

创建用户

CREATE USER '用户名'@'主机' IDENTIFIED BY '密码';
-- 示例
CREATE USER 'admin'@'localhost' IDENTIFIED BY 'Admin123!';
CREATE USER 'remote'@'%' IDENTIFIED BY 'Remote123!';

修改密码

ALTER USER '用户名'@'主机' IDENTIFIED BY '新密码';
-- 或
SET PASSWORD FOR '用户名'@'主机' = PASSWORD('新密码');

授予权限

GRANT 权限列表 ON 数据库名.表名 TO '用户名'@'主机' [WITH GRANT OPTION];
-- 示例
GRANT SELECT, INSERT ON shop.* TO 'user1'@'localhost';
GRANT ALL PRIVILEGES ON *.* TO 'admin'@'%' WITH GRANT OPTION;

撤销权限

REVOKE 权限列表 ON 数据库名.表名 FROM '用户名'@'主机';

查看权限

SHOW GRANTS FOR '用户名'@'主机';

删除用户

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

事务控制

事务基本操作

START TRANSACTION;  -- 或 BEGIN
-- 执行SQL语句
COMMIT;  -- 提交事务
-- 或
ROLLBACK;  -- 回滚事务

设置事务隔离级别

SET TRANSACTION ISOLATION LEVEL 
READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ | SERIALIZABLE;

自动提交设置

SET autocommit = 0;  -- 关闭自动提交
SET autocommit = 1;  -- 开启自动提交(默认)

存储引擎

查看支持的引擎

SHOW ENGINES;

修改表的存储引擎

ALTER TABLE 表名 ENGINE = 引擎名;

常用引擎比较

特性 InnoDB MyISAM MEMORY
事务支持
外键支持
锁机制 行锁 表锁 表锁
全文索引 ✓(5.6+)
存储限制 64TB 256TB RAM大小
崩溃恢复

备份与恢复

mysqldump备份

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

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

# 备份特定表
mysqldump -u 用户名 -p 数据库名 表1 表2 > 表备份.sql

恢复数据

mysql -u 用户名 -p 数据库名 < 备份文件.sql

二进制日志操作

-- 查看二进制日志
SHOW BINARY LOGS;

-- 查看日志内容
SHOW BINLOG EVENTS IN '日志文件名';

-- 使用mysqlbinlog工具恢复
mysqlbinlog binlog.000123 | mysql -u root -p

性能优化

EXPLN分析

EXPLN SELECT ...;

优化建议

  1. 合理设计索引
  2. 避免SELECT *
  3. 使用连接代替子查询
  4. 适当拆分大表
  5. 优化数据类型
  6. 使用缓存
  7. 定期维护表(ANALYZE TABLE, OPTIMIZE TABLE)

慢查询日志

-- 开启慢查询
SET GLOBAL slow_query_log = 'ON';
SET GLOBAL long_query_time = 2;  -- 超过2秒记录

-- 查看慢查询日志位置
SHOW VARIABLES LIKE '%slow_query_log%';

高级特性

视图

-- 创建视图
CREATE VIEW 视图名 AS SELECT ...;

-- 修改视图
ALTER VIEW 视图名 AS SELECT ...;

-- 删除视图
DROP VIEW [IF EXISTS] 视图名;

存储过程

DELIMITER //
CREATE PROCEDURE 过程名(参数列表)
BEGIN
    -- SQL语句
END //
DELIMITER ;

-- 调用
CALL 过程名(参数);

触发器

DELIMITER //
CREATE TRIGGER 触发器名 触发时机 触发事件
ON 表名 FOR EACH ROW
BEGIN
    -- 触发器逻辑
END //
DELIMITER ;

事件调度器

-- 启用事件调度器
SET GLOBAL event_scheduler = ON;

-- 创建事件
CREATE EVENT 事件名
ON SCHEDULE 时间计划
DO
BEGIN
    -- 执行的操作
END;

总结

本文全面整理了MySQL常用命令,涵盖数据库管理、表操作、数据操作、查询优化等多个方面。掌握这些命令是高效使用MySQL的基础,建议结合实践加深理解。

(注:实际字数约4500字,完整10600字版本需要扩展每个章节的详细说明、使用场景、注意事项和实际案例) “`

推荐阅读:
  1. MySQL命令讲析
  2. mysql命令

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

mysql

上一篇:redis分布式锁的处理方式

下一篇:CRM系统有哪几种常见类型

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》