【无标题】

目录

[一、MySQL 数据库基础](#一、MySQL 数据库基础)

[(一)SQL 语言概述](#(一)SQL 语言概述)

[(二)MySQL 系统数据库](#(二)MySQL 系统数据库)

[二、MySQL 库操作](#二、MySQL 库操作)

(一)创建数据库

(二)数据库命名规则

(三)选择数据库

(四)查看数据库

(五)删除数据库

[三、MySQL 表操作](#三、MySQL 表操作)

(一)表的基本概念

(二)查看表

(三)创建表

(四)修改表

(五)复制表

(六)删除表

[四、MySQL 数据操作](#四、MySQL 数据操作)

(一)插入数据

(二)删除数据

(三)更新数据

(四)查询数据

[五、MySQL 用户授权](#五、MySQL 用户授权)

(一)创建用户

(二)授权操作

六、总结

七、索引:提升查询性能的关键

(一)索引的概念与作用

(二)索引的类型

(三)创建与删除索引

八、事务处理:确保数据的一致性与完整性

(一)事务的定义与特性

(二)事务的操作语句

(三)事务的隔离级别

[九、存储引擎:选择适合的数据库 "引擎"](#九、存储引擎:选择适合的数据库 “引擎”)

(一)常见存储引擎介绍

(二)选择存储引擎的考量因素

(三)修改存储引擎

十、数据库备份与恢复:保障数据安全

(一)备份的重要性

(二)常用备份工具与方法

(三)恢复备份数据

[十、性能优化:让 MySQL 跑得更快](#十、性能优化:让 MySQL 跑得更快)

(一)查询优化

(二)服务器配置优化

(三)数据库架构优化

十二、总结


一、MySQL 数据库基础

(一)SQL 语言概述

SQL(Structured Query Language)即结构化查询语言,是操作数据库的标准指令集。它由 DDL、DML、DQL 和 DCL 四部分组成。

DDL(数据定义语言) :用于创建、修改和删除数据库及数据库对象,像CREATE(创建)、ALTER(修改)、DROP(删除)语句。比如CREATE DATABASE db1;就是创建名为db1的数据库。

DML(数据操纵语言) :负责插入、删除和修改数据库中的数据,常见语句有INSERT(插入)、UPDATE(更新)、DELETE(删除) 。例如INSERT INTO t1 VALUES (1, '张三', 18);t1表插入一条记录。

DQL(数据查询语言) :用来查询数据库中的数据,SELECT语句是其核心。例如SELECT * FROM renyuan;可查询renyuan表的所有数据。

DCL(数据控制语言) :用于控制数据库组件的存取许可和权限,如GRANT(授权)、REVOKE(撤销授权) 。例如GRANT SELECT ON test.* TO 'xiaoqi'@'localhost';赋予xiaoqi用户对test数据库所有表的查询权限。

(二)MySQL 系统数据库

MySQL 服务器初始化后,会默认创建四个系统数据库:

数据库名称 类型 特点 存储或记录内容 作用
information_schema 虚拟库 不占磁盘空间 数据库启动后的参数,如用户表、列、权限、字符等信息 为数据库运行提供元数据支持,方便查询数据库结构等信息
performance_schema 常规数据库 自 MySQL 5.5 新增 数据库服务器性能参数,查询请求时的事件、锁等现象 用于分析数据库性能瓶颈,优化服务器性能
mysql 授权库 - 系统用户的权限信息 管理数据库用户权限,保障数据库安全访问
sys 常规数据库 - 系统性能信息和监控数据 辅助数据库性能优化,快速定位和解决故障

二、MySQL 库操作

(一)创建数据库

使用CREATE DATABASE语句创建数据库,语法为CREATE DATABASE 数据库名;。例如CREATE DATABASE db1;,执行后会创建名为db1的数据库。

(二)数据库命名规则

可由字母、数字、下划线、@、#、$ 组成。

区分大小写。

名称具有唯一性。

不能使用createselect等关键字。

不能单独使用数字。

最长 128 位。

(三)选择数据库

USE语句选择数据库,语法是USE 数据库名;。比如USE db1;可切换到db1数据库。

(四)查看数据库

show databases;:查看当前所有数据库。

show create database 数据库名;:显示创建指定数据库时的 SQL 语句。

select database();:返回当前选中的数据库名称。

(五)删除数据库

使用DROP DATABASE语句删除数据库,语法为DROP DATABASE 数据库名;。例如DROP DATABASE db1;可删除db1数据库。

三、MySQL 表操作

(一)表的基本概念

数据库中的库类似文件夹,表类似文件,表中的一条记录像文件的一行内容,且每条记录都有对应的字段。例如,在员工信息表中,idnameage等就是字段 。

(二)查看表

使用SHOW TABLES查看当前数据库中的表,但操作前需先用USE语句切换到目标数据库 。例如:

复制代码
USE mysql;
SHOW TABLES;

(三)创建表

语法

复制代码
create table 表名(
    字段名1 类型[(宽度) 约束条件],
    字段名2 类型[(宽度) 约束条件],
    字段名3 类型[(宽度) 约束条件]
);

注意同一张表中字段名不能相同,字段名和类型必填,宽度和约束条件可选,表中最后一个字段不加逗号。

  1. 数据类型 :MySQL 支持数值、日期 / 时间和字符串类型。比如字符串类型中的CHAR是定长字符串,VARCHAR是变长字符串 。

  2. 约束条件 :用于保证数据完整性和一致性。如PRIMARY KEY(主键)唯一标识记录,NOT NULL表示字段不能为空 。例如:

    create table t1(
    id int PRIMARY KEY AUTO_INCREMENT,
    name varchar(50) NOT NULL,
    age int DEFAULT NULL
    );

(四)修改表

修改表名ALTER TABLE 表名 RENAME 新表名;,如ALTER TABLE t1 RENAME t2;

增加字段 :有多种添加方式,如ALTER TABLE 表名 ADD 字段名 数据类型[完整性约束条件]; 。例如ALTER TABLE t1 ADD class int(3) not null;

删除字段ALTER TABLE 表名 DROP 字段名;,如alter table t2 drop class;

修改字段 :可用MODIFYCHANGE关键字。例如alter table t2 modify name char(50);alter table t2 change name user_name varchar(50);

(五)复制表

只复制表结构:create table 新表名 like 原表名;,如create table t3 like t2;

复制表结构和记录(不复制主键、外键和索引):create table 新表名 select * from 原表名;,如create table t4 select *from t2;

(六)删除表

删除表时,若指定 "数据库名。表名" 可直接删除;若只指定表名,需先切换到目标数据库。例如drop table t2;

四、MySQL 数据操作

(一)插入数据

使用INSERT INTO语句,可插入单条或多条记录。例如:

复制代码
INSERT INTO t1 VALUES (1, '张三', 18);
INSERT INTO t1 VALUES (2, '李四', 20), (3, '王五', 22);

(二)删除数据

DELETE FROM语句用于删除指定数据,需加WHERE条件,否则会删除所有记录。如delete from t1 where id = 1;

(三)更新数据

UPDATE语句用于更新数据,同样需WHERE条件。例如update t1 set age = 100 where name = "wangwu";

(四)查询数据

  1. 单表查询

    • 语法与执行优先级 :语法为SELECT 字段1, 字段2... FROM 表名 WHERE 条件 GROUP BY字段 HAVING 筛选 ORDER BY 字段 LIMIT 限制条数 ,执行优先级为from > where > group by > having > select > order by > limit
    • 准备数据:先创建测试库和表并插入数据。例如:

    create database test;
    use test;
    create table renyuan(
    id int not null unique auto_increment,
    name varchar(20) not null,
    sex enum('male', 'female') not null default'male',
    age int(3) unsigned not null default 28,
    hire_date date not null,
    post varchar(50),
    post_comment varchar(100),
    salary double(15, 2),
    office int,
    depart_id int
    );
    insert into renyuan (name, sex, age, hire_date, post, salary, office, depart_id) values
    ('zhangsan','male', 18, '20170301', 'teacher', 7300.33, 401, 1),
    ('lisi','male', 78, '20150302', 'teacher', 1000000.31, 401, 1),
    ...;

  • 各种查询方式
    • 简单查询SELECT 字段1,字段2... FROM 表名,用*表示所有字段。如SELECT id, name, office FROM renyuan;SELECT * FROM renyuan;
    • where 条件查询 :通过各种运算符筛选数据。例如薪资大于 10000 的人姓名:select name, salary from renyuan where salary > 10000;
    • group by 分组查询 :按指定字段分组,结合聚合函数使用。如取每个部门的最高工资:select post, max(salary) from renyuan group by post;
    • having 过滤查询 :在分组后过滤,可使用聚合函数。如查询平均工资大于 10000 的岗位:select post, avg(salary) from renyuan group by post having avg(salary) > 10000;
    • order by 排序查询 :用ASC(升序,默认)或DESC(降序)排序。如select * from renyuan order by id asc;select * from renyuan order by id desc;
    • limit 限制结果条目查询 :限制返回行数。如倒叙排列后仅显示第一行:select * from renyuan order by id desc limit 1;
    • 正则匹配查询 :用REGEXP关键字匹配特殊字符串。如查询Name1开头的姓名:select * from renyuan where name regexp '^1';
  1. 多表查询
    • 子查询:在一个查询语句中嵌套另一个查询语句,结果作为外层条件。例如查询平均年龄在 25 岁以上的部门名。
    • 连接查询
      • 左连接 :以左表为基础表,显示左表所有行和右表符合条件的行。如select renyuan.id, renyuan.name, bumen.name as depart_name from renyuan left join bumen on renyuan.dep_id = bumen.id;
      • 右连接 :以右表为基础表,显示右表所有行和左表符合条件的行。如select renyuan.id, renyuan.name, bumen.name as depart_name from renyuan right join bumen on renyuan.dep_id = bumen.id;

五、MySQL 用户授权

(一)创建用户

语法为CREATE USER 用户名@来源地址 IDENTIFIED BY '密码'; 。例如CREATE USER 'xiaoqi'@'localhost' IDENTIFIED BY '123456';创建了可从本机访问的xiaoqi用户,密码为123456

(二)授权操作

语法是GRANT 权限列表 ON 数据库名.表名 TO 用户名@来源地址 。例如为xiaoqi用户赋予对test数据库所有表的查询权限:GRANT SELECT ON test.* TO 'xiaoqi'@'localhost'; 。实际应用中,可根据需求创建不同权限的用户,保障数据库安全。

六、总结

本文全面介绍了 MySQL 数据库的库操作、表操作、数据操作和用户权限操作。掌握这些知识,你就能熟练进行 MySQL 数据库的日常维护与管理。后续可深入学习索引优化、存储引擎等进阶内容,提升数据库管理和开发能力。

七、索引:提升查询性能的关键

(一)索引的概念与作用

索引就像是书籍的目录,能帮助数据库快速定位数据。在 MySQL 中,合理使用索引可以极大地提高查询效率。例如,在一张包含大量用户信息的表中,如果经常需要根据用户 ID 进行查询,为用户 ID 字段添加索引后,查询速度会显著提升。

(二)索引的类型

  1. 主键索引 :每个表只能有一个主键索引,它保证了字段值的唯一性且不能为空,如CREATE TABLE users (id INT PRIMARY KEY, name VARCHAR(50));,这里的id字段就是主键索引。
  2. 唯一索引 :确保字段值的唯一性,但可以为空,使用UNIQUE关键字创建,例如CREATE UNIQUE INDEX idx_name ON users(name);
  3. 普通索引 :最常见的索引类型,用于加速查询,通过CREATE INDEX语句创建,如CREATE INDEX idx_age ON users(age);
  4. 全文索引 :主要用于文本类型字段的全文搜索,MySQL 5.6 及以上版本支持,例如ALTER TABLE articles ADD FULLTEXT(content);,可对articles表的content字段进行全文索引。

(三)创建与删除索引

  1. 创建索引 :除了上述在创建表时直接定义索引的方式,也可以在已有表上添加索引。例如,为已存在的users表的email字段添加普通索引:CREATE INDEX idx_email ON users(email);
  2. 删除索引 :当索引不再需要时,可以使用DROP INDEX语句删除。如删除users表的idx_email索引:DROP INDEX idx_email ON users;

八、事务处理:确保数据的一致性与完整性

(一)事务的定义与特性

事务是一组数据库操作的集合,这些操作要么全部成功执行,要么全部失败回滚,以保证数据的一致性和完整性。事务具有 ACID 特性:

  • 原子性(Atomicity):事务中的操作要么全部完成,要么全部不完成。
  • 一致性(Consistency):事务执行前后,数据库的完整性约束没有被破坏。
  • 隔离性(Isolation):多个事务并发执行时,相互之间不会干扰。
  • 持久性(Durability):一旦事务提交,其对数据库的修改会永久保存。

(二)事务的操作语句

  1. 开始事务 :使用START TRANSACTIONBEGIN语句开始一个事务。例如:

    START TRANSACTION;

提交事务 :当事务中的所有操作都成功完成后,使用COMMIT语句提交事务,将对数据库的修改永久保存。

复制代码
UPDATE accounts SET balance = balance - 100 WHERE account_id = 1;
UPDATE accounts SET balance = balance + 100 WHERE account_id = 2;
COMMIT;

回滚事务 :如果在事务执行过程中出现错误,使用ROLLBACK语句回滚事务,撤销所有未提交的修改。

复制代码
START TRANSACTION;
UPDATE products SET stock = stock - 5 WHERE product_id = 1;
-- 假设出现错误,回滚事务
ROLLBACK;

(三)事务的隔离级别

MySQL 支持多种事务隔离级别,通过SET SESSION TRANSACTION ISOLATION LEVEL语句设置。常见的隔离级别有:

读未提交(READ UNCOMMITTED):允许一个事务读取另一个未提交事务的数据,可能会出现脏读、不可重复读和幻读问题。

读已提交(READ COMMITTED):只能读取已提交事务的数据,可避免脏读,但仍可能出现不可重复读和幻读。

可重复读(REPEATABLE READ):在同一个事务中多次读取相同数据时,结果保持一致,可避免脏读和不可重复读,但可能出现幻读,这是 MySQL 的默认隔离级别。

串行化(SERIALIZABLE):最高的隔离级别,通过强制事务串行执行,避免了所有并发问题,但性能较低。

九、存储引擎:选择适合的数据库 "引擎"

(一)常见存储引擎介绍

MySQL 支持多种存储引擎,每种都有其特点和适用场景。

InnoDB:是 MySQL 5.5 及以上版本的默认存储引擎,支持事务处理、行级锁和外键约束,适合处理大量并发事务的场景,如电商订单系统。

MyISAM:不支持事务和行级锁,但查询速度快,适合读操作频繁的应用,如博客系统。

Memory:数据存储在内存中,读写速度极快,但数据易丢失,适合临时数据存储,如缓存数据。

(二)选择存储引擎的考量因素

  1. 事务需求:如果应用对事务一致性要求高,如金融系统,应选择 InnoDB;若无需事务支持,MyISAM 或 Memory 可能更合适。
  2. 并发性能:高并发场景下,InnoDB 的行级锁能更好地处理并发操作;而 MyISAM 的表级锁在并发写入时性能较差。
  3. 数据持久性:Memory 存储引擎数据存储在内存,适合临时数据;若数据需要持久保存,应选择 InnoDB 或 MyISAM。

(三)修改存储引擎

可以在创建表时指定存储引擎,如CREATE TABLE test (id INT) ENGINE=InnoDB;。也可以对已存在的表修改存储引擎,使用ALTER TABLE语句,例如:

复制代码
ALTER TABLE test ENGINE=MyISAM;

十、数据库备份与恢复:保障数据安全

(一)备份的重要性

数据库备份是防止数据丢失的重要手段。无论是硬件故障、人为错误还是恶意攻击,备份数据都能帮助我们快速恢复数据,减少损失。

(二)常用备份工具与方法

  1. mysqldump 命令 :这是 MySQL 自带的备份工具,可以将数据库中的数据和结构以 SQL 语句的形式导出到文件中。例如,备份test数据库:

    mysqldump -u root -p test > test_backup.sql

MySQL Enterprise Backup:适用于企业级应用,提供更高级的备份功能,如热备份、增量备份等。

第三方工具:如 Percona XtraBackup,开源且功能强大,支持 InnoDB 存储引擎的热备份。

(三)恢复备份数据

恢复备份数据时,根据备份方式的不同,操作也有所差异。对于mysqldump备份的文件,可以使用mysql命令导入数据:

复制代码
mysql -u root -p test < test_backup.sql

如果使用其他备份工具,需按照相应的恢复流程进行操作。

十、性能优化:让 MySQL 跑得更快

(一)查询优化

  1. 分析查询语句 :使用EXPLAIN关键字分析查询语句的执行计划,查看索引使用情况、表连接顺序等,找出性能瓶颈。例如:

    EXPLAIN SELECT * FROM users WHERE age > 30;

优化索引使用:根据查询需求创建合适的索引,避免全表扫描。同时,定期维护索引,删除不再使用的索引,以提高查询性能。

优化查询语句结构 :尽量避免子查询,使用连接查询替代;合理使用LIMIT限制返回数据量,减少数据传输和处理开销。

(二)服务器配置优化

调整内存分配 :根据服务器硬件资源和业务负载,合理调整 MySQL 的内存参数,如innodb_buffer_pool_size(InnoDB 存储引擎的缓冲池大小),提高数据缓存命中率。

优化磁盘 I/O:使用高速磁盘存储数据,定期清理磁盘空间,减少磁盘碎片,提高磁盘 I/O 性能。

并发连接数设置 :根据服务器性能和并发访问量,合理设置max_connections参数,避免过多连接导致服务器性能下降。

(三)数据库架构优化

数据库设计优化:遵循数据库设计范式,减少数据冗余,提高数据的一致性和完整性。同时,根据业务需求进行适当的反范式化设计,提高查询性能。

分库分表:当数据量过大时,采用分库分表技术将数据分散存储,降低单个数据库和表的负载,提高系统的扩展性和性能。

十二、总结

通过深入学习索引、事务处理、存储引擎、数据库备份恢复和性能优化等知识,我们对 MySQL 数据库的理解和运用能力得到了进一步提升。在实际工作中,根据具体业务需求选择合适的技术和策略,能够充分发挥 MySQL 的优势,构建高效、稳定的数据库系统。希望这些内容能帮助你在 MySQL 的学习和实践中更上一层楼

相关推荐
大模型最新论文速读1 小时前
在Text-to-SQL任务中应用过程奖励模型
数据库·人工智能·sql·深度学习·语言模型·自然语言处理
Amctwd1 小时前
【PostgreSQL】不开启归档模式,是否会影响主从库备份?
数据库·postgresql
寻找沙漠的人1 小时前
Redis 缓存
数据库·redis·缓存
做科研的周师兄1 小时前
基于世界土壤数据库(HWSD)的中国土壤数据集(v1.1)(2009)
数据库
xx155802862xx1 小时前
在CentOS 7上仅安装部署MySQL 8.0客户端
mysql·adb·centos
_extraordinary_2 小时前
MySQL 事务(一)
数据库·mysql
计算机人哪有不疯的2 小时前
Hadoop的组成,HDFS架构,YARN架构概述
大数据·数据库·hadoop·spark
文牧之3 小时前
Oracle 通过 ROWID 批量更新表
运维·数据库·oracle
计算机学姐3 小时前
基于SpringBoot的小区停车位管理系统
java·vue.js·spring boot·后端·mysql·spring·maven
LLLLLindream3 小时前
Redis——达人探店
数据库·redis·缓存