学习数据库首先要明白什么是数据库?为什么要学习数据库?带着这两个问题看这篇文章希望能帮助到小伙伴们。
1、为什么学习数据库
- 岗位需求
- 现在世界,大数据时代~ 得数据者的天下。
- 被迫需求:存数据
- 数据库是所有软件体系中的的核心存在 DBA
2、什么是数据库
- 数据库(DB,DataBase)
- 概念:数据仓库,软件,安装在操作系统(window,linux,mac)之上 !! SQL
- 作用:存储数据,管理数据
- 理解:用于持久化保存数据的管理软件、保存数据的技术:
将数据保存到内存中: ① 变量 ② 对象 ③ 数组 ④ 集合 特点:易失性
持久化保存技术:IO 特点:可操作性比较差 效率低
- 特点:可以持久化保存数据、保存数据是有组织 有结构 二维表的存储方式、以表的形式保存数据 方便操作、提供了丰富的sql语句 操作数据
MySQL
MySQL是一个关系型数据库管理系统
前世:由瑞典[MySQL AB](https://baike.baidu.com/item/MySQL AB/2620844) 公司开发
今生:属于 Oracle 旗下产品。
体积小,速度快,总体拥有成本低,招人成本低~
MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。
-
前端(页面:展示,数据!)
-
后台(链接点:链接数据库,JDBC,链接前端(控制视图跳转,和给前端传数据))
-
数据库(存数据:Txt,Excel,word)
必须学好数据库
操作系统,数据结构和算法,离散数学,数字电路,体系结构,编译原理 高级程序猿
3、数据库分类
关系型数据库:
MySQL | oracle公司 | 中型的、免费的、开源的 |
---|---|---|
Oracle | oracle公司 | 大型的、收费的 java |
DB2 | IBM公司 | 大型的、收费的 |
SQLServer | 微软公司 | 大型的、收费的 |
SQL lite | D.RichardHipp公有项目 | 小型的、免费的 |
- 通表和表之间,行和列之间的关系进行数据的存储,考勤表 ,学员信息表…
非关系型数据库:
- Redis,MongDB ,Hbase,nosql
- 非关系型数据库,对象存储,通过对象自身的属性来决定。
4、mysql几组相关的概念
数据库db、数据库系统dbs、数据库管理员dba、数据库管理系统dbms、
1、数据库(db):存储数据的仓库,保存在本地的文件,按照二维表的存储方式,用户可以很方便的对里面的数据进行crud增删改查等操作
2、数据库系统(dbs):由数据库管理系统、数据库、数据库管理员组成数据库系统
3、数据库管理员(dba):管理和维护数据库的专业人员,一般都是经验老到的专业人员
4、DBMS(数据仓库管理系统)
- 数据库的管理软件,科学有效的管理我们的数据。维护和获取数据;
- 是一个大型的、可以操纵的管理软件,管理员可以操作管理系统对里面的数据库进行管理和维护等操作。在网上下载的 mysql、oracle都是数据库管理系统
mysql指的数据库管理系统 , 管理员通过数据库管理系统去管理和维护数据库
mysql 数据库管理系统 一个软件软件可以创建很多个数据库 一个数据库 创建很多的表 一个表可以添加很多条数据
5、安装
- 下载 ,解压
- 配置环境变量
- 新建my.ini 配置ini文件
[mysqld]
#目录写成安装的目录
port=3306
basedir=C:/Program Files/MySQL/MySQL Server 5.7/
datadir=C:/ProgramData/MySQL/MySQL Server 5.7/Data
skip-grant-tables
号 | 参数名称 | 说明 |
---|---|---|
1. | port | 表示 MySQL服务器的端口号 |
2. | basedir | 表示 MySQL的安装路径 |
3. | datadir | 表示 MySQL数据文件的存储位置,也是数据表的存放位置 |
4. | default-character-set | 表示服务器端默认的字符集 |
5. | default-storage-engine | 创建数据表时,默认使用的存储引擎 |
6. | sql-mode | 表示SQL模式的参数,通过这个参数可以设置检验SQL语句的严格程度 |
7. | max_connections | 表示允许同时访问MySQL服务器的最大连接数。其中一个连接是保留的,留给管理员专用的 |
8. | query_cache_size | 表示查询时的缓存大小,缓存中可以存储以前通过SELECT语句查询过的信息,再次查询时就可以直接从缓存中拿出信息,可以改善查询效率 |
9. | table_open_cache | 表示所有进程打开表的总数 |
10. | tmp_table_size | 表示内存中每个临时表允许的最大大小 |
11. | thread_cache_size | 表示缓存的最大线程数 |
12. | myisam_max_sort_file_size | 表示 MySQL重建索引时所允许的最大临时文件的大小 |
13. | myisam_sort_buffer_size | 表示重建索引时的缓存大小 |
14. | key_buffer_size | 表示关键词的缓存大小 |
15. | read_buffer_size | 表示 MyISAM表全表扫描的缓存大小 |
16. | read_rnd_buffer_size | 表示将排序好的数据存入该缓存中 |
17. | sort_buffer_size | 表示用于排序的缓存大小 |
-
启动管理员模式运行命令
-
安装mysql服务
-
初始化数据库文件
-
启动mysql,进去修改密码 mysql -u root -p 回车 在输入密码
-
进入mysql通过命令行(语句后要加分号)
-
注释掉ini中的跳过密码
开启和关闭mysql服务 1、mysql服务没有开启是登不上mysql的 2、代码开启和关闭 开启: net start mysql 关闭: net stop mysql 以管理员运行黑窗口 3、删除服务 sc delete 服务名
6、安装SQLYog
第三方可视化工具
1、使用黑窗口操作mysql非常不方便,可以使用第三方可视化工具去连接mysql
navicat
sqlyog
2、sqlyog如何使用
无需安装,直接解压
sql链接数据库
mysql -uroot -p --链接数据库
show databases; --查看所有数据库
use school --切换数据库名use
Database changed 成功
show tables; --查看数据库中所有的表
describe student; --显示数据库总所有表的信息
create database db --新建一个数据库
exit; --退出链接
7、SQL的简介和分类
数据库 xxxx 语言 CRUD增删改查
DDL D定义 create 创建 、 drop 删除
DML M操作 insert 插入 、 delete 删除 、 update 更新
DQL Q查询 select 查询
DCL C控制 grant、 revoke
sql:结构化查询语言,是一种特殊的目的的编程语言,可以被关系型数据库识别
1、 DDL 数据定义语言:对数据库的创建和删除 以及对数据库表的创建删除和修改 关键字:create、drop
2、 DML 数据操作语言:对数据库表中数据的增 删 改 关键字:insert、delete、update
3、 DQL 数据查询语言:对数据库表中数据 查询 关键字:select
4、 DCL 数据控制语言:指定用户 分配权限 关键字:grant、revoke
5、 事务
8、数据的列和类型
数值
-
tinyint 十分小的数据 1个字节
-
smallint 比较小的数据 2个字节
-
mediumint 中等大小的数据 3个字节
-
int 常用 标准的整数 4个字节
-
bigint 比较大的数据 8个字节 对应long
-
float 浮点数 4个字节
-
double 浮点数 8个字节 double(n,m) n代表整数+小数的位和 m代表小数位
-
decimal 字符串形势的浮点数 金融计算,一般使用 decimal (十进制的)
字符串
- char 字符串固定大小的的 0~255 定长的 节省时间 效率高
- varchar 可变字符串 6~65535 常用的变量 对应String 伸缩的 节省空间
- tinytext 微型文本 2的8次方-1
- text 文本串 2的16次方-1 保存大文本
时间日期
-
date YYYY-MM-DD ,日期格式 年月日
-
time HH;mm :ss ,时间格式 时分秒
-
datetime YYYY-MM-DD HH;mm :ss 最常用的时间格式
-
timestamp 时间戳 , 1970.1.1 到现在的毫秒数!也比较常用
-
year 年份表示
-
datetime和timestamp的区别:
最大值不同:
datetime最大值 9999-12-31 23:59:59 timestamp 最大值时间 2038年
默认值不同: datetime默认值是null,时间戳的默认值是当前的系统时间
null
- 没有值,未知
- ==注意不要使用NULL进行运算,结果为NULL
常用
int 常用 标准的整数 4个字节 没有boolean类型 使用int类型 0和1
decimal 字符串形势的浮点数 金融计算,一般使用 decimal (十进制的)
varchar 可变字符串 6~65535 常用的变量 对应String
text 文本串 2的16次方-1 保存大文本
datetime YYYY-MM-DD HH;mm :ss 最常用的时间格式
timestamp 时间戳 , 1970.1.1 到现在的毫秒数!也比较常用
9,数据库的字段属性(重点)
Unsigned:
- 无符号的整数
- 声明了该列 不能声明为负数
zerofill:
- 0填充的
- 不足的位数,使用0来填充 ,int(3),5–005
自增:increment
-
通常理解为自增,自动在上一条记录的基础上+1(默认)
-
通常用来设计唯一的主键 index ,必须是整数类型
-
可以通过自定义设计主键的 起始值(初始值) 和 步长(自增量)
非空: NULL NOT NULL
- 假设设置为 not not null ,如果不给它赋值,就会报错!
- null ,如果不填写,默认就是null
默认:
- 设置默认值
- sex,默认值为 男 ,如果不知道,则会有默认的值
10、数据表的类型
InnoDB 默认使用 5.7 8.0 版本使用
MyISAM 早些年使用的 5.5以上版本使用
MyISAM | InnoDB | |
---|---|---|
事务支持 | 不支持 | 支持 |
数据行锁定 | 不支持 | 支持 |
外键约束 | 不支持 | 支持 |
全文索引 | 支持 | 不支持 |
表空间的大小 | 较小 | 较大,约为MyISAM的2倍 |
常规使用操作
- MyISAM 节约空间,速度较快
- InnoDB 安全性高,事务的处理,多表用户操作
在物理上存在的位置
所有的数据库文件都存在在data目录下,一个文件就对应一个数据库
本质还是文件的存储
MySQL 引擎在物理文件上的区别
- InnoDB 在数据库表中只有一个*.frm文件
- MyISAM 对应文件
- *.frm 表结构的定义文件
- *. ibd
- *.MYD 数据文件(data)
- *.MYI 索引文件(index)
设置数据库表的字符集编码
CHARSET=utf8
不设置的话,会是mysql默认(Latin1)的字符集编码~(不支持中文!) 别称是 ISO8859-1 字符集
11、SQL约束
1、什么是约束?
就是给表添加一些限制,让一些错误的数据不能够添加进来 ,也就是为了保证数据的完整性
3、约束
1、主键约束 primary key
2、非空约束 not null
3、唯一约束 unique
4、默认值约束 default
5、外键约束 foreign key
6、去重 distinct
主键约束 primary key
1、关键字primary key
2、设置主键约束目的就是确保每条数据的唯一性,设置了主键之后,该字段不能为空,并且不能重复
3、主键一般是附加项,以*id命名 user uid user_id
4、每次去维护主键非常麻烦,可以将主键交给mysql自动去维护,设置主键自增auto_increment
规则:
1、必须是int类型的主键
2、默认值是1
3、每次在最大值上自增1
4、已经出现过的主键不会再出现
其他约束
1、唯一约束unique:设置字段不能重复,没有主键约束能力那么强,还是可以为空的,一般用来约束邮箱、手机号、账号
2、非空约束 not null: 设置字段不能为空
3、默认值约束default: 字段没有添加值,自动使用默认值填充,添加了值,就会覆盖默认值 ,default 关键字添加默认值
/*
1、sql约束 给表添加限制
2、主键约束 primary key
3、非空约束 not null
4、唯一约束 unique
5、默认值约束 default
6、主键约束
设置主键的目的就是保证每一条数据的唯一性
设置了主键之后,该字段不能为空,并且不能重复
主键一般都是附加项,取名 *id 或者 表名_id
设置主键之后,每次都要维护主键,比较麻烦,可以
把主键交给mysql进行维护,设置主键自增auto_increment
主键自增的特点:
1、整数类型才能设置主键自增
2、初始值是1
3、每次在最大值的基础上自增1
4、已经出现过的主键不会在出现
7、唯一约束:
约束能力没有主键那么强,设置了唯一还可以为空
一般用来约束 账号、邮箱、手机号...
8、非空约束:
约束不能为null
9、默认值约束:
字段没有添加值,使用默认值填充,添加了值会覆盖默认值
*/
-- 1、测试主键
create table t2(
t2 int primary key,
tname varchar(20)
);
insert into t2 values(2,'张三');
-- 报错 主键不能重复
insert into t2 values(2,'李四');
-- 报错 主键不能为空
insert into t2(t2,tname) values(null,'王五');
-- 2、测试主键自增
create table t3(
tid int primary key auto_increment,
tname varchar(20)
);
-- 初始值1
insert into t3 values(null,'张三三');
-- 添加的主键3
insert into t3 values(3,'李四四');
-- 添加主键是4
insert into t3 values(null,'王五五');
-- 删除主键为4的数据
delete from t3 where tid = 4;
-- 添加主键是5
insert into t3 values(null,'王五五');
-- 清空表
-- delete from 表名
-- truncate table 表名
delete from t3;
-- delete清空表,主键自增还会在最大值的基础上自增1
insert into t3 values(null,'王五五');
truncate table t3;
-- truncate清空表, 主键自增从1开始
insert into t3 values(null,'王五五');
-- 3、测试非空、唯一、默认值约束
create table `t4`(
tid int primary key auto_increment,
tname varchar(20) unique,
-- 使用反引号`` 将关键字转成普通字符
`password` varchar(20) not null,
hobby varchar(20) default '唱跳'
);
insert into t4 values(1,'小花','123456','吃饭');
-- 测试tname唯一 报错
insert into t4 values(2,'小花','1234561','睡觉');
-- 测试password 不能为空 报错
insert into t4 values(3,'大花',null,'打豆豆');
-- 测试默认值 使用默认值填充
insert into t4(tid,tname,`password`)
values(4,'豆豆','123');
-- hobby添加为null
insert into t4 values(null,'小豆豆','1234',null);
-- default 使用默认值填充
insert into t4 values(null,'小豆豆1','12341',default);
12、索引
索引是MySQL高效获取数据的 数据结构
- 主键索引 primary key
- 唯一标识不可重复,只能有一个列作为主键
- 唯一索引 unique key
- 不是唯一的,只是避免重复的列出现 (多个列都可以标记成唯一索引)
- 常规索引 key 或者 index
- 默认的,可以使用index 或者key 来定义
- 全文索引 FullText
- 在特定的数据库引擎下才有,以前只有MyISAM才有
- 作用是快速定位数据
--索引的使用 :在创建表的时候给字段添加索引 或者 创建完毕后,增加索引
show index from `表名`; --显示所有的索引信息
alter table `库名.表名` add fulltext index `索引名`(列名); --能加一个全文索引(没用,只是查找的时候会变快)
explain select * from `表名`; --非全文索引(常规索引)
explain select * from `表名` where match(`列名`)against ('查询内容'); -- 分析SQL的执行状况 31集百万数据
innoDB 默认的索引数据结构:Btree
结尾再给小伙伴们推荐一篇文章 (建议阅读1小时)MySQL背后的数据结构