目录
关于MySQL数据库的安装与环境变量的配置信息这里暂时掠过,直接开始介绍他的基础功能和方法
索引: 一种查询优化技术,预先存储查询对应的内容,可以提升查询效率 实现的本质是要预先存储一些额外数据,牺牲存储空间提升查询效率
MySQL存储引擎(数据的存储的实现方式,不同的存储引擎适合不同的场景)
基本知识:
数据库的定义:数据库就是对大量数据进行存储和管理(crud-增删改查)
数据库的分类:关系型数据库和非关系型数据库
关系型数据库
典型代表:MySQL,Oracle,SQL server
特点:通过表产生关联关系,每个表中都存储结构化数据。支持SQL结构化查询语言
非关系型数据库
典型代表:redis,mongodb
特点:存储管理非结构化数据库,高性能,适应分布式
SQL语言分类
数据定义语言:DDL--Data Design Language(create\drop\alter\rename)
数据控制语言:DML--DataManageLanguage(insert\delete\update\select)
MySQL数据库的特点和功能
MySQL是一种广泛使用的开源关系型数据库管理系统(RDBMS),具有以下优点和功能:
-
易用性:MySQL具有简单易学的特点,提供了直观的命令和语法,使得开发人员可以快速上手并进行数据库操作。
-
高性能:MySQL通过优化的查询引擎和索引机制,能够快速处理大量的数据。它支持高效的并发处理,能够处理高负载的应用场景。
-
可扩展性:MySQL支持水平和垂直两种扩展方式。水平扩展通过添加更多的服务器来分担负载,垂直扩展通过增加硬件资源来提升性能。
-
稳定性和可靠性:MySQL经过广泛的测试和生产环境验证,已被证明在各种应用场景下具有良好的稳定性和可靠性。
-
安全性:MySQL提供了多层级的安全措施,包括基于角色的访问控制、数据加密、用户身份验证等,以保护数据库的安全性。
-
丰富的功能:MySQL提供了丰富的功能集,包括事务支持、复制和故障恢复、存储过程和触发器、全文搜索、GIS和空间数据处理等。
-
广泛的应用支持:MySQL被广泛应用于各种不同规模和类型的应用中,包括Web应用、企业级应用、数据仓库、移动应用等。
关于MySQL数据库的安装与环境变量的配置信息这里暂时掠过,直接开始介绍他的基础功能和方法
创建数据库语句
create database 数据库名;
create database if not exists 数据库名;
指定编码格式
create database if not exists 数据库名 charset = 编码格式(utf8,gbk,ascll);
create database if not exists 数据库名 character set 编码格(utf8,gbk,ascll);
删除一个数据库
drop database 数据库名;
使用一个数据库
use 数据库名;
表相关
查询当前数据库所有表
show tables
创建表
create table 表名 (列1 数据类型 约束, 列2 数据类型 约束, 列3 数据类型 约束, .....);
查看表信息
desc 表名;
删除表
drop table 表名;
修改表名
rename table 原始表名 to 新表名;
alter table 表名
添加列
add 列名 类型 约束条件;
删除列
drop 列名;
修改列数据
change 原始列名 新列名 类型 约束条件
数据相关
查询数据
select * from 表名;
select 列1,列2 from 表名;
select * from 表名 where 条件;
插入数据
方式1
全列插入
需要给每一列赋值:insert into 表名 values(列1,列2,列3......);
插入多行:insert into 表名 values(),(),(),.....;
方式2
缺省插入1
需要指定列指定值:insert into 表名(列1,列2,列3......) values (值1,值2,值3......) 插入多行:insert into 表名(列1,列2,列3......) value(),(),();
缺省插入2:只能写入一行-----insert into 表名 set 列1 = 值1,列2 = 值2......;
删除数据
delete from 表名 where 条件;
数据库列约束
主键
主键(primary key): 一个表中必须有一列是主键, 主键列默认不能重复,一般都是有一个独立的列id
定义主键:可以之间在列类型之后使用primary key,也可以在定义完所有列之后单独使用primary key(列名)
非空:not null
唯一:unique
自动增长:auto_increment
默认值:default
外键
建表时添加外键
格式:create table 表名 (列......,constraint 外键名 foreign key (外键列明) references 主表(主键)on update cascade on delete cascade);
建表后添加外键
alter table 表名 add constraint 外键名 foreign key
外键的值在主表中必须存在
删除外键
alter table 表名 drop foreign key 外键名;
外键修饰符选项
RESTRICT:拒绝
加入有外键使用到主表中的主键,在修改删除主键时外键是不能操作的
CASCADE:级联
删除修改主表时,外键对应的内容直接删除或更新
进阶查询
基础使用
select * from 表名 ; 查询所有行的所有列
select 列名1,列名2,......from 表名; 查询指定的列的所有行
select 列名1,列名2,......from 表名 where 条件; 查询部分行的部分列
别名
select 列名1 as 别名,列名2 as 别名,...... from表名 where 条件;
针对查询到的列起别名,对数据库不产生任何影响
应用方面:多表查询,有共同的列表
条件(where)
比较运算符: =,!=,<>,<,>,<=,>=
多个条件
and: 并且
or: 或者
成员
in( 在其中一个)
not in(不在其中任何一个)
模糊查询(like)
like '%查询的内容%'
_代表一个字符
%代表n个字符
判空(null)空字符串不是空
is null:是空
is not null:非空
数据库中列的数据类型
数字
int:整数(4个字节)
bigint:长整数( 8个字节)
float:浮点数(单精度4个字节)
double:浮点数(双精度8个字节)
decimal:高精度(一般用于需要精确小数位数)
字符串
可变长度:varchar()
长度固定:char
长文本:text
bool:0,1
时间日期
date
time
datetime
timestamp
enum
罗列所有可能值到括号里面
enum(值1,值2,值3,值4) default 值1;
常用技术
聚合函数
max() :求最大值
min(): 求最小值
avg(): 求平均值
sum(): 求和
count(任意列名): 统计行数
系统函数调用
user(): 当前用户
version():当前数据库版本
database(): 当前数据库
current_time(): 当前日期
current_time(): 当前时间
current_timestamp: 当前时间日期(时间戳)
排序
order by 列名 排列规则,列名 排列规则
asc从小到大顺序(默认)
desc从大到小逆序
分组: 针对查询结果进行分组(group by)
select count(*),列名 from 表名 where 条件
having 指的是针对分组结果进行处理
having 列名条件
select gender,count(*) from teachers where id > 4 group by gender having gender in ('男', '女');
分页( limit)
方式一:显示前n个 limit n;
方式二:limit n, m;
从索引n开始显示m个,第一个索引是起始位置
起始页和页面大小的关系公式:显示page页,每页显示size条数据,起始页数 = limit(page-1)*size, size
去重( distinct):去重某一列
关联查询
嵌套查询(一个查询的结果是另一个查询的内容)
连接查询
笛卡尔连接:组合两个表中的所有数据(一个有m行数据,一个有n行数据,最终有m*n行数据)
内连接(inner join )
inner join 表名 on 连接条件
select students.name as 学生姓名,teachers.name as 教师姓名from students inner join teachers on students.id = teachers.id;
左外连接( 内连接结果+左表内容(左侧补null))
右外连接(内连接结果+右侧内容(右侧补null))
全连接 ( 左外连接 union 右外连接)
MySQL扩展知识
视图: 一张虚拟表
特点: 方便查询, 修改表等同于操作真实数据
函数与存储过程( 可以自定义数据库级别)
函数: 经过计算返回一个值, 需要指定形参和返回值
select 函数名(实参)
存储过程( 一套SQL操作,没有返回值)
call 过程名(实参)
都是存储在服务器上的,客户端不需要关注具体实现可以提升数据的安全
索引: 一种查询优化技术,预先存储查询对应的内容,可以提升查询效率
实现的本质是要预先存储一些额外数据,牺牲存储空间提升查询效率
索引类型:主键索引,唯一索引,普通索引
何时定义索引:索引不是创建越多越好,修改频率高不要创建索引,修改频率低创建索引
如果表的修改频率非常高,不适合创建索引
如果表的查询频率非常高,几乎不修改,适合创建索引
索引方法
BTREE(适合大数据量,范围比较)
HASH(适合小数据量,适合精准的等值比较)
事务(mysql存储引擎innoDB支持事务)
事务特性(ACID原则)
原子性:事务被视为是一个不可再分的整体,要么全部成功,要么全部失败
隔离性:各个事务并发执行时,每个事务都应该相互不影响
持久性:一旦提交,则执行完毕,永久改变
一致性:事务执行前后数据库都必须保持一致
事务的定义: MySQL数据库对应的一系列事务操作要么全部成功然后提交,要么全部执行失败然后执行回滚roll back
成功:commit
失败:roll back
mysql终端默认自动提交
取消自动提交:set autocommit = 0;
设置自动提交:set autocommit = 1;
事务相关
开启事务(默认不会自动提交):start transaction
结束事务: commit(成功提交)或者 rollback( 失败回滚)
MySQL存储引擎(数据的存储的实现方式,不同的存储引擎适合不同的场景)
存储引擎的设置语句
create table ( 列1 数据类型 约束条件,列2 数据类型 约束条件,......)engine = 引擎名字;
MySQL常用引擎
innoDB(Mysql5.7版本默认)
特点
支持事务
支持行级别锁定,阻塞
支持外键
综合能力强,适用于大多数场景
使用后缀为frm文件存储表结构
使用后缀为ibd文件存储内容
MyISAM
特点
查询,排序速度非常快
不支持外键
memory(使用内存)
特点
读写内存速度最快
但是不能持久化(不能在本地保存)
CSV
特点
使用逗号隔开
适合导入导出操作
不支持auto_increment
不允许数据为空