mysql学习笔记(一)

储存方式

内存储存的缺点:易失性。比如数组、集合

数据库的好处:

  1. 持久化数据到本地
  2. 可以实现结构化的查询、方便管理

DB:

数据库(database):储存数据的“仓库”。他保存了一系列有组织的数据。

DBMS:

数据库管理系统(Database Management System)。数据库是通过DBMS创建和操作的容器

sql:

结构化查询语言:专门用来与数据库通信的语言

常见的数据库管理系统 :mysql、oracle、DB2、SqlServer

mysql

安装目录my.ini端口,引擎等

Mysql常见命令

  1. 查看当前所有的数据库

    show databases

  2. 打开指定的库

    use 库名

  3. 查看当前库的所有表

    show tables

  4. 查看其他库的所有表

    show tables form 库名;

  5. 查看表结构

    desc 表名

DQL语言的学习

基础查询

IFNULL:可以判断数据为空的时候

  • 条件查询
    • % 任意多个字符
    • _ 任意单个字符
BETWEEN AND	-- 介于某两者之间,包括临界
IN			-- 判断某字段的值是否属于in列表中的某一项
IS NULL		-- 值为空的字段,=或者<>不能判断null

常见函数

-- 一、字符函数
1、length		获取参数值的字节个数
2、concat		拼接字符串
3、upper/lower	变大/小写
4、substr/substring	截取
5、instr			返回子串在第一个位置的索引
6、trim			去掉前后中的相同的单位
7、lpad			用指定的字符实现左填充填充指定的长度
8、rpad			用指定的字符实现右填充填充指定的长度
9replace		替换
-- 二、数学函数
1、round		四舍五入,默认取整  允许小组点保留N位
2、ceil		向上取整,返回大于等于该参数的最小整数
3、floor		向下取整,返回小于等于改参数的最大整数
4truncate	截断
5、mod		取余
-- 三、日期函数
1、now		返回当前系统日期+时间
2、curdate	返回当前系统日期,不包括时间
3、curtime	返回当前的时间,不包含日期
4、str_to_date	将日期格式的字符转换成指定成指定格式的日期
5、date_faormat	将日期转化为字符
-- 四、流程控制函数
1if函数
2case函数
	case 要判断的字段或者表达式/可以为空
	when 常量1 then 要显示的值1或者语句1;
	when 常量2 then 要显示的值2或者语句2;
	else 要显示的值n或者语句n
	end

分组函数

用作统计使用,又称为聚合函数或统计函数或组函数

分类:

sum 求和、avg 平均值、max 最大值、count 计算个数

分组查询

/*
语法:
	select 分组函数,列(要求出现在group by的后面)
	form 表
	【where 筛选条件】
	group by 分组的列表
	【order by 子句】
*/
HAVING 子句用来从分组的结果中筛选行

连接查询

  • 分类
    • 内连接 inner
      • 等值连接
      • 非等值连接
      • 自连接
    • 外连接
      • 左外连接
      • 右外连接
      • 全外连接
    • 交叉连接

笛卡尔乘积现象:表1 有m行,表2 有n行,结果有m*n行的现象

事务的ACID属性

  • 原子性(Atomicity)
    • 原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。
  • 一致性
    • 事务必须使数据库从一个一致性状态变换到另外一个一致性状态
  • 隔离性
    • 事务的隔离性是指一个事务的执行不能被其他事务干扰,即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能相互干扰。
  • 持久性
    • 持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来的其他操作和数据库故障不应该对其有任何影响

隐式事务:

事务没有明显的开启和结束的标记

比如 insert、 update、 delete

显式事务:

步骤1:开启事务

set autocommit = 0;

start transaction;可选的

步骤2:编写事务中的sql语句

…….

步骤3:结束事务

commit;提交事务

rollback;回滚事务

脏读

对于两个事务,T1读取了T2更新了但是还没有提交的字段,然后T2进行回滚,T1读取的内容就是临时且无效的。

不可重复读

T1读取了一个字段,然后T2更新了改字段,之后T1再次读取同一个字段

幻读

T1从一个表中读取了一个字段,然后T2在该表中插入了一些新的行,之后,T1再次读取用一个表

SAVEPOINT

SAVEPOINT设置保存点,配合ROLLBACK TO 回滚到保存点

储存引擎

image-20210713212828720

索引

MySQL官方对索引的定义为:索引是帮助MySQL高效获取数据的数据结构。

在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构上实现高级查找算法。这种数据结构就是索引。

索引分类

  • 单值索引
    • 即一个索引只包含单个列,一个表可以有多个单列索引
  • 唯一索引
    • 索引列的值必须唯一,但允许有空值
  • 复合索引
    • 一个索引包含多个列

Explain

哪些情况下需要创建索引

  1. 主键自动建立索引
  2. 频繁作为查询条件的字段应该创建索引
  3. 查询中与其他表关联的字段、外键关系建立索引
  4. 频繁更新的字段不适合创建索引
  5. where条件里用不到的字段不创建索引
  6. 单键/组合索引的选择问题(在高并发下倾向创建组合索引)
  7. 查询中排序的字段,排序字段若通过索引去访问将大大提高排序速度
  8. 查询中统计或者分组字段

哪些情况不需要创建索引

  1. 表数据太少
  2. 经常增删改的表
  3. 数据重复且分布平均的表字段

image-20210714150721397

├——-List 接口:元素按进入先后有序保存,可重复

│—————-├ LinkedList 接口实现类, 链表, 插入删除, 没有同步, 线程不安全

│—————-├ ArrayList 接口实现类, 数组, 随机访问, 没有同步, 线程不安全

│—————-└ Vector 接口实现类 数组, 同步, 线程安全

│ ———————-└ Stack 是Vector类的实现类
└——-Set 接口: 仅接收一次,不可重复,并做内部排序

├—————-└HashSet 使用hash表(数组)存储元素

│————————└ LinkedHashSet 链表维护元素的插入次序
└ —————-TreeSet 底层实现为二叉树,元素排好序

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值