目录

  • 数据库的概念
  • 数据库的分类
  • 关系型数据库
  • 非关系型数据库
  • SQL语句(了解阶段)
  • mysql配置文件
  • 破解MySQL账号密码




数据库的概念


数据库:即存放数据的一个仓库

使用数据库的优势:可供远程读取数据,存取数据方便

我们在未使用数据库时,使用Python存取文件靠的是文件,而一次读和取数据,都会打开整个文件,增加了IO延迟,并且无法取到我们指定的内容,使用数据库存取可以很好解决这一问题,这只是其一优势。

数据库的核心概念:

  • 数据:事务的状态
  • 记录:文件中的信息
  • 表:可以理解为文件,更方便读取和修改数据
  • 库:可以理解为文件夹,存放表的地方
  • 数据库管理软件:MySQL、Oracle等
  • 数据库服务器:运行了数据库管理软件的计算机,供其它计算机访问

数据库的特点:

1、实现数据共享:
     数据共享包含所有用户可同时存取数据库中的数据,也包括用户可以用各种方式通过接口使用数据库,并提供数据共享。
2、减少数据的冗余度:
     同文件相比,由于数据库实现了数据共享,从而避免了用户各自建立应用文件。减少了大量重复数据,减少了数据冗余,维护了数据的一致性。
3、数据实现集中控制:
     文件管理方式中,数据处于一种分散的状态,不同的用户或同一用户在不同处理中其文件之间毫无关系。利用数据库可对数据进行集中控制和管理,并通过数据模型表示各种数据的组织以及数据间的联系。
4、数据库的安全性:
     失误操作后可以回滚到上一时刻的状态,分配权限执行操作,库的备份等
5、关联性查询:
     多个表之间可以存在关联性,我们可以使用sql语句进行联表查询

数据库是一个C/S架构的软件

分为客户端与服务端,开启MySQL服务后,会产生端口号,客户端可以根据这个端口号与对应的账号密码登录MySQL。



数据库的分类


数据库本质上就是一个软件,其分为两类

关系型数据库

  • 优点:

 1、易于维护:都是使用表结构,格式一致;
2、使用方便:SQL语言通用,可用于复杂查询;
3、复杂操作:支持SQL,可用于一个表以及多个表之间非常复杂的查询。

  • 缺点:

 1、读写性能比较差,尤其是海量数据的高效率读写;
2、固定的表结构,灵活度稍欠;
3、高并发读写需求,传统关系型数据库来说,硬盘I/O是一个很大的瓶颈。

常见的有:MySQL、Oracle、SQLserver、SQLite等



非关系型数据库

非关系型数据库严格上不是一种数据库,应该是一种数据结构化存储方法的集合,可以是文档或者键值对等。

  • 优点:

 1、格式灵活:存储数据的格式可以是key,value形式、文档形式、图片形式等等,文档形式、图片形式等等,使用灵活,应用场景广泛,而关系型数据库则只支持基础类型。
2、速度快:nosql可以使用硬盘或者随机存储器(内存)作为载体,而关系型数据库只能使用硬盘;
3、高扩展性;
4、成本低:nosql数据库部署简单,基本都是开源软件。

  • 缺点:

 1、不提供sql语句支持,学习和使用成本较高;
2、无事务处理;
3、数据结构相对复杂,复杂查询方面稍欠。

常见的有:redis、memcache、MongoDB(也有部分作为关系型数据库使用)



SQL语句(了解阶段)


SQL 是用于访问和处理数据库的标准的计算机语言。

使用的主要目的就是来操作数据库,这里使用sql操作的是MySQL数据库

进入数据库前的命令

mysql --verison # 查看数据库版本
结果:mysql  Ver 8.0.20 for macos10.15 on x86_64 (MySQL Community Server - GPL)

MySQL数据库登录

mysql -u用户名 -p密码(不建议在-p后面写,因为会明文显示,直接回车密文输入)

如果没有密码,可以1设置登录密码

mysqladmin -uroot password "hello" # 给root用户设置hello为密码

修改密码

mysqladmin -uroot -p原密码(可以不输入,可以直接回车密文输入) password 新密码(也可以不输入,直接回车密文输入)



操作数据库的sql语句

大部分输入完语句以后需要使用分号;结尾,少数可以不使用,如:exit

退出数据库

exit

取消输入的sql语句,可以ctrl+c,或者

exit\c # 添加\c表示此次输入无效

查看当前登录用户

select user();



数据库相关操作(增删改查)

创建数据库

create database test; # 创建一个库,命名为:test
create database test charset utf8mb4; # 创建库并且指定这个库可以存放字符编码,默认在配置文件已经携带

在MySQL文件夹下面的data文件夹可以查看创建后的库,其实也就是创建了一个特殊的文件夹

查看所有数据库

show databases;

查看单个数据库

show create database test;

修改数据库(不能修改数据库名称)

alter database test charset gbk; # 修改test这个库的编码为gbk

删除数据库

drop database test;

选中库

use test; # 选中到test这个库

查看当前所在库

select database();



表操作(增删改查)

创建表(库下面的一个文件,需要先选中到某个库)

create table student(id int,name varchar(20));

表名为:student
创建了两个字段:id:int整数类型、name:varchar字符串类型长度为20,分号结束

创建完成后,我们可以进入到MySQL所在目录的data下面找到选择的库,cd进去后,可以看到我们刚创建的表

查看当前库下面的所有表

show tables;

查看当前库下面某个表的详细信息

show create table student;

查看当前库下面某个表的字段(结构)

desc student;

修改表的名称

alter table student rename teacher; # 修改student表名为teacher

修改表的字段

alter table teacher modify name varchar(10); # 将name字段长度改为10

删除表

drop table teacher;

另一种指定表的方式,不需要选择库,就可以操作某个库下面的某个表

drop table test.teacher; # 删除test库下面的teacher表



表记录相关操作,以及数据相关操作(增删改查)

我们先创建一张表

create table student(id int,name varchar(20));

向表里插入一条记录(一行数据)

insert student value(1,'jack'); # 按字段插入记录
insert student value(2,'tom'),(3,'jams'); # 插入多条记录

查询表里面的记录

select * from student; # *表示查询这个表里面所有字段的记录
select name from student; # 查询这个表里面name这个字段的数据
select * from student where id >= 2; # 查询id字段大于等于2的所有记录,where表示判断

修改表里面的数据

update student set name = 'pop'; # 修改student表下面所有name字段的数据为'pop'

# 推荐使用这种,因为上面是修改表下面所有name字段数据
update student set name = 'pop' where id = 2; # 修改id=2记录下面的name字段的数据为'pop'

删除表的记录

delete from student where id = 2; # 删除id=2的记录
delete from student; # 清除表内的所有记录

如果我们要使用delete清除表里面所有记录时,但后续我们使用到id自增后,delete不能将自增数量清零。需要使用一种新的方式可以完全清空表,清除表内的所有记录建议使用此方法

truncate student;



mysql配置文件


window:C:\ProgramData\MySQL\MySQL Server 8.0 下面的my.ini文件
Linux | Mac:需要在/etc/下面创建my.cnf文件

当我们开启MySQL后,该配置文件就会被加载

我们执行的命令对应的就是文件里面的某个标题下面的内容,如:

1 [client]
2 default-character-set = utf8mb4
3 
4 [mysql]
5 user = 'lll'
6 password = '000'
7 
8 [mysqld]
9 character-set-client-handshake = FALSE
10 character-set-server = utf8mb4
11 collation-server = utf8mb4_unicode_ci
12 init_connect = 'SET NAMES utf8mb4'

当我们输入mysql时,会触发[mysql]下面代码的运行,那么就会自动帮助我们填写账号为:lll,密码为:000

如果我们没有添加[mysql]时,输入mysql就会触发[client]下面代码的运行

输入mysqld代表MySQL服务

解释一下utf8mb4的作用:它代表字符编码,表示MySQL数据库可以存放什么编码的字符,utf8存放任意字符,mb4可以存放一些表情符号等等。

详细的配置到后面逐个了解,目前只需要了解我们开启MySQL后,输入语句会触发这个配置文件里面的对应标题下面代码的运行



破解MySQL账号密码

ps:里面涉及到的一些SQL命令可能没有接触过,目前了解即可,下一章节会了解到使用方法


1、关闭MySQL服务

2、管理员进入终端/CMD

3、输入命令

mysqld --skip-grant-tables --user=mysql

表示开启mysql服务,且跳过权限表登录mysql

4、当前终端不要关闭,再开启一个新终端,直接输入

mysql # 回车直接登录

5、输入sql语句,清空root用户密码

update mysql.user set authentication_string='' where user='root' and host='localhost';

6、这里需要直接关闭MySQL服务的进程,以管理身份重新开启一个终端,执行命令

Windows:tasklist | finstr mysql 找到PID然后,taskkill /F /PID mysqld的PID
Mac:px aux | grep [m]ysqld 找到PID然后,sudo kill -9 mysqld的PID

7、重新开启MySQL服务,root用户无密码登录MySQL后,执行以下命令

alter user root@localhost identified by '000';

可能会好奇为什么要关闭以后,再无密码登录呢,因为–skip-grant-tables的过程中,我们不允许执行上面这条命令,所以才出现了第六步