MySQL
2021-10-11 20:32:56 24 举报
AI智能生成
MySQL学习总结
作者其他创作
大纲/内容
SQL分类
DQL
数据查询语言
select
DML
数据操作语言
insert
update
delete
DDL
数据定义语言
create
alter
drop
TCL
事务控制语言
开始事务
begin | start transaction
事务提交
commit
事务回滚
rollback
......
DDL
数据控制语言
授权
grant
取消授权
revoke
常用命令
SELECT VERSION();
SELECT DATABASE();
CREATE DATABASE DATABASENAME;
SHOW DATABASES;
show create database 数据库名;
SHOW TABLES;
DESC TABLENAME;
DQL | SELECT | 查询
简单查询
WHERE 条件查询
条件
=
!= | <>
<、> | <=、>=
between ... and .. | >= and <=
is null | is not null
and | or
in | not in
like | 模糊查询
_:下划线,代表一个字符
%:百分号,代表任意个字符
ORDER BY 排序
DESC 降序
ASC 升序
单一 | 多个 字段排序
指定列排序 | 了解
单行处理函数
LOWER
UPPER
LENGTH
求长度
SUBSTR
截取字符串,起始下标从1开始
CONCAT
字符串拼接
DATE_FORMAT
时间日期格式化,会转化为字符串,一般用于查询
STR_TO_DATE
字符串转时间日期,一般用于插入数据时使用
TRIM
去空格
FORMAT
数字格式化
ROUND
四舍五入
rand()
随机数
IFNULL
CASE ... WHEN ... THEN ... ELSE ... END
......
分组函数
COUNT
SUM
AVG
MAX
MIN
GROUP BY 分组查询
单列分组
多列分组
HAVING | 筛选
DISTINCT 关键字
去除重复记录
连接查询
SQL92
内连接
等值连接
SQL99
内连接
等值连接
非等值连接
自连接
外连接
左外连接
右外连接
子查询
WHERE 中
FROM 中
SELECT 中
UNION
LIMIT
DDL
MySQL常用数据类型
char
varchar
tinyint
int
bigint
float
double
date
datetime
text
clob
字符大对象
blob
二进制大对象
......
操作表
建表
子主题
改表
修改表名
alter table 旧表名 rename [to] 新表名;
修改列名
alter table 表名 change 旧属性名 新属性名 新数据类型;
修改列数据类型
alter table 表名 modify 属性名 数据类型;
增加列
alter table 表名 add 属性名1 数据类型 [完整性约束条件] [first] after 属性名2;
删除列
alter table 表名 drop 属性名;
删除外键
alter table 表名 drop foreign key 外键别名;
删表
drop table tableName;
drop table if exists tableName;
复制表
create table 表名 as select field1,field2,...from 表名
截断表数据
truncate table tableName;
DML
插入数据
insert into tableName(field1,field2,...) values(v1,v2,...);
删除数据
delete from tableName [where ...];
更新语句
update tableName set field1=value1,field2=value2,... [where...];
约束
非空约束
not null
唯一性约束
unique
主键约束
primary key
外键约束
foreign key
检查约束
check
存储引擎
定义
MySQL支持的存储引擎
InnoDB
支持事务
...
MyISAM
使用三个文件表示每个表
格式文件(.frm)
存储表的结构
数据文件(.MYD)
存储表行的内容
索引文件(.MYI)
存储表上索引
不支持事务
可以压缩文件,以节省空间
MEMORY
内存存储引擎
事务
概念
事务指逻辑上的一组操作,组成这组操作的各个单元,要不全部成功,要不全部不成功。
事务如何保证多条DML语句同时成功或同时失败?
InnoDB存储引擎提供了一组记录事务性活动的日志文件
提交事务
命令:commit;
回滚事务
命令:rollback;
事务相关命令
开启事务
begin | start transaction;
提交事务
commit;
回滚事务
rollback;
创建保存点
savepoint 保存点名称;
删除保存点
release savepoint 保存点名称;
回滚到保存点
rollback to 保存点名称;
事务的特性
原子性 | Atomicity
一致性 | Consistency
隔离性 | Isolation
持久性 | Durability
事务的隔离级别
1、读未提交:read uncommitted
事务A可以读到事务B未提交的数据
可能导致脏读
2、读已提交:read committed
事务A只能读到事务B已提交的数据
解决了脏读,但是可能导致不可重复读
3、可重复读:read repeatable
事务开启后,不管多久,读到的数据都是一致的
解决了不可重复读,但是可能导致幻读
4、串行化:serializable
每个事务都是排队进行执行,不能并发,解决了所有问题
解决了幻读,但是 效率不高
事务隔离级别操作
查看隔离级别
select @@tx_isolation;
修改隔离级别
set global transaction isolation level 隔离级别;
测试事务的隔离级别
一些结论
只有DML和事务有关
MySQL事务行为是默认自动提交,每执行一个DML语句,自动提交一次事务
MySQL的事务隔离级别默认是read repeatable(可重复读)
Oracle数据库的事务隔离级别是read committed(读已提交)
索引
概念
子主题
索引的实现原理
添加索引的场景
1、数据库数据量庞大
2、该字段经常出现在where的后面,以条件的形式存在
3、该字段很少出现DML操作
操作索引
索引分类
创建索引
索引失效原因
1、模糊查询,%打头
2、or,如果条件字段有一个没有索引,那么其他条件字段都会失效
3、复合索引,没有使用左侧的列
4、条件字段中,进行了数学运算
5、对条件字段,使用了函数
6、条件字段进行了类型转换
......
0 条评论
下一页