1. 数据库
1.1 概述
存储数据,管理数据的仓库
1.2 分类
关系型数据库:
是指存的数据有关系,每行就是每个用户的信息,每列就是要具体描述的数据
非关系型数据库:
是指数据间的关系不紧密甚至没有关系。
1.3 结构
数据库-表-记录
2. 常用操作
2.1 数据库操作
1.查看数据库
show databases;
2.新建数据库
create database 数据库名;
3.(!!!谨慎操作)删除数据库
drop database 数据库名;
4.使用数据库
use 数据库名;
2.2 表操作
1.查看表
show tables;
2.创建表
–create table 表名 (字段名称 字段类型(字段长度),字段名称 字段类型(字段长度));
3.删除表
drop table 表名;
4.查看表结构
desc 表名;
5.增加表的列
alter table 表名 add column 字段名 字段类型(字段长度)
6.新增表的记录
insert into 表名 values(字段1的值,字段2的值,字段3的值);
7.查询表的所有记录
select * from 表名;
8.修改表的记录
update 表名 set 字段名 = 新值
9.删除表的所有记录
delete from 表名;
3. 字段约束
3.1 主键约束
primary key
给字段添加主键约束,主键约束字段的值唯一并且不能为空.
auto_increment
一般给主键添加自动递增,由数据库自动维护,从1开始每个值依次+1
3.2 非空约束
not null
非空约束的字段值不能为空
3.3 唯一约束
unique
给字段加唯一约束,字段的值不能重复
3.4 外键约束
foreign key
外键字段的内容是引用另一表的字段内容
3.5 默认约束
default
默认给字段赋值
3.6 检查约束
cheak
输入值时超过范围就 报错
4. 基本函数
4.1 常用函数
#转小写
select lower(字段名) from 表名;
#转大写
select upper(字段名) from 表名;
#获取长度
select length(字段名) from 表名;
#截取子串
select substr(字段名,1,3) from 表名;(截取从第1个字符开始的3个字符)
#拼接字符串
select concat(字段名,要拼接的值) from 表名;
#替换字段
select replace(字段名,要替换的值,替换成哪个值) from 表名;
#如果为null
select ifnull(字段名,0) from 表名;
#四舍五入 & 向上取整 & 向下取整
select round(字段名),ceil(字段名),floor(字段名) from 表名;
#uuid
select uuid();
#当前年月日时分秒
select now();
#当前年、当前月、当前日、当前时、当前分、当前秒
select year(now()),month(now()),day(now()),hour(now()),minute(now()),second(now());
4.2 条件查询
#给结果去重
select distinct 字段名 from 表名;
#where用来过滤查询的数据
select * from 表名 where 字段名=值
#两个条件间的关系: and(并且) or(或者)
select * from 表名 where 字段=值 and 字段=值
select * from 表名 where 字段=值 or 字段=值
#模糊查询 like %是0~n个字符 是一个字符
#以a开头-高效
select * from 表名 where 字段名 like ‘a%’
#以a结尾
select * from 表名 where 字段名 like ‘%a’
#包含a
select * from 表名 where 字段名 like ‘%a%’
#a后面有两个字符的 下划线代表1个字符
select * from 表名 where 字段名 like 'a_’
#null 对字段值为null的处理
select * from 表名 where 字段名 is null
select * from 表名 where 字段名 is not null
#between and [1000,2000] 在1000~2000间
select * from 表名 where 字段名>=1000 and 字段名<=2000
select * from 表名 where 字段名 between 1000 and 2000
#limit 分页
select * from 表名 limit 3; #取前三条
select * from 表名 limit 1,3; #从第2条开始,总共取3条
select * from 表名 limit 2,2; #从第3条开始,总共取2条
#order by 排序
select * from 表名 order by 字段名 asc#默认升序,可以省略asc
select * from 表名 order by 字段名 desc #降序
4.3 分组
group by
#如果出现了聚合函数(max min avg count sum),非聚合列,必须分组
#having和group by是固定搭配,用来过滤分组后的数据
#having里只能用查出来的结果
#where里不能出现聚合函数
4.4 聚合函数
最大值:max()
最小值:min()
求和:sum()
平均数:avg()
计数:count()
select max(字段名),min(字段名),sum(字段名),avg(字段名) from 表名;
5. 事务
5.1 ACID特点
原子性:多条SQL是密不可分的,整体的结果要么全成功,要么全失败
一致性:保证数据的守恒,总和不变
隔离性:数据库支持高并发,但是操作之间是独立的,被隔离的
持久性:是指SQL语句对数据库的操作(增删改),影响是永久的
5.2 隔离级别
读未提交:性能好,但是数据不安全
读已提交:性能稍差,但是数据安全 --Oracle默认级别
可重复读:性能更差点,数据更安全–MySQL默认级别
串行化:读写都加锁,性能最差,数据最安全,不能并发
6. 多表联查
6.1 笛卡尔积
把两个表的数据都拼接起来
select * from 表1,表2;
这种查询方式称为笛卡尔积,在内存中构建一个大大的结果集,再进行数据的过滤。
既耗费资源,又浪费时间
6.2 连接 join
- 内连接 inner join
两边都对应有记录的才展示,其他去掉 - 左(外)连接 left join
左边表中的数据都出现,右边没有数据以NULL填充 - 右(外)连接 right join
右边表中的数据都出现,左边没有数据以NULL填充
6.3 子查询
在查询的SQL中嵌套查询,称为子查询
7. 索引
7.1 概述
高效获取数据的数据结构
单值索引:一个索引包含一个字段
唯一索引:字段的值必须唯一,允许有空值;主键会自动创建唯一索引
复合索引:一个索引包含多个字段
7.2 语法
创建单值索引:creat index 索引名 on 表名(字段名);
查看索引:show index from 表名;
创建唯一索引:alter table 表名 add unique(字段名);
创建复合索引:alter table 表名 add index
索引名 (字段名,字段名); 使用时遵循最左特性:优先使用最左边的
删除索引:alter table 表名 drop index 索引名
检查是否使用索引:SQL语句前加 explain 查看SQL的执行计划
7.3 总结
优点:索引提高数据检索效率,类似于书的目录,索引表对数据进行了排序。
缺点:索引也要占用内存,每次增删改查也要更新对应的索引文件
8. 视图
8.1 概述
当做一个表来用,缓存了上一次的查询结果
8.2 语法
创建视图:creat view 视图名 as SQL语句;
使用视图:select * from 视图名;
8.3 总结
优点:
SQL只写一次,就会缓存在视图中,查询快
缺点:
数据都是重复的,占内存。视图无法优化
9. Oracle与MySQL的一些区别
默认日期格式:
日-月-年
修改日期格式:
alter session set nls_date_format = ‘yyyy-mm-dd’;
特有方法 decode():
select decode(字段名,值1,返回值1,值2,返回值2,…值n,返回值n) from 表名
分页与MySQl不同:
rownum select * from 表名 where rownum <=2
10. SQL优化
- 查询SQL,尽量用列名代替*
- 尽量使用数字代替字符类型,比如用0,1代替男,女
- 避免在查询时返回大量数据合理利用分页limit
- where过滤时,尽量把范围控制到最小
- where过滤时,尽量不要使用or连接多个条件
- where过滤时,尽量不要用 !=
- where过滤时,like用来做模糊查询,尽量确定开始元素
- 创建索引不要太多,索引单表建议最多5个
- 通常name会加索引,因为数据多,提高查询效率
- 使用explain关键字,查看SQL执行计划(看SQL有没有用索引看key的值)
- MySQL会给每条SQL进行事务的处理,新增数据量大时尽量用一条语句
- 要删除大量数据时,最好分批次删除
- 伪删除,发起了update不是delete,修改记录的状态而不是删除
- group by实现分组,最好分组前进行where过滤数据到最少
- inner join 、left join、right join,优先使用inner join
- 小表驱动大表,小的数据集驱动大的数据集,从而让性能更优
本文介绍了数据库的基础知识,包括关系型和非关系型数据库的分类,以及数据库、表和记录的结构。详细阐述了常用的数据库操作如创建、查看和删除数据库及表,以及字段约束如主键、唯一和外键等。还涵盖了SQL查询语句,如选择、过滤、排序、分组和联查,以及事务处理和索引的使用。此外,提到了视图的概念及其优缺点,并对比了Oracle与MySQL的区别。最后,讨论了SQL查询优化的策略。
3万+

被折叠的 条评论
为什么被折叠?



