一、初识数据库之MySQL

学习数据库首先要明白什么是数据库?为什么要学习数据库?带着这两个问题看这篇文章希望能帮助到小伙伴们。

1、为什么学习数据库

  1. 岗位需求
  2. 现在世界,大数据时代~ 得数据者的天下。
  3. 被迫需求:存数据
  4. 数据库是所有软件体系中的的核心存在 DBA

2、什么是数据库

  1. 数据库(DB,DataBase)
  2. 概念:数据仓库,软件,安装在操作系统(window,linux,mac)之上 !! SQL
  3. 作用:存储数据,管理数据
  4. 理解:用于持久化保存数据的管理软件、保存数据的技术:

将数据保存到内存中: ① 变量 ② 对象 ③ 数组 ④ 集合 特点:易失性
持久化保存技术:IO 特点:可操作性比较差 效率低

  1. 特点:可以持久化保存数据、保存数据是有组织 有结构 二维表的存储方式、以表的形式保存数据 方便操作、提供了丰富的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、数据库分类

关系型数据库:

MySQLoracle公司中型的、免费的、开源的
Oracleoracle公司大型的、收费的 java
DB2IBM公司大型的、收费的
SQLServer微软公司大型的、收费的
SQL liteD.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、安装

  1. 下载 ,解压
  2. 配置环境变量
  3. 新建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表示用于排序的缓存大小
  1. 启动管理员模式运行命令

  2. 安装mysql服务

  3. 初始化数据库文件

  4. 启动mysql,进去修改密码 mysql -u root -p 回车 在输入密码

  5. 进入mysql通过命令行(语句后要加分号)

  6. 注释掉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以上版本使用

MyISAMInnoDB
事务支持不支持支持
数据行锁定不支持支持
外键约束不支持支持
全文索引支持不支持
表空间的大小较小较大,约为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背后的数据结构

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值