MySQL 短期小结

短期内MySQL的总结

1.数据库概述

数据库 (data base) 简称DB

概述:大量数据的总和,成为一个较大的库

作用:最基础的保存数据,到更好的去增删改查数据,到最重要的查询数据 ,核心目的就是减少数据冗余。

MySQL

MySQL 为关系型数据库

何为关系型数据库,就是可以通过外键来关联表和表之间的关系。

MySQL 语言分类

1.DDL(Digital Defination Language)数据化定义语言

  • 包括有 create drop alter
  • CREAT (数据库(DATABASE)表(TABLE) ) IF NOT EXISTS 名称
  • DROP 名称
  • ALTER (数据库或表名) RENAME,ADD,MODIFY,CHANGE 表名 字段名 列属性
  • 也就是对于 数据库(database) 表 以及表里的字符段 的数据控制的语言

2.DML (digital manipulation language ) 数据管理语言

  • 包括有 INSETR UPDATE DELETE TRUNCATE
  • INSETR INTO 表名 (字段) VALUES 数据 (一一对应)
  • UPDATE 表名 SET 字段 = 巴拉巴拉 WHERE 字段 = 巴拉巴
  • DELETE FROM 表 (保留之前的自增)
  • TRUNCATE 表 (不保留自增 直接初始化自增 =1)
  • 也就是对 表里的内容的控制

3.DQL (digital query language) 数据库查询语言

  • 这个很单一 但是最重要 SELECT
  • SELECT DISTINCT(去重) 数据(必须保持一个 唯一性) FROM 位置 (表1)
  • INNER, LEFT , RIGHT JOIN 另一个表2 (关联表操作 innenr: 取交集种任一匹配的都可以返回 ,LEFT OR RIGHT :按照 左或右为基准 ,来判断交集中的条件是否满足,满足即返回,基准侧也会返回)
  • ON 表1 数据 = 表2 数据 (关联表 )
  • WHERE (NOT) 条件 AND OR LIKE(%:代表无所谓 _:代表占一格) IN(再次确定一个范围) BETWEEN
  • GROUP BY 字段名
  • HAVING 条件 (大致等同于WHERE ,但是需要在分组之后才可以使用)
  • ORDER BY 字段名 DESC(倒序) ASC(正序)
  • LIMIT (从第几个开始,页数的行)
  • 就是对数据库里的内容进行查询 由很多的方式 (联表查询,多表查询,模糊查询 )

4.DCL ( digital control language) 数据库管理语言

  • 这个大多包括 GRANT commit rollback
  • 大多对数据没有直接的操控 ,但是对数据的间接的影响非常的多

MySQL 函数

  • 用的不多 直接CV大法

-- ================ 内置函数 ================
-- 数值函数
abs(x) -- 绝对值 abs(-10.9) = 10
format(x, d) -- 格式化千分位数值 format(1234567.456, 2) = 1,234,567.46
ceil(x) -- 向上取整 ceil(10.1) = 11
floor(x) -- 向下取整 floor (10.1) = 10
round(x) -- 四舍五入去整
mod(m, n) -- m%n m mod n 求余 10%3=1
pi() -- 获得圆周率
pow(m, n) -- m^n
sqrt(x) -- 算术平方根
rand() -- 随机数
truncate(x, d) -- 截取d位小数

-- 时间日期函数
now(), current_timestamp(); -- 当前日期时间
current_date(); -- 当前日期
current_time(); -- 当前时间
date('yyyy-mm-dd hh:ii:ss'); -- 获取日期部分
time('yyyy-mm-dd hh:ii:ss'); -- 获取时间部分
date_format('yyyy-mm-dd hh:ii:ss', '%d %y %a %d %m %b %j'); -- 格式化时间
unix_timestamp(); -- 获得unix时间戳
from_unixtime(); -- 从时间戳获得时间

-- 字符串函数
length(string) -- string长度,字节
char_length(string) -- string的字符个数
substring(str, position [,length]) -- 从str的position开始,取length个字符
replace(str ,search_str ,replace_str) -- 在str中用replace_str替换search_str
instr(string ,substring) -- 返回substring首次在string中出现的位置
concat(string [,...]) -- 连接字串
charset(str) -- 返回字串字符集
lcase(string) -- 转换成小写
left(string, length) -- 从string2中的左边起取length个字符
load_file(file_name) -- 从文件读取内容
locate(substring, string [,start_position]) -- 同instr,但可指定开始位置
lpad(string, length, pad) -- 重复用pad加在string开头,直到字串长度为length
ltrim(string) -- 去除前端空格
repeat(string, count) -- 重复count次
rpad(string, length, pad) --在str后用pad补充,直到长度为length
rtrim(string) -- 去除后端空格
strcmp(string1 ,string2) -- 逐字符比较两字串大小

-- 聚合函数
count() — 计算行量 sum(); —计算总量 max(); —最大值 min(); — 最小值 avg(); —平均值 group_concat() — 将字符串和值连起来 在同一个组实现

-- 其他常用函数
md5(); — 加密函数 default(); — 默认值函数

MySQL 事务 和 索引

事务

  • 事务就是将一组的SQL语句放到一组里面去执行
  • 只要其中任何一个出错,那么整组的语句都会被取消执行
  • MySQL 的事务 只支持 innoDB 和BDB 数据类型

事务的性质 (ACID)

A :(atomic) 原子性

  • 也就是整个事务,执行过程中,只有成功 或者失败 ,不存在第三种情况 ,不会停滞在中间的环节,如果失败了,可以回滚到最开始的阶段,就像这个事务没有执行过一样

C(Consist): 一致性

  • 一致性就是 整个事务的前后是一致的,保持系统是一致的状态 ,无论有多少个并发的事务发生,从始至终事务的封装性不会发生改变,也就是保护性和不变性。

I(Isolated) :隔离性

  • 隔离性就是类似C语言种的锁功能 ,也就是在系统给定的时间内只会执行的唯一操作,如果有两个事务同时在运行在相同的时间内 ,执行相同的功能。隔离性就是保持系统只有一个事务在使用。这种性质也叫做 串行化 。同一时间内只有一个请求于同一数据。
  • 如果隔离出问题 就会产生
  1. 脏读 :也就是读取脏数据 也就是读取未提交的数据,也就是在提交之前进行的数据修改 ,被另一个事务所读取 ,导致产生不存在的数据依赖,也就是脏读。
  2. 不可重复读:一条事务重复读取同一条数据但是两次数据不一致,也就是说在两次读取的过程中,数据已经被其他的事务所修改
  3. 幻读:一条事务在读取相同的数据时,发现了其他事务插进来还满足匹配条件的数据 (类似多了行数据)

D(Durable):持久性

  • 也可以理解为永久性 就是当数据提之后,对数据库的修改将不可逆,不会回滚

事务的操作

  • SET autocommit = 0 — 关闭自动提交事务
  • START TRANSACION —开始事务
  • 语句语句
  • COMMIT —** 提交**
  • ROLLBACK — 回滚
  • SET autocommit = 1 —开启自动提交

SAVE POINT 保存点名

索引

作用

  • 提高查询的速度
  • 确保数据的唯一性
  • 加速表与表的连接 ,以及完整性
  • 显著的减少分组和排序的时间‘
  • 全文检索字段进行优化

分类

  • 主键索引 (唯一性同时确保数据的唯一性 确定特定数据记录在数据库的位置 PRIMARY)
  • 唯一索引( 确保数据的唯一性但是自己不唯一 UNIQUE )
  • 常规索引(可以快速的定位数据INDEX )
  • 全文索引(适合大数据的集 快速定位数据 FULLTEXT

方法一:创建表时

CREATE TABLE 表名 (

字段名1 数据类型 [完整性约束条件…],

字段名2 数据类型 [完整性约束条件…],

[UNIQUE | FULLTEXT | SPATIAL ]   INDEX | KEY

[索引名] (字段名[(长度)] [ASC |DESC])

);

方法二:CREATE在已存在的表上创建索引

CREATE [UNIQUE | FULLTEXT | SPATIAL ] INDEX 索引名

ON 表名 (字段名[(长度)] [ASC |DESC]) ;

方法三:ALTER TABLE在已存在的表上创建索引

ALTER TABLE 表名 ADD [UNIQUE | FULLTEXT | SPATIAL ] INDEX

索引名 (字段名[(长度)] [ASC |DESC]) ;

删除索引:DROP INDEX 索引名 ON 表名字;

删除主键索引: ALTER TABLE 表名 DROP PRIMARY KEY;

显示索引信息: SHOW INDEX FROM student;

索引准则

  • 索引不是越多越好
  • 不要对经常变动的数据加索引
  • 小数据量的表建议不要加索引
  • 索引一般应加在查找条件的字段
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值