智警杯备赛--数据库管理与优化
MySQL概述与安装
ps:这里的环境是的centos 7然后装了mysql,备赛系统要充钱,下面会讲一下mysql的安装,参照的是下面两篇博客
VMware 虚拟机安装CentOS镜像超详细步骤 (含下载地址) - fly龙御沧海 - 博客园
Centos 7 虚拟机安装 MySQL_centos mysql my.cnf.d-CSDN博客
概述
数据库
数据库是一个以某种有组织的方式存储的数据集合,它是一个按数据结构来存储和管理数据的计算机软件系统。理解数据库的一种最简单的办法是将其想象为一个文件柜,这个文件柜只是一个存储数据的空间,而数据库就是这么一个空间
数据库管理系统(Database Management System, DBMS)是用于创建、管理、和维护数据库时所使用的软件,用以管理数据库,一定程度上,用户都是在操作DBMS,所以日常的数据库概念一般就是指DBMS
常见的数据库软件DBMS有甲骨文的Oracle DB、微软的Access、MongoDB等,还有接下来要介绍的MySQL
MySQL
MySQL数据库软件,也是使用最常用的数据库管理语言:结构化查询语言(SQL),进行数据库管理和操作
优点:
- MySQL是开放源代码的数据库,任何人都可以获得该数据库的源代码。
- MySQL能够实现跨平台操作,可以在Windows、UNIX、Linux和Mac OS等操作系统上运行。
- MySQL数据库是一款自由软件,大部分应用场景下都是免费使用。
- MySQL功能强大且使用方便,社区生态繁荣,有诸多学习资料。
MySQL还有很多自己的特性。
MySQL的应用极其广泛,所以很多中小型网站都使用 MySQL作为其数据库系统
安装
检测系统是否自带安装MySQL
rpm -qa | grep mysql
安装前,可以先检测系统是否自带安装MySQL,如果有,可以选择进行卸载
安装配置MySQL
使用rpm -ivh安装MySQL
rpm -ivh语法:
rpm -ivh [rpm包名]
其中:
rpm意思是软件包管理器
ivh意思是软件包管理器的选项,其中i表示安装,v表示显示安装过程,h表示显示进度
rpm包名是操作的对象
更改MySQL密码
mysql -uroot
更改密码
quit
关闭
数据库的创建与管理
语法1
MySQL安装后,系统自动地创建information_schema和MySQL数据库,MySQL把有关数据库的信息存储在这两个数据库中。如果删除了这些数据库,MySQL就不能正常工作。
数据库名:在文件系统中,MySQL的数据库存储区将以目录方式表示MySQL的数据库。因此,命令中的数据库名字必须符合操作系统文件夹命名规则。值得一说的是,在MySQL中不区分大小写,在一定程度上方便使用。如果指定了CHARACTER SET 字符集名和COLLATE 校对规则名,那么采用指定的字符集CHARACTER SET 和校对规则COLLATE,如果没有指定,则会采用默认的值
查看数据库
显示服务器中已经创建好的数据库,会用以下命令。这个语句是死的,只要牢记就可以了。当去到陌生的测试或者生产环境,需要查看环境中是否有数据库时可以使用该语句show databases;。语句中的schema术语数据库的结构,可以忽略它
修改数据库
创建好的数据库字符集和校对方式,还可以进行修改,如果MySQL数据库的存储引擎是MyISAM,那么只要修改data目录下的库名文件就可以了。但如果存储引擎是InnoDB,是无法修改数据库名称的,只能修改字符集和校对规则
补充:
数据库的存储引擎是指数据库管理系统(DBMS)中,负责实际数据的存储、检索、索引、事务管理以及并发控制等底层操作的核心组件
可以把存储引擎理解为数据库内部的“发动机”或“执行器”。在数据库中执行SQL语句时,这些操作最终都会由存储引擎来完成
存储引擎的作用:
数据存储和管理: 决定数据在磁盘上的物理存储方式,例如文件结构、数据块组织等
索引管理: 负责创建、维护和使用索引,以提高数据检索效率
事务支持: 对于支持事务的存储引擎,它会确保数据库操作的原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability),即ACID特性
并发控制: 处理多个用户同时访问和修改数据时可能出现的冲突,通过锁定机制(如表锁、行锁)来保证数据的一致性和完整性
数据恢复: 在数据库系统崩溃后,存储引擎负责通过日志(如重做日志、回滚日志)来恢复数据到一致状态
空间管理: 管理数据的存储空间,包括数据的分配、释放和重用
MySQL是支持多种存储引擎的典型代表,允许用户为不同的表选择不同的存储引擎,以适应不同的应用场景。最常用的两种是:
MyISAM:
数据和索引存储: 数据存储在.MYD文件(MyData),索引存储在.MYI文件(MyIndex),表定义存储在.frm文件
全文搜索: 支持全文索引(Full-text Indexing),适合数据仓库、日志分析等读密集型应用
InnoDB:
崩溃恢复: 具有崩溃恢复能力,通过重做日志(redo log)和回滚日志(undo log)保证数据一致性
数据和索引存储: 数据和索引都存储在同一个.ibd文件(独立表空间)或系统表空间中
除了InnoDB和MyISAM,MySQL还有其他一些存储引擎,例如:
Memory: 将所有数据存储在内存中,读写速度极快,但数据在服务重启后会丢失。适合临时表或缓存数据
Archive: 用于存储大量不经常访问的历史数据,支持高度压缩,但不支持索引和更新
CSV: 将数据存储为CSV(逗号分隔值)文件,可以直接用外部工具查看
修改的语法如图中,核心的关键字是alter,alter database用于更改数据库全局特性,用户必须具有数据库 修改权限,才可以使用alter database修改数据库。语法后面的默认字符集以及默认校对规则是可选项,不是必选项删除数据库
删除数据库是指在数据库系统中删除已经存在的数据库,数据库删除成功后,原来分配的空间将被收回。再次删除数据库时,会删除数据库中的所有表和数据
语法2
ps:下面的操作均基于navicat
语法中的“数据库名”表示被创建数据库名,该名称必须符合以下规则:
1.数据库名必须唯一,如果数据库名重复,放入其中的数据就不知道放到哪,查询起来会很麻烦
2.名称内不能含有“/”及“.”等非法字符,这是开发数据库人员做的死规定
3.最大不能超过64字节,如果名字非常长的话,使用起来会非常麻烦
创建数据库
create database cyy;
创建一个名为cyy的数据库,使用正确的用户名和密码登录到MySQL环境,然后输入create database cyy;语句,这里要保证末尾的分号,如果没有分号,MySQL会认为还要输入,从而不执行语句
创建存在的数据库
使用相同的语句,再次创建相同的数据库,按下回车键执行可以看到抛出一个error错误,读一下内容,发现MySQL说数据库已经存在了,所以MySQL不允许两个数据库使用相同的名字,所以会报错。报错内容为数据库存在。
为了不报错使用if not esists
从句可以不显示报错信息
查看全部数据库
show databases;
用于查看当前MySQL服务器中包含的库,经初始化后的MySQL服务器
可以看见我这里建立了5个库:其中mysql库是mysql正常运行所需的库,其中包含了用户认证相关的表
查看指定数据库
该语法为show create database db_name;。同样要用到show语句,区别在于加了create,并且要使用该语句,首先要知道目标数据库,即想看哪个数据库
比如我们想查看的数据库为mysql,那么执行示例中的语句,则看到执行的效果
修改数据库
alter database db_name character set new_charset;
这里新建了一个test用来修改
alter database为修改数据库的固定语法格式
db_name为要修改的数据库名称
character set表示修改的是数据库的字符集
new_charset为新的字符集名称,例如 utf8mb4、utf8、gbk 等
核心的关键字是alter,alter database用于更改数据库全局特性,必须具有数据库修改权限,才可以使用alter database修改数据库,后面的默认字符集以及默认校对规则是可选项,不是必选项
删除数据库
drop database db_name;
drop database为删除数据库的固定语法格式
db_name为要删除的数据库名称
关键是drop,if exists也是可选项,如果不加该语句,删除不存在的数据库就会报错,与if not exists语句正好相反,同样也是具有避免抛错的作用
数据表
什么是数据表
数据库与表之间的关系是数据库由各种数据表组成的,数据表是数据库中最重要的对象,用来存储和操作数据的逻辑结构。表由列和行组成,列是表数据的描述,行是表数据的实例。一个表包含若干个字段或记录。表的基本操作包括创建新表、修改表和删除表。这些操作都是数据库管理中最基本,最重要的操作
建表
原则
为了减少数据传输错误,并能使用数据库的高效工作,表设计应按照一定原则对信息进行分类,同时为确保表结构设计的合理性,通常还要对表进行规范化设计,以消除表中存在的冗余,保证一个表只围绕一个主题,并使得表容易维护
每个表应该包含关于一个主题的信息。当每个表只包含关于一个主题的信息时,就可以独立于其他主题来维护该主题的信息。例如,应将教师基本信息保存在‘教师’表中。如果将这些基本信息保存在‘授课’表中,则在删除某教师的授课信息,就会将其基本信息一同删除
表中不应该包含重复信息,表间也不应有重复信息。每条信息只保存在一个表中,需要时只在一处进行更新,效率更高。例如,每个学生的学号,姓名,性别等信息只在‘学生’表中保存,而‘成绩’表中不保存这些信息
创建表
要求:创建student表
步骤:
create database cyy;
创建cyy数据库
use cyy;
使用cyy数据库
create table student(id INT(8),name VARCHAR(20),gender VARCHAR(1),age INT(2));
其中id,name,gender都是列名,INT(8)规定最大宽度是8,VARCHAR可变长度的字符串
创建student表
查看表
desc student;
查看基本结构
show create table student;
查看详细结构
修改表名
要求:将表名student修改为s_student
alter table student rename to s_student;
或
alter table student rename s_student;
修改
show tables;
检查
show create table s_student;
查看结构与之前相比是否完全相同
修改一个字段的数据类型
要求:将id中的int(8)修改为int(10)
alter table s_student modify id int(10);
修改
desc s_student;
检查基本结构
修改多个字段数据类型
要求:id类型修改为int(20),name修改为varchar(10)
alter table s_student modify id int(20),modify name varchar(10);
修改
desc s_student;
查看基本结构
修改字段名
要求1:将gender改为sex
alter table s_student change gender sex varchar(1);
修改
desc s_student;
查看基本结构
要求2:将sex改为gender,并设置数据类型为varchar(2)
alter table s_student change sex gender varchar(2);
修改
desc s_student;
查看基本结构
增加字段
要求:在表的最后位置添加source字段,数据类型为float
alter table s_student add source float;
添加
desc s_student;
查看基本结构
要求2:在表的第一个位置加一个phone,数据类型为varchar(11)的字段
alter table s_student add phone varchar(11) first;
添加
desc s_student;
查看基本结构
要求3:在表的age字段后加clazz数据类型为varchar(20)的字段
alter table s_student add clazz varchar(20) after age;
添加
desc s_student;
查看基本结构
修改字段排列位置
要求1:将id字段移动到表第一个位置
alter table s_student modify id int(20) first;
移动
desc s_student;
查看基本结构
要求2:将phone字段移动到clazz后面
alter table s_student modify phone varchar(11) after clazz;
移动
desc s_student;
查看基本结构
删除字段
要求:将phone字段删除
alter table s_student drop phone;
删除
desc s_student;
查看基本结构
删除表
create table test(id int(5));
先创建一个用于删除的test表
show tables;
查看是否创建成功
drop table test;
删除
show tables;
检查