今日新篇章
【MySQL】
【主要内容】
-
数据库相关概念
-
数据库和操作工具的安装
-
创建数据库、表、视图、索引
-
查询、新增、删除、修改数据
-
条件查询
-
数据库的高级查询
-
MySQL的常用函数
-
MySQL版本新特性
-
MySQL索引优化
-
MySQL事务
【学习目标】
1. 数据库的相关概念
1.1 数据
1,定义:描述事物的符号
2,表达形式:多种表现形式:文本,图形,音频,视频
1.2 数据库(Database, DB)
1,粮库 车库
2,存放数据的仓库 存放在计算机中,按照一定格式存放 可为用户共享
1.3 数据库管理系统(Database Management System, DBMS)
1,如何科学的组织和存储数据,如何高效的获取和维护数据,靠数据库管理系统完成
2,Oracle MySQL SQL Server(微软) DB2 FoxPro,Access
1.4 数据库应用程序(DBAS)
1,在数据库管理系统基础上,使用数据库管理系统的语法,开发的直接面对最终用户的应用程序
2,学生管理系统、人事管理系统、图书管理系统
1.5 数据库管理员(Database Administrator, DBA)
1,数据库管理系统的操作者
1.6 最终用户
1,数据库应用程序的使用者
1.7 数据库系统
1,数据库+数据库管理系统+数据库应用程序+最终用户
1.8 数据库的发展阶段
1,网状数据库
2,层次数据库
3,关系数据库
采用关系[二维表]结构存储与管理数据
采用结构化查询语言(sql)作为客户端数据库服务器间沟通的桥梁
目前主流的数据库技术
4,对象数据库
1.9 NOSQL数据库
1,Not only sql数据库 泛指非关系数据库。如MongoDB,Redis
2,关系数据库在超大规模和高并发的web2.0纯属动态网站已经显示力不从心,暴露了很多难以克服的问题。Nosql数据库的产生就是为了解决大无框数据集合多重数据种类带来的挑战,尤其是大数据应用难题
1.10 市场上流行的关系型数据库
数据库 厂商
Oracle 甲骨文公司
MySQL MySQL
SQLServer Microsoft
DB2 IBM
Sqlite RichardHipp
2. 数据库相关安装
2.1 准备工作
msi文件:mysql数据库的安装文件
navicat:操作数据库的工具
Navicat:破解navicat的工具
vcredis_x64.exe:安装mysql环境检查的通过的一个工具
2.2 安装mysql
2.2.1 右键安装
2.2.2 读条中
2.2.3 安装主页面
2.2.4 这里选择只安装服务
2.2.5 下一步检查环境【停住,别安装】
上图中环境有问题,说差一个Microsoft Visual C++2013
2.2.6 找到准备文件夹里面的工具包
vcredis_x64.exe ----》双击安装它
2.2.7 到2.2.5步回退一步,再下一步【发现没有问题了-如下】
2.2.8 下一步
2.2.9 执行安装并下一步
2.2.10 下一步
2.2.11 设置root用户的密码
2.2.12 设置安装的服务名
2.2.13 下一步完成配置
2.2.14 执行完成如果全部对钩说明安装成功
2.3 安装navcat
2.3.1 右键以管理员方式运行
2.3.2 安装主页面
2.3.3 下一步
2.3.4 下一步
2.3.5 下一步到结束【安装中】
2.3.6 安装完成
2.4 破解navcat
2.4.1 解压上图的文件
2.4.2 再解压进入
2.4.3 双击运行上面的文件如下
2.4.4 点击patch后
2.4.5 生成注册码并复制这个注册码
2.4.6 打开navcat并点击注册
2.4.7 输入注册码并点击激活
2.4.8 输入注册码并点击激活选择手动激活
2.4.9 按下图操作
2.4.10 检查激活状态
2.4.11 连接mysql
2.5 配置MySQL环境变量
2.5.1 找到mysql的安装目录
2.5.2 复制这个目录地址右键此电脑->属性->高级系统设置
2.5.3 打开环境变量
2.5.4 新建
2.5.5 配置PATH并确定
2.5.6 测试环境变量是否生效
按win+r键输入cmd
输入 mysql -uroot -p123456
3. 数据库相关基础操作
3.1 启动|停止
3.1.1 方式1
3.1.2 方式2
win+r cmd
net start mysql 启动
net stop mysql 停止
3.2 使用root账户登陆
mysql -uroot -p123456
root是默认的用户名—超级管理员
123456是之前我们安装的时候设置的默认密码
3.3 显示所有数据库
show databases;
3.4 默认的几个数据库说明
3.4.1 information_schema
information_schema数据库是MySQL自带的,它提供了访问数据库元数据的方式。什么是元数据呢?元数据是关于数据的数据,如数据库名或表名,列的数据类型,或访问权限等。有些时候用于表述该信息的其他术语包括“数据词典”和“系统目录”。
在MySQL中,把 information_schema 看作是一个数据库,确切说是信息数据库。其中保存着关于MySQL服务器所维护的所有其他数据库的信息。如数据库名,数据库的表,表栏的数据类型与访问权 限等。在INFORMATION_SCHEMA中,有数个只读表。它们实际上是视图,而不是基本表,因此,你将无法看到与之相关的任何文件
3.4.2 mysql
这个是mysql的核心数据库,主要负责存储数据库的用户、权限设置、关键字等mysql自己需要使用的控制和管理信息。不可以删除,如果对mysql不是很了解,也不要轻易修改这个数据库里面的表信息。
3.4.3 performance_schema
mysql 5.5 版本 新增了一个性能优化的引擎: PERFORMANCE_SCHEMA这个功能默认是关闭的:
需要设置参数: performance_schema 才可以启动该功能,这个参数是静态参数,只能写在
my.cnf 中 不能动态修改。
windows里面叫 my.ini文件 C:\ProgramData\MySQL\MySQL Server 5.7 【默认在这个目录】
linux里面叫my.cnf文件
3.4.4 sys
通过这个库可以快速的了解系统的元数据信息
这个库确实可以方便DBA发现数据库的很多信息,解决性能瓶颈都提供了巨大帮助
3.4.5 test
这个库就是一个测试库而已
3.4.6 重要说明
以上的所有默认库。只有、test库能删除,其它的都不要删除
3.5 使用某一个数据库
– 语法
– use <数据库名称>;
– 例如:使用mysql数据库
use mysql;
3.6 修改密码
– 1使用mysql数据库
use mysql;
– 2修改密码命令(将root用户的密码修改为123456)
update mysql.user set authentication_string=PASSWORD(‘123456’) where user='root;
– 3刷新
flush privileges;
3.7 创建用户
3.7.1 命令
CREATE USER ‘username’@‘host’ IDENTIFIED BY ‘password’;
3.7.2 说明
username:你将创建的用户名
host:指定该用户在哪个主机上可以登陆,如果是本地用户可用localhost,如果想让该用户可以从任意远程主机登陆,可以使用通配符%
password:该用户的登陆密码,密码可以为空,如果为空则该用户可以不需要密码登陆服务器
3.7.3 例子
CREATE USER ‘dog’@‘localhost’ IDENTIFIED BY ‘123456’;
CREATE USER ‘pig’@‘192.168.1.101_’ IDENDIFIED BY ‘123456’;
CREATE USER ‘pig’@‘%’ IDENTIFIED BY ‘123456’;
CREATE USER ‘pig’@‘%’ IDENTIFIED BY ‘’;
CREATE USER ‘pig’@‘%’;
3.8 给用户授权
3.8.1 命令
GRANT privileges ON databasename.tablename TO ‘username’@‘host’
3.8.2 说明
privileges:用户的操作权限,如SELECT,INSERT,UPDATE等,如果要授予所的权限则使用ALL
databasename:数据库名
tablename:表名,如果要授予该用户对所有数据库和表的相应操作权限则可用表示,如.*
3.8.3 例子
GRANT SELECT, INSERT ON test.user TO ‘pig’@‘%’;
GRANT ALL ON . TO ‘pig’@‘%’;
GRANT ALL ON maindataplus.* TO ‘pig’@‘%’;
3.8.4 注意
用以上命令授权的用户不能给其它用户授权,如果想让该用户可以授权,用以下命令:
GRANT privileges ON databasename.tablename TO ‘username’@‘host’ WITH GRANT OPTION;
3.9 创建一个数据库
– 创建数据库有两种方式:
– 第一种 语法如下
– 注意:<>里面的内容都是可变的
– create database <数据库名称>;
– 例如
create database whpowernode;
– 第二种 语法如下
– if not exists 创建之前会做check操作,如果数据库名称在MySQL数据库管理系统中不存在才创建
– charset default 为数据库指定默认编码
– create database [if not exists] <数据库名称> default charset <数据库字符集编码>;
– 例如:
create database if not exists whpowernode default charset UTF8;
create database if not exists whpowernode default charset UTF8MB4;
–第三种: create database <数据库名称> [character set utf8];
– UTF8和UTF8MB4区别?
– 绝大多数情况下使用UTF8编码的字符集一个汉字占据3个字符,但是有极少数情况下一个汉字占据4个字符
– 占据4个字符的汉字不能使用UTF8存储,必须使用UTF8MB4存储
– UTF8MB4字符集编码表示一个汉字最多占据4个字符 M Most B Byte
– 注意:创建数据库指定的字符集编码必须跟MySQL数据库里面的my.ini字符集编码保持一致
3.10 修改默认编码[找到my.ini文件]
3.11 删除一个数据库
– 第一种方式 语法:
– drop database <数据库名称>;
– 例如:
drop database whpowernode;
– 第二种方式 语法:
– 删除之前先判断 存在才删除
– drop database if exists <数据库名称>;
– 例如:
drop database if exists whpowernode;
3.12 修改数据库
alter database <数据库名称> character set 新编码名;
3.13 3.13 查看库
– 查询mysql管理系统软件下所有的库:
show databases;
– 查询指定库的详细信息
show create database <数据库名称>;
– 查看当前用户使用的是具体哪个库
select database();
4. 什么是SQL
SQL是一个面向过程的结构化查询语言,全称Struct Query Language 。我们对MySQL做的任何操作(命令)都建立在结构化查询语言中。
SQL由以下四部分组成:DDL、DML、DQL、TCL
4.1 DDL 数据定义语言
全称Data Definition Language,主要用于创建和删除结构。
Ø 1)创建结构相关操作:库、表、视图、索引 create
Ø 2)删除结构相关操作:库、表、视图、索引 drop
Ø 3)改变结构相关操作:库、表、视图、索引 alter
4)查询结构相关操作: 库、表、视图、索引 show
4.2 DML 数据操纵语言
DML对表和视图进行插入、删除、更新相关操作,全称Data Manipulation Language。插入数据关键字:insert
Ø 删除数据关键字:delete
Ø 修改数据关键字:update
4.3 DQL 数据查询语言
对表和视图进行操作,全称: Data Query Language
Ø DQL关键字 select
4.4 TCL 事务控制语言
TCL全称Transaction Control Language,使用事务管理DML操作。
Ø 提交事务关键字 commit;
Ø 回滚事务关键字 rollback;
Ø 开启事务关键字 start transaction;
5. MySQL数据类型
5.1 整数类型
5.2 小数类型
5.3 定点数
浮点型在数据库中存放的是近似值,而定点类型在数据库中存放的是精确值。 decimal(m,d) 参数m是总个数,d是小数位。
5.4 字符串
5.4.1 char、varchar、text区别
char:存储定长数据很方便,CHAR字段上的索引效率级高,必须在括号里定义长度,可以有默认值,比如定义char(10),那么不论你存储的数据是否达到了10个字节,都要占去10个字节的空间(自动用空格填充),且在检索的时候后面的空格会隐藏掉,所以检索出来的数据需要记得用什么trim之类的函数去过滤空格。
varchar:存储变长数据,但存储效率没有CHAR高,必须在括号里定义长度,可以有默认值。保存数据的时候,不进行空格自动填充,而且如果数据存在空格时,当值保存和检索时尾部的空格仍会保留。另外,varchar类型的实际长度是它的值的实际长度+1,这一个字节用于保存实际使用了多大的长度。
text:存储可变长度的非Unicode数据,最大长度为2^31-1个字符。text列不能有默认值,存储或检索过程中,不存在大小写转换,后面如果指定长度,不会报错误,但是这个长度是不起作用的,意思就是你插入数据的时候,超过你指定的长度还是可以正常插入。
5.4.2 实战结论
1、经常变化的字段用varchar;
2、知道固定长度的用char;
3、超过255字节的只能用varchar或者text;
4、能用varchar的地方不用text;
5、能够用数字类型的字段尽量选择数字类型而不用字符串类型,这会降低查询和连接的性能,并会增加存储开销。这是因为引擎在处理查询和连接回逐个比较字符串中每一个字符,而对于数字型而言只需要比较一次就够了;
6、同一张表出现多个大字段,能合并时尽量合并,不能合并时考虑分表
5.5 日期时间类型
MySQL数据类型 含义
date 日期 ‘2021-1-1’
time 时间 ‘12:25:36’
datetime 日期时间 ‘2021-1-1 22:06:44’
timestamp 自动存储记录修改时间
若定义一个字段为timestamp,这个字段里的时间数据会随其他字段修改的时候自动刷新,所以这个数据类型的字段可以存放这条记录最后被修改的时间。
5.6 Logic类型
Logic类型使用bit表示,它只能存储两个值0或者1
5.7 数据类型的属性
6. MySQL表的相关操作DDL
6.1 创建表
6.1.1 语法
create table <表名称>
(
列名称1 数据类型1,
列名称2 数据类型2,
…
列名称n 数据类型n
);
6.1.2 实例创建一个学生表tb_student
create table tb_student(
id int(11),
stu_name varchar(50),
stu_sex bit,
stu_hobby varchar(50),
stu_age smallint
);
– 注意:最后一列没有逗号
– 列与列之间以半角逗号相隔
6.1.3 实例创建一个学生表tb_student并指定编码和存储引擎
create table student(
id int(11),
stu_name varchar(50),
stu_sex bit,
stu_hobby varchar(50),
stu_age smallint
)default charset=UTF8, ENGINE=INNODB;
DEFAULT CHARSET 用于指定表中数据的字符集编码方式
ENGINE 用于指定表的存储引擎
6.2 数据存储的问题
现在我们在数据库中创建了一个表,那么如我们把电脑重启,这个表还在不在呢?
测试结果为 在 那是为什么呢?
原因是当我们创建表个表之后,在我们数据库的文件系统里面就会有一个对应的文件存在
.frm文件:保存了每个表的元数据,包括表结构的定义等;
.ibd文件:InnoDB引擎开启了独立表空间(my.ini中配置innodb_file_per_table = 1)产生的存放该表的数据和索引的文件。
6.3 查看表结构
创建表之后如何查看是否创建成功?可以通过desc命令来查看表结构
– 第一种方式查看表结构
– desc <表名称>;
desc student;
– 第二种方式查看表结构
– show create table <表名称>;
show create table tb_student;
6.4 修改表结构
基本语法如下:alter table <表名称>;
6.4.1 案例1
添加列,例如:向student表新增加一列stu_height学生身高
– 语法如下:
– alter table <表名称> add column <列名称> <数据类型>;
alter table student add column stu_height int(11);
– 查看表结构
desc student;
6.4.2 案例2
删除某一个列,例如:删除student表中的学生身高
– 语法如下:
– alter table <表名称> drop column <列名称>;
alter table student drop column stu_height;
6.4.3 案例3
修改列名称和数据类型:例如修改stu_sex 为 student_sex 数据类型修改为 varchar(30)
– 语法如下:
– alter table <表名称> change column <原列名称> <新列名称> <数据类型>;
– 修改stu_sex 为 student_sex 数据类型修改为 varchar(30)
alter table student change column stu_sex student_sex varchar(30);
6.4.4 案例4
修改某一列的数据类型,例如:将学生年龄修改为int类型
– 语法如下:
– alter table <表名称> modify column <原来的列名称> <新的数据类型>;
– 例如:
alter table student modify column stu_age int(11);
6.5 删除表
6.5.1 直接删除
– drop table <表名称>;
drop table EMP_bak;
6.5.2 删除之前先判断表是否存在
– drop table if exists <表名称>;
– 刪除之前先做校验,表在数据库中存在才删除
drop table if exists EMP_bak;
6.6 显示当前库的所有表
show tables;