短期内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语言种的锁功能 ,也就是在系统给定的时间内只会执行的唯一操作,如果有两个事务同时在运行在相同的时间内 ,执行相同的功能。隔离性就是保持系统只有一个事务在使用。这种性质也叫做 串行化 。同一时间内只有一个请求于同一数据。
- 如果隔离出问题 就会产生
- 脏读 :也就是读取脏数据 也就是读取未提交的数据,也就是在提交之前进行的数据修改 ,被另一个事务所读取 ,导致产生不存在的数据依赖,也就是脏读。
- 不可重复读:一条事务重复读取同一条数据但是两次数据不一致,也就是说在两次读取的过程中,数据已经被其他的事务所修改
- 幻读:一条事务在读取相同的数据时,发现了其他事务插进来还满足匹配条件的数据 (类似多了行数据)
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;
索引准则
- 索引不是越多越好
- 不要对经常变动的数据加索引
- 小数据量的表建议不要加索引
- 索引一般应加在查找条件的字段