过年没回老家,在这没事做就开始学习,还是学习效率低,但是我尽力了,今天终于把这个mysql的视频看完,总结一下。
参考:
老杜 - mysql入门基础 + 数据库实战:https://www.bilibili.com/video/BV1Vy4y1z7EX(较新、内容相对精炼,有习题)
视频感受:总体看完,感觉很新手,合适所有没学过数据库的人员学习,而且讲的比较详细,还有习题练习,缺乏的是对索引原理的详细解析,但是对于一个开发人员来说,完全足够
DB:数据库
DBMS:数据库管理系统,如mysql,oracle
SQL:结构化查询语言
关系:DBMS执行SQL操作DB
SQL可在DBMS使用,是个标准
安装卸载网上很多,就不详细写了
mysql -uroot -p123456//进入数据库
use test;//使用该数据库
create database create_db;//创建数据库
show tables;//查看表
DQL语句分类
关键字格式
select
...
from
...
where
...
group by
...
order by
...
执行顺序
from---->where--->group by--->select--->order by
注:
having
不能单独使用,必须联合group by
使用where
和having
,优先使用where分类:
select
e.ename,d.name
from
emp e
joint
dept d
on
e.deptno - d.deptno;
外连接中,表与表存在主次关系,内连接不存在
select ... from ... where...
...
中均可出现select…,即套娃行为
select ... from... where ...
union
select... from ... where...
union
效率比连接查询
高,连接查询
每次连接则匹配满足笛卡尔积现象,而union
使乘法转换为加法
limit 5
取前5条
limit startIndex,len
取下标为startIndex
开始后len
条
关系:(pageIndex-1)*pageSize,pageSize=startIndex,len
create table tableName(param1 type,param2 type,param3 type...)
CURD
insert into table (param1,param2,param3)values
(v1,v2,v3),(v1,v2,v3)
快速建表
create table emp2 as select * from emp
delete和truncate
约束
foreign key(cno) references t_class(classno)
一个事务需要多个DML语句,因为一个业务不可能一个DML语句可以完成,因此需要事务
使用事务性活动的日志文件
mysql默认自动commit,需要使用start transcation关闭自动提交事务
ACID
read uncommitted
read committed
repeatable read
serializable
修改隔离级别
set global transaction isolation level ____
查看隔离级别
select @@tx_isolation
本质就是目录
原理使用B树的搜索,更细致是B+树搜索
mysql特性:
创建索引
create index emp_ename_index on emp(ename);
删除
drop index emp_ename_index on emp;
使用explain
查看是否使用索引,expalin
是查看执行计划
%
开头的模糊查询or
,要求两边条件都有索引,单边会使索引失效本质就是一个表,可以认为是个临时表,但是操作数据又会影响原表数据
作用:便于操作复杂的联合select
出来的表格,建个临时表,筛选需要的字段,便于操作
语法:
create view emp_view as select * from emp;
由于自身不是DBA,只是开发人员,不需要记住太多命令,需要去查找即可
导出数据
mysqldump 库名(表名,选填)> 路径
导入数据
source 文件
id | name | contact |
---|---|---|
1 | lisi | [email protected],136xxxx |
这种就不符合,应该把邮箱和手机分开写
sid | sname | tid | tname |
---|---|---|---|
1 | lisi | 1001 | 李老师 |
2 | zhangsan | 1001 | 李老师 |
3 | wangwu | 1002 | 赵老师 |
多对多关系,就产生部份依赖
sid | sname | classno | class |
---|---|---|---|
1 | lisi | 1001 | 一班 |
2 | zhangsan | 1005 | 五班 |
3 | wangwu | 1006 | 五班 |
一对多,产生传递依赖
总结建表:
由于表和表之间连接次数越多,效率越低,因此又是可能存在冗余字段,但是为了减少表连接次数,这样做也是合理的,并且这对于开发人员来说,sql语句的编写难度也会降低