MySQL知识点(2)

文章目录

一、数据库概述

在这里插入图片描述
数据库的底层原理都和IO流有关,只不过我们不用写代码了,只需要写SQL就行了

数据库和表在硬盘中是以文件的形式存在的

1.MySQL的卸载

在这里插入图片描述

2.SQL、DB、DBMS分别是什么,他们之间的关系

在这里插入图片描述

3.创建数据库和删除

创建数据库

Create database 数据库名

删除数据库

Drop database 数据库名

4.什么是表

在这里插入图片描述

5.SQL语句的分类

在这里插入图片描述

6.导入数据

在这里插入图片描述
在这里插入图片描述

7.什么是SQL脚本

在这里插入图片描述

二、条件查询

在这里插入图片描述

1.between…and的用法

在这里插入图片描述

2.给字段起别名

在这里插入图片描述

3.Is null和Is not null

在这里插入图片描述

4.and 和 or 的优先级问题

在这里插入图片描述

5.distinct去除重复

在这里插入图片描述

6.In 和 not in

在这里插入图片描述

7.Like模糊查询

在这里插入图片描述

8.数据排序

在这里插入图片描述
在这里插入图片描述

三、分组查询

1.分组函数

分组函数只能分完组了之后才能用
在这里插入图片描述
在这里插入图片描述

1.Ifnull()空处理函数

在这里插入图片描述

2.count(*)和count(具体字段)的区别

在这里插入图片描述

3.where后为什么不能用分组函数

在这里插入图片描述

2.分组查询

分组函数和分组查询一般都一起用,分组查询不用分组函数就没什么意义

1.group by 和having

在这里插入图片描述
语法规则
在这里插入图片描述

2.多字段联合分组查询

在这里插入图片描述

3.having 和 where的选择

只使用了原数据
在这里插入图片描述
使用的是计算后的数据
在这里插入图片描述

4.执行顺序

在这里插入图片描述

四、连接查询

1.连接查询的概述

在这里插入图片描述

2.连接查询的分类

在这里插入图片描述

3.关于表别名的作用

不写表别名前面的字段会去后面的每张表中寻找
在这里插入图片描述

4.笛卡尔积现象

两张表连接查询如果不写条件,那么A表的第一条数据会和B表的每条数据去联合,以此类推A表的第二条。。。,输出的数据是A表的个数*B表的个数

在这里插入图片描述

5.如何避免笛卡尔积现象

在这里插入图片描述

通过条件去筛选,如emp表中的TOM,部门号是20,去和dept表中的20匹配,但是20还是依次和dept的每一个部门号查找,找到一样的20就输出显示,查找次数不变,只是显示变了

6.内连接之等值连接

在这里插入图片描述
在这里插入图片描述

7.内连接之非等值连接

在这里插入图片描述

8.自连接

自连接也能非等值连接

自连接是两表匹配的东西出来,不一定两张表的数据全部出来

在这里插入图片描述
在这里插入图片描述

9.外连接

主表的的数据会全部出来,而副表匹配的会出来,不匹配的自动用null来匹配

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

案例:找出哪个部门没有员工

在这里插入图片描述

10.多张表进行连接

在这里插入图片描述

案例:找出每一个员工的部门名称以及工资等级

在这里插入图片描述

案例:找出每一个员工的部门名称、工资等级、以及上级领导

在这里插入图片描述

五、子查询

在这里插入图片描述

1.where后面嵌套子查询

在这里插入图片描述

2.from后面嵌套子查询

在这里插入图片描述
在这里插入图片描述

3.select后面嵌套子查询

查询D表中和E.deptno相匹配的部门名称

在这里插入图片描述

六、union(可以将查询结果拼接)

在这里插入图片描述
在这里插入图片描述

注意,拼接的两条语句的字段数必须一致,不能一个是两字段,一个是一字段

七、limit(重点,以后分页查询表全靠它)

数据库中可能一张表有很多数据,一次查询出一张表会导致卡顿,浏览器崩溃,这时就要用分页,例如:百度的每一页

在这里插入图片描述
执行顺序
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

八、表

1.表的创建

表在数据库当中一般建议以t_或tbl_开头
在这里插入图片描述
数据类型
在这里插入图片描述

1.char和verchar如何选择

Char的效率比varchar高

在这里插入图片描述

2.删除表

在这里插入图片描述

3.复制表

在这里插入图片描述

2.插入数据

在这里插入图片描述
在这里插入图片描述
1.

一次插入多行数据

insert into 表名(字段名1,字段名2…)
values(),(),()

没设置默认追,则自动写null
在这里插入图片描述
在这里插入图片描述

将查询结果插入到一张表中

在这里插入图片描述

3.修改数据

在这里插入图片描述

4.删除数据

在这里插入图片描述

5.修改表结构

在这里插入图片描述

1.修改表名:
  	ALTER TABLE 表名 RENAME TO 新表名;
 	例:将student表名更改为students
 	 ALTER TABLE student RENAME TO students;

2.表中添加新列
	(1)语法
	alter table 表名 add (列名
	数据类型 [,列名
	数据类型] ...);

	案例:向表中添加一列为evaluatetime  类型为DATE
	alter table emp1 add (evaluatetime  DATE);
	
	(2)注意事项
	新添加的列会按顺序续接原表的列进行排列。
	
3. 修改表中存在的列
	(1)、语法
	alter table 表名 modify (列名 数据类型 [,列名 数据类型] ...);
	
	案例:改变列的数据类型
	alter table emp1 modify (workscore varchar(20));
	
4. 表中删除一个列
	(1)、语法
	 alter table 表名 drop列名;
	 
	(2)、注意事项
	 一次只能删除一列;
	 所删除的列不是表中的唯一列;
	 删除列将无法回滚,所以删除前请确认无误再进行操作。
	 
5.添加约束
	 例:给student表添加主键name;
	  ALTER TABLE student ADD primary key(name);

6.约束

在这里插入图片描述

1.非空约束

Not null 只有列级约束,没有表级约束

2.唯一性约束

在这里插入图片描述
在这里插入图片描述

3.主键约束

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

外键约束

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

九、存储引擎(了解)

在这里插入图片描述
存储引擎就是在建一张表的时候,以什么形式来保存这张表
在这里插入图片描述

1.MylSAM存储引擎(为了节省空间的时候用)

一张表有三个文件组成

在这里插入图片描述

2.InnoDB存储引擎(默认的存储引擎)(为了安全的时候用)

在这里插入图片描述

3.MEMORY存储引擎(为了执行快的时候用)

在这里插入图片描述

十、事务

1.什么是事务

在这里插入图片描述

2.事务的原理

在这里插入图片描述
例子:
在这里插入图片描述

2.事务的结束标志

== 提交==:成功的结束,将所有的DML语句操作历史记录和底层硬盘数据来一次同步

回滚:失败的结束,将所有的DML语句操作历史记录全部清空

3.事务的特性

在这里插入图片描述

4.事务的隔离性级别

多线程的时候
在这里插入图片描述

脏读:指一个线程中的事务读取到了另外一个线程中未提交的数据。另一个线程中的事务直接回滚的话,我读取到的数据就消失了

不可重复读:做不到这个数据我从头到尾读到的是一样的(比如:A事务早上九点读到14 条记录,我的事务一直没有停止,但是之间B事务改了硬盘的数据,晚上十点时我只能读到13条记录)

可重复读:比如A事务早上九点读到14条记录,我的事务一直没有停止,之间B事务改了硬盘的数据,晚上十点时还是读到14条记录,永远读的是我开启事务时的数据

在这里插入图片描述

十一、索引

1.什么是索引,有什么用

在这里插入图片描述

2.创建索引对象和删除

在这里插入图片描述

3.什么时候考虑给字段添加索引

在这里插入图片描述

4.查看SQL的执行计划

在这里插入图片描述

5.索引的实现原理

在这里插入图片描述
在这里插入图片描述

索引会自动排序和分区

索引底层采用的数据结构是:B+Tree

6.索引的分类和什么时候失效

在这里插入图片描述

十二、视图

1.什么是视图

同一张表的数据,站在不同角度去看

在这里插入图片描述

2.创建和删除视图

在这里插入图片描述
在这里插入图片描述

3.索引的作用

在这里插入图片描述

十三、DBA常用命令

1.新建用户

格式

CREATE USER username IDENTIFIED BY 'password';

说明:username——你将创建的用户名, password——该用户的登陆密码,密码可以为空,如果为空则该用户可以不需要密码登陆服务器.

例如:创建一个用户名为 p361密码为123的用户

create user p361 identified by '123';

2.授权

命令格式

grant all privileges on dbname.tbname to 'username'@'login ip' identified by'password' with grant option;

	dbname=  * 表示所有数据库
	tbname=  * 表示所有表
	loginip=  % 表示任何ip
	password为空,表示不需要密码即可登录
	with grant option;  表示该用户还可以授权给其他用户

细粒度授权

@localhost:本地用户
@%:远程用户任何IP

该用户只能在本地IP上登录
首先以root用户进入mysql,然后键入命令:
grant select,insert,update,delete on *.* to p361 @localhost  identified by "123"; 

如果希望该用户能够在任何机器上登陆mysql,则将localhost改为 "%" 

粗粒度授权

我们测试用户一般使用该命令授权,
授予p361用户所有权限:
ALL PRIVILEGES,并且该用户能在任何机器上登录mysql
GRANT ALL PRIVILEGES ON *.* TO 'p361'@'%' Identified by "123";        
              
注意:用以上命令授权的用户不能给其它用户授权,如果想让该用户可以授权,用以下命令:
GRANT ALL PRIVILEGES ON *.* TO 'p361'@'%' identified by "123"  WITH GRANT OPTION;

		privileges包括:

                              alter:修改数据库的表

                              create:创建新的数据库或表

                              delete:删除表数据

                              drop:删除数据库/表

                              index:创建/删除索引

                              insert:添加表数据

                              select:查询表数据

                              update:更新表数据

                              all:允许任何操作

                              usage:只允许登录

3.回收权限

命令格式:
revoke privileges on dbname.tbname from username;

例子:回收p361用户的所有权限
revoke all privileges on *.* from p361;

use mysql
select * from user
进入 mysql库中
修改密码;
update user set password =  password('qwe') where user = 'p646';
刷新权限;
flush privileges

4.导出导入

1、导出
例子:导出test数据库,到D盘下,形成test.sql文件
在windows的dos命令窗口中执行:mysqldump test>D:\test.sql -uroot -p123

例子:导出test数据库下的emp表到D盘
在windows的dos命令窗口中执行:mysqldump test emp> D:\ test.sql -uroot –p123


2、导入
Use test ——使用test数据库
登录MYSQL数据库管理系统之后执行:source  D:\ test.sql

十四、数据库设计三范式(重点,面试经常问)

1.设计三范式的作用

设计三范式都是为了减少数据的冗余

提醒:在实际的开发中,以满足客户的需求为主,有的时候会拿冗余换执行速度

2.第一范式

第一范式:任何一张表都应该有主键,并且每一个字段原子性不可再分

问题

在这里插入图片描述
解决
在这里插入图片描述

3.第二范式(多对多设计)

第二范式:建立在第一范式的基础之上,所有非主键字段完全依赖主键,不能产生部分依赖

问题,部分依赖
部分依赖只有联合主键的时候才会发生
在这里插入图片描述
解决
在这里插入图片描述

4.第三范式(一对多设计)

第三范式:建立在第二范式的基础上,所有非主键字段直接依赖主键,不能产生传递依赖

问题。传递依赖
在这里插入图片描述
解决
在这里插入图片描述

5.一对一设计

一个字段主键加外键

在这里插入图片描述

一对多的变形,在一对多的基础上添加了一个unique

在这里插入图片描述

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值