MySQL【知识改变命运】复习前1~11

复习

1:客户端和数据库操作

sql 复制代码
 1. 登录 mysql -uroot -p
> 2. 查看当前数据库的版本 select version();
> 3. 显示所有数据库 show databases;
> 4. 查看创建库的语句 show  create database 库名;
> 5. 创建数据库 create database [if not exists];
数据库名 character set 字符集编码 collate 排序规则;
> 6. 选择数据库 use 数据库名
> 7. 查看当前选择的数据库 select database();
> 8. 修改数据库 alter database数据库名 character set 字符编码及 collate 排序规则;
> 9. 删除数据库 drop database [if exists] 数据库;
> 10. 查看警告信息 show warnings;
> 11. 退出 quit/exit

2:表操作

sql 复制代码
> 1.查看当前数据库中有哪些表 show tables;
> 2.创建一张新表 create table [if not exists] 表名 (列/字段名 数据类型[,列/字段名 数据类型]);
> 3.查看表结构 desc 表名;
> 4.查看创表语句 show create table 表名;
> 5.修改表 alter table 表名 {add | modify| dorp |rename} 列;
> 6.删除表 dorp table [if exists] 表名;

3: CRUD 增删改查

sql 复制代码
> 1.新增-插入 insert into 表名 [列名[,列名]] values (值[,值]);
> 指定了多少列名,就需要指定多少值,值与列名一一对应,不指定列名,值的顺序与个数和表中定义列的顺序一一对应
sql 复制代码
2.查询操作
>a.全列查询 select * from 表名;//不加限制的查询会把表中所有的数据都查出来.
>b.指定列查询 select 列[,列...]from 表名;//推荐使用指定列查询
>c.列为表达式查询 列名/表达式 from 表名;
>d.去重查询 select distinct 列名[,列名] from 表名 //如果查询列表中有多个列,每个列的值都相等才会判定为重复
>e.别名查询 select 列名/表达式 [as ] '别名' from 表名 //别名中如果包含空格,需要用单引号引用
> f.排序 select 列名[,列名...] from 表名 order by 列名 asc | desc[,列名 asc |desc]; asc升序,desc降序
> g.条件查询select * from 表名 where 列名/表达式 比较/逻辑运算符;//多个条件可以用and和or 连接
> h.区间查询 select * from 表名 where 列名 between 开始条件 and 结束条件;//开始条件<=列的值<=结束条件
> i.模糊查询 select * from 表名 where 列名 like '%值_';//%匹配任意字符,_匹配单个字符
> j.分页查询   select *from 表名 where 条件 order by 列名 asc|desc limit num;//查询前num 条记录
>  select *from 表名 where 条件 order by 列名 asc|desc limit start,num;//从strat 条开始向后查num条记录
>  select *from 表名 where 条件 order by 列名 asc|desc limit num offset start;//
>  从strat 条开始向后查num条记录
sql 复制代码
3.更新
update 表名 set 列=值 where 条件 order by 子句 limit num;
//如果不指定条件和limit的数据就会更新整张表的数据
sql 复制代码
4.删除
delect from 表名 where 条件 order by 子句 limit num;//如果不指定条件和limit的数据就会删除整表数据
sql 复制代码
5.截断表
truncate 表名;//把表的状态重置为初始状态,表中的数据也会被清空

4:数据库约束

sql 复制代码
1.非空约束: NOT NULL 标记一个字段是否可以为空,指定这个约束,字段的值就不能为空
2.唯一约: UNIQUE 标记一个字段的内容在当前表中唯一,不能重复,但是可以为NULL 
3.主键约束: PRIMARY KEY 在校验的方式上相当于NOT NULL 与UNIQUE 的组合,建议为每张表中定义自增主键
4.外键约束:FOREIGN KEY 一个表中的字段与另一个表中的主键或者唯一键建立关联关系,当对表中的数据进行增删改查的时候数据库会帮助我们进行检查
5.默认约束:DEFAULT 当一个字没有制定时,就会用默认值去填充该列,当手动指定列的值位NULL时,默认就不会生效
6.检查约束:CHECK 对当前列的值合法性的进行检查,在8.0中才生效,5.7版本允许定义但是不生效

5:表的设计

三大范式

第一范式:要求表中的每一列都是不可再分 ,用SQL语言中提供的简单数据类型可以描述字段即可,不满足第一范式的数据库就不能成为关系型数据库

第二范式:在第一范式的基础上,能消除部分函数依赖 ,只能出现有在复合主键的表中(多个候选键),如果有一个字段只能依赖与符合主键中的一个列,那么就需要把这个关系剔除掉,重新建表.

第三范式:在第二范式的基础上,消息传递依赖,为不同的实体单独建表

关系模型

一对一关系:为每个实体单独建表,其中一张表中加一个字段完成对另一张表的引用(建立关系)

一对多关系:为每个实体单独建表,在一这一方设置一个主键.在多这一方加一个字段,两表建立引用关系

多对多关系:为每个实体单独建表,另外新加一张关系表

6:聚合函数

sql 复制代码
1.COUNT(列*)统计结果条数
2.SUM(列)求和
3.AVG(列)求平均数
4.MAX(列)求最大值
5.MIN(列)求最小值

7:GROUP BY分组查询和HAVING子句

GROUP BY:对某一个字段进行分组操作,分组后可以结合聚合函数进行一些运算.

HAVING 对GROUP BY的结果进行过滤

8:联合查询(表连接查询)

sql 复制代码
1.内连接
select * from table 1,table 2...where table 1.xxx=table 2.xxx;
select * from table 1 join table 2 on  table 1.xxx=table 2.xxx where 条件;
select * from table 1 inner join table 2 on  table 1.xxx=table 2.xxx where 条件;

表连接的执行过程

1.先计算参与表连接的笛卡尔积

2.通过连接条件过滤无效的数据

3.加入查询条件得到想要的结果行

4.精减列名得到最终想要的查询结果集

sql 复制代码
2.外连接,分为左连接和右连接
select * from table1 left join table2 on table1.xxx=table2.xxx;
select * from table1 right join table2 on table1.xxx=table2.xxx;

左外连接以 left join 左边的表为基表,左表中的数据全部显示,右表中没有对应的记录则用NULL填充 右外连接以right join

右边的表为基表,右表中的数据全部显示,左表中没有对应的记录则用NULL填充 主要应用在两张表数据不一致的场景里

sql 复制代码
3.自连接
select * from table t1,table t2 where t1.xxx=t2.xxx;
把行转换为列,在查询的时候可以使用where 条件进行过滤,实行了行与行之间的比较
sql 复制代码
4.子查询
单行子查询: select *from table1 where id=(select id from table 2 wherer clo=xxx);
多行子查询: select * from table1 where id [NOT]   IN(select id from table2 where clo=xxx);
多列查询:select * from table1 where (列1,列2,列3...) IN (select 列1,列2,列3 from table2 where clo=xxx);

内层查询的结果作为外层查询的条件,把多条语句合并为一条执行

子查询可以无限嵌套,层数过多时会严重影响效率。

sql 复制代码
5.合并查询
select * from table1 union select * from table2//过滤掉重复的行
select * from table1 union all select * from table2;//不会过滤重复行,显示所有的查询结果作用把多个查询结果合并成一个返回给客户端

注意:合并查询时多个查询的列表一定匹配,mysql不对结果做校验,写的时候无比必要注意

sql 复制代码
6.一条SQL语句中各部分执行顺序
自己构造一条SQL,不一定执行成功,但是包含相关的关键字
select distinct id,name,avg(age) from student join class on student.class_id where class_id=1 group by student.id having avg(age)>0 order by student.id asc limit 100;
sql 复制代码
顺序:from __ join on __ where __ group by __ having __ select __ distinct __ order by __ limit 
相关推荐
双子座断点14 分钟前
QStringList 使用详解
数据库
bw87672068722 分钟前
金融工程--pine-script 入门
数据库·金融
三日看尽长安花1 小时前
【Redis:原理、架构与应用】
数据库·redis·架构
尘浮生3 小时前
Java项目实战II基于Spring Boot的美食烹饪互动平台的设计与实现(开发文档+数据库+源码)
java·开发语言·数据库·spring boot·微信小程序·小程序·美食
forestqq3 小时前
构建后端为etcd的CoreDNS的容器集群(七)、编写适合阅读的域名管理脚本
运维·数据库·etcd
hongkid3 小时前
MongoDB常用操作
数据库·mongodb
岁岁岁平安3 小时前
mysql上课总结(1)(mysql中的常见的存储引擎)(面试)
数据库·mysql·innodb·存储引擎
幽兰的天空5 小时前
python实现excel数据导入数据库
数据库
昨天今天明天好多天6 小时前
【Linux】MySQL部署
linux·mysql·adb
我还能再卷一点6 小时前
Linux安装mysql【超详细】
linux·mysql·adb