1.什么是数据库?什么是数据库管理系统?什么是SQL?他们之间的关系是什么?
数据库(DB)是一种特殊的信息管理系统,它以某种组织方式存储数据,使得用户可以更容易地查找和使用特定的信息。数据库可以包含任意类型的数据,包括文本、数字、图像、音频和视频等。它们还可以包含其他数据库,以及数据的关联和索引。
数据库管理系统(DBMS)是一种软件,可以创建、维护和使用数据库。它为用户提供了一个用于管理数据库的统一界面。DBMS可以创建、修改和删除数据库,控制访问数据库中的数据,更新数据库以及检索数据库中的信息。此外,它还可以确保数据库的安全性,提供不同的视图来查看数据,以及提供数据库的统计信息。
SQL(Structured Query Language)是一种用于访问和操作关系数据库管理系统(RDBMS)的标准语言。它是一种面向关系数据库管理系统的数据操作语言,可以用于检索和更新数据库中的数据,以及管理数据库的结构和索引。SQL有助于更容易地管理和使用数据,并且可以提高数据库系统的性能。
三者之间的关系:DBMS用来执行SQL语句的,然后操作DB数据库。
表:数据库当中最基本的单元是表:table,数据库当中是以表格的形式表示数据的。
任何一张表都有行和列:行(row):被称为数据/记录。
列(column):被称为字段。
2.SQL语句的分类
SQL语句有很多,可以分为:DQL,DML,DDL,TCL,DCL。
分类 | 解释 | 例如 |
DQL | 数据查询语言(凡是带有select关键字的都是查询语句) | select |
DML | 数据操作语言(凡是对表当中的数据进行增删改的都是DML) | insert,delete,update |
DDL | 数据定义语言,主要操作的是表的结构。不是表中的数据。 | create,drop,alter |
TCL | 事务控制语言 | commit,rollback |
DCL | 数据控制语言 | 授权grant、撤销权限revoke. |
3.MySQL常用命令:
注意:命令不区分大小写,都行。\c用来终止一条命令的输入。所有的SQL语句以“;”结尾
查询两个字段使用逗号隔开“,”,在所有的数据库当中,字符串统一使用单引号括起来,单引号是标准。
数据库中的null代表什么也没有,它不是一个值,不能使用等号衡量
命令 | 作用 |
source | 可以执行.sql文件 |
exit | 退出mysql : |
select version(); | 查看mysql数据库的版本号 |
show databases; | 查看mysql中有哪些数据库 |
use 数据库名; | 选择使用某个数据库 |
create database 数据库名; | 创建数据库 |
select database(); | 查看当前使用的是哪个数据库 |
show tables | 查看某个数据库下有哪些表 |
select * from 表名; | 查看表中的数据 |
desc 表名; | 查看表的结构 |
as | 查询的列起别名 |
is null 为 null(is not null 不为空) | 查询是否为null |
between … and … | 范围 |
or | 或者 |
and | 并且 |
in | 包含 |
not | 取非 |
like | 模糊查询,支持%或下划线匹配 |
order by sal(desc); | 升序/降序 |
distinct | 去除重复记录 |
union | 合并查询结果集 |
limit startIndex, length | 将查询结果集的一部分取出来。通常使用在分页查询当中(limit (pageNo-1)*pageSize , pageSize) |
now() | 获取系统当前时间 |
delete | 删除表中的数据 |
truncate | 删除数据,不支持回滚 |
drop table 表名 | 删除表 |
4.单行处理函数
特点:一个输入对应一个输出
lower | 转换小写 |
upper | 转换大写 |
substr | 取子串 |
concat(str1,str2) | 符串的拼接 |
length | 取长度 |
trim | 去空格 |
str_to_date | 将字符串转换成日期 |
date_format | 格式化日期 |
format | 设置千分位 |
case..when..then..when..then..else..end | |
round | 四舍五入 |
rand() | 生成随机数 |
ifnull (,) | 可以将 null 转换成一个具体值 |
5.分组函数
特点:输入多行,最终输出一行。
count | 计数 |
sum | 求和 |
avg | 平均值 |
max | 最大值 |
min | 最小值 |
注意:1.分组函数自动忽略NULL;
2.分组函数不能够直接使用在where子句中
6.分组查询
在实际的应用中,可能有这样的需求,需要先进行分组,然后对每一组的数据进行操作
注意:分组函数在使用的时候必须先分组之后才能使用
select
...
from
...
group by
...
sql语句执行顺序
select
...
from
...
where
...
group by
...
having(和group 搭配使用)
....
order by
...
limit...
------------------------------------------
1. from
2. where
3. group by
4. select
5. order by
6.limit
# where执行的时候,还没有分组。所以where后面不能出现分组函数
7.连接查询
多张表联合起来查询数据,被称为连接查询
连接查询的分类
内连接:没有主次关系
等值连接 inner join ... on 条件是等量关系
非等值连接 inner join ... on 条件不是一个等量关系
自连接 inner join ... on 一张表看做两张表
外连接:有主次关系
左外连接(左连接)left join ...on 条件
右外连接(右连接)right join ...on 条件
笛卡尔积现象: 当两张表进行连接查询,没有任何条件限制的时候,最终查询结果条数,是两张表条数的乘积。
怎么避免笛卡尔积现象?
连接时加条件,满足这个条件的记录被筛选出来。
给表起别名。很重要。效率问题。
多张表怎么连接
语法:
select
...
from
a
join
b
on
a和b的连接条件
join
c
on
a和c的连接条件
right join
d
on
a和d的连接条件
一条SQL中内连接和外连接可以混合。都可以出现!
8.子查询
select语句中嵌套select语句,被嵌套的select语句称为子查询
select
..(select).
from
..(select).
where
..(select).
9.mysql中的数据类型
类型 | 说明 |
varchar(最长255) | 可变长度的字符串,比较智能,节省空间,会根据实际的数据长度动态分配空间 |
char(最长255) | 定长字符串 |
int(最长11) | 整数型 |
bigint | 长整型 |
float | 单精度浮点型数据 |
double | 双精度浮点型数据 |
date | 短日期类型 |
datetime | 长日期类型 |
clob | 字符大对象,超过255个字符的都要采用CLOB字符大对象来存储 |
blob | 二进制大对象,专门用来存储图片、声音、视频等流媒体数据 |
decimal | 用于存储有效小数位数的固定数值 |
timestamp | 时间戳 |
10,常用的MySQL语句
插入: insert into 表名(字段名1,字段名2,字段名3...) values(值1,值2,值3);
创建表: create table 表名(字段1 数据类型,字段2 数据类型);
删表:drop table 表名
删除数据:delete from 表名 where 条件;
修改: update 表名 set 字段名1=值1,字段名2=值2,字段名3=值3... where 条件;
11.约束
非空约束:not null
唯一性约束: unique
主键约束: primary key 任何一张表都应该有主键,没有主键,表无效
外键约束:foreign key
12.存储引擎
存储引擎是MySQL中特有的一个术语,
存储引擎是一个表存储/组织数据的方式。
不同的存储引擎,表存储数据的方式不同。
show create table 表名
ENGINE来指定存储引擎。
CHARSET来指定这张表的字符编码方式。
select version(); 查看sql版本
show engines \G 查看mysql支持哪些存储引擎
InnoDB存储引擎(默认):支持事务,支持数据库崩溃后自动恢复机制,特点是:非常安全
MyISAM存储引擎(不支持事务机制,安全性低) 特征:
使用三个文件表示每个表:
格式文件 — 存储表结构的定义(mytable.frm)
数据文件 — 存储表行的内容(mytable.MYD)
索引文件 — 存储表上索引(mytable.MYI):索引是一本书的目录,缩小扫描范围,提高查询效率的一种机制。
可被转换为压缩、只读表来节省空间
13.事务
一个事务就是一个完整的业务逻辑,是一个最小的工作单元。
只有DML语句才会有事务,
事务:就是批量的DML语句同时成功,或者同时失败!
InnoDB存储引擎:提供一组用来记录事务性活动的日志文件
提交事务
清空事务性活动的日志文件,将数据全部彻底持久化到数据库表中。
提交事务标志着,事务的结束。并且是一种全部成功的结束。
回滚事务
将之前所有的DML操作全部撤销,并且清空事务性活动的日志文件
回滚事务标志着,事务的结束。并且是一种全部失败的结束。
提交事务:commit; 语句
回滚事务:rollback; 语句(回滚永远都是只能回滚到上一次的提交点!)
事务对应的英语单词是:transaction
执行这个命令:start transaction;
事务包括4个特性:
A:原子性
说明事务是最小的工作单元。不可再分。
C:一致性
所有事务要求,在同一个事务当中,所有操作必须同时成功,或者同时失败,
以保证数据的一致性。
I:隔离性
A事务和B事务之间具有一定的隔离。
教室A和教室B之间有一道墙,这道墙就是隔离性。
A事务在操作一张表的时候,另一个事务B也操作这张表会那样???
D:持久性
事务最终结束的一个保障。事务提交,就相当于将没有保存到硬盘上的数据
保存到硬盘上!
隔离性:
读未提交:read uncommitted
读已提交:read committed
可重复读:repeatable read
序列化/串行化:serializable
查看隔离级别:SELECT @@tx_isolation
设置隔离级别: set global transaction isolation level 隔离级别;
14.索引
MySQL支持多种类型的索引,其中包括主键索引、唯一索引、全文索引和复合索引等。主键索引用于定义数据表中的唯一行,唯一索引用于确保每一列的值都是唯一的,全文索引可以帮助用户更快地检索文本字段中的信息,而复合索引则是多个索引的组合。
15.视图
MySQL的视图是一种虚拟表,可以根据用户的需求从多个表中提取数据,组合成一个新的表。MySQL视图可以根据用户设置的条件,显示特定的信息,并且可以避免重复输入数据。MySQL视图还可以帮助用户更好地管理数据,并提高数据检索的速度。
表复制:
create table dept2 as select * from dept;
创建视图对象:
create view dept2_view as select * from dept2;
删除视图对象:
drop view dept2_view;