第01课 让mysql跑起来
数据库简介
什么是数据库
官方定义:
数据库是将数据按照一定的数据模型组织, 描述和存储, 具有较小的冗余, 较高数据独立性和易扩展性, 并作为各种用户共享的数据集合
不过, 我更喜欢我自己的理解:
数据库, 顾名思义, 就是数据的仓库
其实相关概念还有很多, 举个栗子吧...
假设你有一个工厂, 用来生产电视机, 那么肯定也需要一个仓库来存储电视, 还需要招聘一个管理仓储的王大爷...
那么问题来了, 你为什么需要一个仓库?
- 存放电视机, 方便统计和管理(
数据管理
) - 找个王大爷, 防止电视失窃(
数据持久化
)
这里的电视机就是DATA(数据)
存放电视机的仓库就是DB(数据库)
这里的王大爷就是DBA(数据库管理员)
你问:"老王, 咱们今天有多少电视机入库?"
王大爷说: "稍等, 老总, 我用管理软件查一下..."
这里的管理软件就是DBMS(数据库管理系统)
, 常见DMS: MySQL, Oracle, SQL server
有下面一个公式:
DBS = DBA 使用 DBMS 管理 DB
数据库系统
就是数据库管理员
使用数据库管理系统
来管理数据库
什么是数据持久化
简单来说, 就是想办法不让数据丢失.
可能你会好奇, 什么数据存在计算机里, 还会丢失?
答案是: 可能会, 也可能不会...主要看你把它存到了哪里
这里需要引出两个概念内存
,硬盘
内存的特点, 速度快, 非常之快, 断电数据丢失
硬盘的特点, 容量大, 非常之大, 断电数据不丢失
简单的说, 内存小而快, 硬盘慢而大, 4000G(4T)硬盘的价格约等于16G内存的价格, 4000:16
所以, 要想数据持久化, 就必须把数据存到硬盘里
如果你是用数据库管理系统的话, 它会自动完成数据持久化
什么是mysql
最著名的数据库管理系统DBMS, 就是前面老王使用的管理软件
当然DBMS不止MySQL一个, MySQL为什么能在众多DBMS中脱颖而出呢?
- 体积小, 运行快
- 性价比高, 因为不要钱...
- 方便各个操作系统移植
- 对SQL语句支持的很好
- 运行速度很快
安装mysql
这里只讲windows系统的压缩包安装方式, 因为这种方式最简单,最流行
MySQL5.7官网下载地址
https://cdn.mysql.com//Downloads/MySQL-5.7/mysql-5.7.25-winx64.zip
安装MySQL
1. 解压
把压缩包解压到D:\test_mysql_57
(路径随意)
![](https://img.haomeiwen.com/i2192652/70ec7b96a669a786.png)
2. 添加环境变量
把bin目录的路径()添加到环境变量, 因为该文件夹下有msyql.exe(命令行工具-客户端)
和msyqld.exe(服务端)
![](https://img.haomeiwen.com/i2192652/4724b38dd9a4d3fe.png)
![](https://img.haomeiwen.com/i2192652/6c941318d50a3cb8.png)
![](https://img.haomeiwen.com/i2192652/84b3e7578b55a43a.png)
![](https://img.haomeiwen.com/i2192652/1f3ad53a8df17992.png)
![](https://img.haomeiwen.com/i2192652/bff0df46590c5e77.png)
![](https://img.haomeiwen.com/i2192652/a0b688535ba0ff1f.png)
![](https://img.haomeiwen.com/i2192652/2bc61b660a2d9d9f.png)
一路点击确定
, 关闭刚才所有的弹窗
3. 配置文件
创建配置文件: D:\test_mysql_57\my.ini
创建数据存储文件夹: D:\test_mysql_57\data
![](https://img.haomeiwen.com/i2192652/946926c10e6ac934.png)
![](https://img.haomeiwen.com/i2192652/ac3cb4e961a43366.png)
内容如下
[client]
port=3306 # 默认端口号
[mysql]
default-character-set=utf8 # 默认字符集
[mysqld]
port=3306
basedir="D:/test_mysql_57/" # mysql路径
datadir="D:/test_mysql_57/data/" # mysql数据路径
character-set-server=utf8 # 默认字符集
default-storage-engine=innodb # 默认数据库引擎
4. 使用命令行, 安装mysql服务
windows+X
打开命令行(管理员身份),
![](https://img.haomeiwen.com/i2192652/0199d6ce54bc0210.png)
输入命令: mysqld install 连接名 --defaults-file="配置文件路径"
mysqld install mysql3306 --defaults-file="D:\test_mysql_57\my.ini"
![](https://img.haomeiwen.com/i2192652/ddf6e32a15604208.png)
5. 初始化mysql
输入如下命令
mysqld --initialize
![](https://img.haomeiwen.com/i2192652/01cca00bca33d103.png)
6. 启动mysql
输入如下命令
net start mysql3306
7. 重置密码
再从文件中找到默认密码
D:\test_mysql_57\data\USER-20170622RQ.err
![](https://img.haomeiwen.com/i2192652/db76b50ac67ab1cc.png)
使用默认密码登录mysql, 重置密码
mysql -h localhost -u root -p
![](https://img.haomeiwen.com/i2192652/d074b101e539e859.png)
SET PASSWORD = PASSWORD('你的新密码');
ALTER USER 'root'@'localhost' PASSWORD EXPIRE NEVER;
flush privileges;
![](https://img.haomeiwen.com/i2192652/302ef08b51c21c27.png)
8. 使用新密码, 重新登录, 开心的输命令吧
![](https://img.haomeiwen.com/i2192652/c7855baef37e52c7.png)
启动/关闭/重启mysql
启动mysql:输入 net start mysql;
停止mysql:输入 net stop mysql;
windows下不能直接重启(restart),只能先停止,再启动。
数据库基本概念
数据库
存放数据的仓库, 所以本质上是一个容器
![](https://img.haomeiwen.com/i2192652/995012ff10e5993e.png)
数据表
通过列
和行
组成二维表, 来存储数据
![](https://img.haomeiwen.com/i2192652/7b83486462f87017.png)
字段
一列称为一个字段
记录
一行称为一个记录
数据
每一个格子
存一个数据
总结
数据库
里有数据表
, 数据表
里有行
和列
, 行来存储数据
, 列来描述数据
![](https://img.haomeiwen.com/i2192652/17e5eadd28c76cf5.png)
![](https://img.haomeiwen.com/i2192652/51bdb34a5784645d.png)
![](https://img.haomeiwen.com/i2192652/1f770f539652b5ae.png)
表关系
一对一(1:1)
用户表和用户详情表
「用户详情表表」,其字段包含:姓名、性别、年龄、身高、体重、籍贯和居住地等
一对多/多对一(1:N/N:1)
国家表,城市表
多对多(N:N)
学生表, 课程表
需要中间表建立联系
范式
简介
什么是范式
设计数据表遵守的规范
意义何在?
是为了解决数据的存储和优化问题
特点
- 非必须
- 越来越严格
- 向下兼容
内容
- 数据表中的每一列(每个字段)必须是不可拆分的最小单元,也就是确保每一列的原子性
- 满足 1NF 后,要求表中的所有列,都必须依赖于主键,而不能有任何一列与主键没有关系
- 必须先满足第二范式(2NF),要求:表中的每一列只与主键直接相关而不是间接相关
说人话
- 一个字段只存一个数据
- 一张表只干一件事
- 不属于这个表的字段, 不要加到这个表里来
![](https://img.haomeiwen.com/i2192652/e03c47686777caf3.png)
![](https://img.haomeiwen.com/i2192652/4cbf7bc725892450.png)
![](https://img.haomeiwen.com/i2192652/f60d2383dcc9bef5.png)
逆规范化
冗余和效率
符合范式, 数据不容易重复, 但是查询起来比较费事
为了速度, 可以多买点硬盘...