一、数据库(库)管理 操作 命令 创建库 CREATE DATABASE [IF NOT EXISTS] 库名;查看所有库 SHOW DATABASES;切换库 USE 库名;查看当前库 SELECT DATABASE();查看建库语句 SHOW CREATE DATABASE 库名;删除库(高危) DROP DATABASE [IF EXISTS] 库名;
二、数据表(表)管理 2.1 创建表 CREATE TABLE 库名. 表名( 字段1 数据类型[ 约束] , 字段2 数据类型[ 约束] , . . . ) ; 2.2 查看表信息 SHOW TABLES ; -- 查看当前库所有表 DESC 库名. 表名; -- 查看表结构 SHOW CREATE TABLE 库名. 表名; -- 查看建表语句 2.3 修改表结构 -- 添加字段 ALTER TABLE 库名. 表名ADD 字段名 类型[ FIRST | AFTER 字段] ; -- 修改字段类型 ALTER TABLE 库名. 表名MODIFY 字段名 新类型; -- 修改字段名(可同时改类型) ALTER TABLE 库名. 表名 CHANGE 旧字段名 新字段名 新类型; -- 修改表名 ALTER TABLE 库名. 旧表名RENAME TO 库名. 新表名; -- 删除字段 ALTER TABLE 库名. 表名DROP 字段名; 2.4 删除表(保留结构用TRUNCATE) DROP TABLE 库名. 表名; -- 删除表(结构+数据) TRUNCATE TABLE 库名. 表名; -- 清空数据,重置自增,保留结构 三、表记录(数据)操作(DML) 操作 命令 插入数据 INSERT INTO 库名.表名 [(字段列表)] VALUES (值列表);更新数据 UPDATE 库名.表名 SET 字段=值 WHERE 条件;(务必加WHERE )删除数据 DELETE FROM 库名.表名 WHERE 条件;(务必加WHERE )
四、查询(SELECT) 4.1 基础查询 SELECT 字段列表FROM 库名. 表名[ WHERE 条件] ; *表示所有字段可用AS起别名 DISTINCT去重CONCAT(字段1, '分隔', 字段2)拼接字符串4.2 常用筛选条件 类型 示例 比较 WHERE uid > 5、WHERE name = 'root'空值判断 WHERE shell IS [NOT] NULL范围 WHERE uid IN (1,3,5)、WHERE uid BETWEEN 10 AND 30模糊匹配 WHERE name LIKE 'a%'(%任意多个,_单个)正则 WHERE name REGEXP '^a|t$'逻辑组合 AND、OR、NOT,括号改变优先级
4.3 结果处理(排序/分组/分页) SELECT 字段列表FROM 库名. 表名[ WHERE 条件] [ GROUP BY 分组字段] -- 分组,常配合聚合函数 [ HAVING 分组后过滤条件] -- 过滤分组结果,可用聚合函数 [ ORDER BY 排序字段[ ASC | DESC ] ] -- 排序,多字段用逗号分隔 [ LIMIT [ 偏移量, ] 行数] ; -- 分页,偏移量从0开始 执行顺序 :FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY → LIMIT4.4 聚合函数(统计) 函数 作用 COUNT(字段)统计行数(忽略NULL) SUM(字段)求和 AVG(字段)平均值 MAX(字段)/MIN(字段)最大/最小值
4.5 常用内置函数 SELECT VERSION( ) ; -- MySQL版本 SELECT USER ( ) ; -- 当前登录用户 SELECT DATABASE ( ) ; -- 当前库 五、多表连接查询 5.1 内连接(只保留匹配数据) SELECT 字段列表FROM 表1 [ AS 别名1 ] INNER JOIN 表2 [ AS 别名2 ] ON 连接条件[ INNER JOIN 表3 ON 连接条件. . . ] [ WHERE / GROUP BY / HAVING / ORDER BY / LIMIT ] ; 5.2 左外连接(保留左表全部,右表无匹配补NULL) SELECT . . . FROM 左表LEFT JOIN 右表ON 连接条件. . . ; 5.3 右外连接(保留右表全部) SELECT . . . FROM 左表RIGHT JOIN 右表ON 连接条件. . . ; MySQL 不支持全外连接,可用UNION组合左右连接结果。
5.4 子查询 嵌套在SELECT、FROM、WHERE、HAVING后的SELECT语句。
六、备份与恢复 6.1 冷备份(物理备份,需停服) systemctl stop mysqldcp -r /var/lib/mysql /备份目录/# 或打包 tar -zcf /备份目录/mysql.tar.gz-C /var/lib/mysql. # 恢复:解压到 /var/lib/mysql,并 chown -R mysql:mysql /var/lib/mysql 6.2 逻辑备份(mysqldump,服务运行中) # 备份 mysqldump -u用户 -p'密码' [ 选项] > /路径/备份.sql# 常用选项:-A(全库)、-B 库名(单个或多个库)、库名 表名(单表) # 恢复 mysql -u用户 -p'密码' < /路径/备份.sql# 恢复单表需指定库名:mysql -u用户 -p'密码' 库名 < 表备份.sql 6.3 增量备份与恢复(Percona XtraBackup) 全量备份 :xtrabackup --backup --target-dir=/全量目录 --datadir=/var/lib/mysql增量备份 :xtrabackup --backup --target-dir=/增量目录 --incremental-basedir=/基准目录恢复步骤 :先--prepare --apply-log-only合并所有增量到全量,再用--copy-back拷贝回数据目录。七、二进制日志(binlog) 操作 命令/说明 查看当前日志 SHOW MASTER STATUS;刷新日志(滚动) FLUSH LOGS;重置日志 RESET MASTER;应用binlog恢复 mysqlbinlog 日志文件 | mysql -u用户 -p'密码'配置参数 在/etc/my.cnf.d/mysql-server.cnf中设置log-bin=/路径/前缀、server_id=数字
八、主键、外键、索引 8.1 主键(PRIMARY KEY) 唯一且非空,一张表只能有一个(可复合)。 建表时:字段名 类型 PRIMARY KEY或PRIMARY KEY(字段1,字段2) 已有表添加/删除: ALTER TABLE 表名ADD PRIMARY KEY ( 字段) ; ALTER TABLE 表名DROP PRIMARY KEY ; 自增:AUTO_INCREMENT必须配合主键使用。 8.2 外键(FOREIGN KEY) FOREIGN KEY ( 从表字段) REFERENCES 主表( 主表字段) ON UPDATE CASCADE ON DELETE CASCADE SHOW CREATE TABLE 表名; ALTER TABLE 从表DROP FOREIGN KEY 外键名; ALTER TABLE 从表ADD FOREIGN KEY . . . REFERENCES . . . ; 8.3 索引 普通索引:可重复,可为NULL,标志MUL。 创建:CREATE INDEX 索引名 ON 表名(字段); 删除:DROP INDEX 索引名 ON 表名; 查看:SHOW INDEX FROM 表名; 验证是否使用索引:EXPLAIN SELECT ...; 九、用户与权限管理 9.1 创建用户 CREATE USER 用户名@"客户端地址" IDENTIFIEDBY '密码' ; 客户端地址:%(任意)、192.168.8.%(网段)、192.168.8.51(单IP)、localhost(本机)
9.2 授权 GRANT 权限列表ON 库名. 表名TO 用户名@"客户端地址" ; 权限:ALL、USAGE(无权限)、SELECT,INSERT,...;库表范围:*.*、库名.*、库名.表名
9.3 查看权限 SHOW GRANTSFOR 用户名@"客户端地址" ; 9.4 撤销权限 REVOKE 权限列表ON 库名. 表名FROM 用户名@"客户端地址" ; 9.5 修改密码 SET PASSWORDFOR 用户名@"客户端地址" = '新密码' ; 9.6 删除用户 DROP USER 用户名@"客户端地址" ; 9.7 查看所有用户 SELECT user , hostFROM mysql. user ; 十、常用管理操作 操作 命令 启动/停止/重启MySQL systemctl start/stop/restart mysqld查看端口监听 ss -nutlp | grep :3306无密码进入(修复) 修改配置文件添加skip-grant-tables,重启后mysql直接进入 更新root密码(有旧密码) mysqladmin -uroot -p'旧密码' password '新密码'导入SQL文件 mysql -u用户 -p'密码' < /路径/文件.sql