目录
- 数据库的概念
- 数据库的分类
- 关系型数据库
- 非关系型数据库
- 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的过程中,我们不允许执行上面这条命令,所以才出现了第六步