1. 数据库
1.1. 什么是数据?
数据就是数值,也就是我们通过观察、实验或计算得出的结果。
数据有很多种,最简单的就是数字。
数据也可以是文字、图像、声音等。
我们打游戏最怕什么?最怕被盗号,怕自己的账号,密码丢失。
打游戏时候,腾讯为了保护大家的账号安全,提供了密保卡,进行坐标验证登录。

你登录的账号,密码,即为数据,那么dnf这么大的游戏平台,N多的账号密码要进行存储,就定有数据库仓库,称为数据库。
1.2. 数据存储
很早很早以前,古人是这么存数据的


结绳、契刻、结珠、石头替代法等等,如今纸张是人们广泛使用的信息载体。但是书籍不便于查询、共享、储藏等缺点。
随着计算机的发展,人们将信息转化为二进制数字,存储在磁性存储介质中,也就是磁盘进行数据记录。数据通过文件系统管理,以文件形式显示出来,但是大量的文件数据,查询内容,还是很不方便。

1.3. 什么是数据库
数据库定义
顾名思义,数据库(DB,database)按照数据结构来组织、存储和管理数据的“仓库”,是一个文件或者一组文件。
表是数据库中存储数据的基本单位,数据按照分类存储在不同的表中,便于查询。
数据库可以通过统一的一些指令对数据进行增、删、改、查(Create,Retrive,Updata,Delete)等操作。

例如财务人员使用Excel统计公司资产信息,进行管理,计算账户,Excel是微软推出的一款电子表格软件,提供计算和图标展示。
如工资计算:

Excel很强大,但是对于企业来说,业务需求庞大,用Excel可能会有成千上万张,并且存储管理很麻烦,员工和客户想要实时知道企业数据,不可能把一个巨大无比的Excel发送给用户。
因此数据库软件应运而生.
1.3.1. 数据库管理系统(DBMS,Database Management System)
数据库管理系统这一软件用于创建和操作数据库。
主流数据库软件,如Mysql(免费),Oracle(收费,甲骨文公司),Microsoft SQL Server、SQLite(轻型)等。
mysql主要用于大型门户,例如搜狗、新浪等,它主要的优势就是开放源代码,因为开放源代码这个数据库是免费的,他现在是甲骨文公司的产品。
oracle主要用于银行、铁路、飞机场等。该数据库功能强大,软件费用高。也是甲骨文公司的产品.
sql server是微软公司的产品,主要应用于大中型企业,如联想、方正等.



数据库,简而言之就是有组织的存储数据的一个仓库(本质就是文件信息管理)。
如同冰箱存储食物,衣柜存放衣物。我们每天登陆QQ,微信,查询支付宝余额,银行卡余额,都是软件去读取查找数据库记录。
你的日常生活,一直一直在使用数据库管理软件,譬如电话簿里找名字,百度搜索"如何变有钱"也是在用数据库。
1.3.2. 表
我们存放一件衣服,不会直接塞进柜子,一般都是有条有理的放在某一个格子中。
存放文件也是放入文件柜中,整整齐齐便于管理。

那在数据库领域中,文件被称为是表。表是一种结构化的文件,用于特定类型的数据。表可以存人员信息,商品信息,或者其他等等资料。
1.3.3. 列
列存储表某一部分的信息。
列是表中的一个字段列。
所有表都是一个或多个列组成。
数据库中每个列都有对应的数据类型,如订单数是数值类型,日期、地址、介绍等英国是字符串类型。
数据类型帮助正确的排序数据。
1.3.4. 行
表的数据按行存储,每条记录存储在自己的一行中。
也有人称作行(row)叫做数据库记录,最正确则是 行。
1.3.5. 主键
每一行数据都应该有自己的一列唯一标识。
如学生名单的编号排列。
如订单表的订单ID号。
主键(primary key)一列(或一组列),主键的值用于区分表中每一行。
表中的任意一列都可以作为主键,只需要保证:
1.任意两行都不具有相同的主键值
2.每个行都必须有一个主键值,不允许NULL值。
使用主键的技巧:
不更新主键列的值
不重用主键列的值
不在主键中使用可能会修改的值
1.3.6. 外键
外键是表中某一列,它的值是另一张表的主键值,定义两个表之间的关系。
1.3.7. SQL
SQL是结构化查询语言的缩写,读作S-Q-L或者sequel,全称是(Structured Query Language),是一种专门用来与数据库交流的语言。
SQL语法主要是
查询语言:select
操作语言:insert、update、delete
事务处理:begin transaction、commit、rollback
权限控制:grant、revoke
数据库管理:create、drop
以上语法不区分大小写
1.3.8. 测试工程师与数据库
测试工程师目的是找出软件的缺陷,且反馈给研发人员,并且要复现bug问题,提交运行环境,操作步骤,以及输入输出的数据。
譬如网站的注册登录功能,正确流程是,注册成功->可以登录。
测试人员就要检测在注册成功后,检查数据库是否正确保留了信息。
如百合网的登录页面:

以上数据,如果用Excel管理,存储每一条记录如下:

如用数据库管理软件(mysql),如下:

1.3.9. 关系型数据库
常见的关系型数据库:
Oracle、DB2、PostgreSQL、Microsoft SQL Server、Microsoft Access、MySQL
非关系模型数据库:
Hbase、redis、Memcached、MongoDB
关系型数据库,指的是一个二维表格模型(x,y轴一个平面二维)。
关系模型的概念:
关系:一张二维表,表且有名字
元祖:二维表的一行记录
属性:二维表的一列数据,也称作字段
域:属性的取值范围
关键字:一组可以唯一标识元祖的属性,数据库中称为主键,由一个或多个列组成
数据库案例
如下是英雄联盟所有的英雄数据库,列出了所有英雄数据

游戏玩法中默认将英雄分为战士、法师、刺客、坦克、射手、辅助几类,对应数据库设计如下:

1.3.10. 什么是MySQL
MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下公司。
MySQL 最流行的关系型数据库管理系统,在 WEB 应用方面MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。
支持多种操作系统,Windows、MacOS、Linux等
支持多种语言API,如C、C++、Python、PHP、Java等
支持多线程、充分利用硬件资源
支持多种存储引擎
mysql就是一个基于socket编写的C/S架构的软件
客户端软件
mysql自带:如mysql命令,mysqldump命令等
python模块:如pymysql
数据库管理软件分类
分两大类:
关系型:如sqllite,db2,oracle,access,sql server,MySQL,注意:sql语句通用
非关系型:mongodb,redis,memcache
可以简单的理解为:
关系型数据库需要有表结构
非关系型数据库是key-value存储的,没有表结构
服务端-客户端
先看下什么是B/S和C/S架构。
B/S是Browser/Server指浏览器和服务器端,在客户机不需要装软件,只需要装一个浏览器。
C/S是Client/Server指客户端和服务器,在客户机端必须装客户端软件及相应环境后,才能访问服务器
MySQL是基于客户端-服务端的运行模式数据库,服务端负责数据处理,运行在数据库服务器上。
用户通过发送增删改查等请求,发送给客户端软件,然后通过网络提交请求给服务端,服务端接收到请求,再进行处理,然后返回。
服务端、客户端可以在不同的机器上,也可以在一台机器上。
这种服务端,客户端,就在生活里很常见,如打游戏时的登录,QQ、微信的登录,MySQL也是一个登录的过程。
1.4. 安装MySQL服务端
1.下载MySQL服务端的安装包,一键安装,省心省力
官网下载页面:https://dev.mysql.com/downloads/mysql/
安装包下载链接:https://cdn.mysql.com/archives/mysql-5.7/mysql-5.7.16-winx64.zip
如果出现缺少.NET包,可以安装https://download.microsoft.com/download/E/2/1/E21644B5-2DF2-47C2-91BD-63C560427900/NDP452-KB2901907-x86-x64-AllOS-ENU.exe
安装步骤如下:
1.解压缩mysql-5.7.16-winx64.zip 压缩包
2.添加mysql的环境变量,便于快捷找到命令
3.配置环境变量
【右键计算机】--》【属性】--》【高级系统设置】--》【高级】--》【环境变量】--》【在第二个内容框中找到 变量名为Path 的一行,双击】 --> 【将MySQL的bin目录路径追加到变值值中,用 ; 分割】
4.初始化mysql数据库
mysqld --initialize-insecure
5、启动MySQL服务
mysqld # 启动MySQL服务
6、启动MySQL客户端并连接MySQL服务
mysql -u root -p # 连接MySQL服务器
7.添加mysql到windows的系统服务中
C:\mysql-5.7.16-winx64\bin\mysqld.exe --install
8.移除系统服务
C:\mysql-5.7.16-winx64\bin\mysqld.exe --remove
9.启动mysql服务端
net start mysql
10.关闭mysql服务端
net stop mysql
windows平台下,5.7版本mysql,破解密码的两种方式:
方式一
#1 关闭mysql
#2 在cmd中执行:mysqld --skip-grant-tables
#3 在cmd中执行:mysql
#4 执行如下sql:
update mysql.user set authentication_string=password('') where user = 'root';
flush privileges;
#5 tskill mysqld #或taskkill -f /PID 7832
#6 重新启动mysql
方式二
#1. 关闭mysql,可以用tskill mysqld将其杀死
#2. 在解压目录下,新建mysql配置文件my.ini
#3. my.ini内容,指定
[mysqld]
skip-grant-tables
#4.启动mysqld
#5.在cmd里直接输入mysql登录,然后操作
update mysql.user set authentication_string=password('') where user='root and host='localhost';
flush privileges;
#6.注释my.ini中的skip-grant-tables,然后启动myqsld,然后就可以以新密码登录了
1.4.1. 统一字符编码
强调:配置文件中的注释可以有中文,但是配置项中不能出现中文
#在mysql的解压目录下,新建my.ini,然后配置
#1. 在执行mysqld命令时,下列配置会生效,即mysql服务启动时生效
[mysqld]
;skip-grant-tables
port=3306
character_set_server=utf8
default-storage-engine=innodb
innodb_file_per_table=1
#解压的目录
basedir=E:\mysql-5.7.19-winx64
#data目录
datadir=E:\my_data #在mysqld --initialize时,就会将初始数据存入此处指定的目录,在初始化之后,启动mysql时,就会去这个目录里找数据
#2. 针对客户端命令的全局配置,当mysql客户端命令执行时,下列配置生效
[client]
port=3306
default-character-set=utf8
user=root
password=123
#3. 只针对mysql这个客户端的配置,2中的是全局配置,而此处的则是只针对mysql这个命令的局部配置
[mysql]
;port=3306
;default-character-set=utf8
user=egon
password=4573
#!!!如果没有[mysql],则用户在执行mysql命令时的配置以[client]为准
统一字符编码
#1. 修改配置文件
[mysqld]
default-character-set=utf8
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
#mysql5.5以上:修改方式有所改动
[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
#2. 重启服务
#3. 查看修改结果:
\s
show variables like '%char%'
安装好MySQL服务端,可以通过客户端工具登录
下载navicat客户端工具:http://cr1.jc9559.com/premiumsoftnavicatpremiumx64zcj.zip
1.4.2. Navicat与王者荣耀的故事
**注意:数据库不建议用中文,请用英文字母命名。`
1.创建数据库【king】

2.新建一张数据表,【zhanshi】,并且表中定义字段【name,age,tedian 】

3.向表中写入数据

1.4.3. MySQL与约束定义
约束用于限定表中数据的准确性、完整性、一致性。常见约束如下:
not null
非空约束,指某一行的值不能为null,不允许写空值,如一些网站,注册必须让你写手机号
unique
唯一约束是指:字段的值不允许重复
primary key
主键等于unique加上not null的组合,主键约束列不允许重复,也不允许有空值
主键一般配合自动递增,无符号使用
foreign key
外键约束保证两个表之间的参照关系
default
不填写值,字段的默认值
自动递增
每次新增记录,ID号自增加一
如图

1.4.4. Navicat导出/导入MySQL数据
数据安全是非常重要的,一个网站所有资料,都存放在数据库里,我们必须保证数据安全。
导出数据库的SQL文件,如图,所有的数据和表创建都存储为了一个SQL文件。

导入数据表的数据,如图

