基础篇我们需要学会什么知识呢
主要有以下几部分:MySQL概述,SQl,函数,约束,多表查询,事务。
我们要通过以上几个内容为切入点,由浅及深地了解认识并运用Mysql。
数据库相关概念
数据库(DataBase简称DB):存储数据的仓库,数据是有组织的进行存储。
数据库管理系统(DataBase Management System简称DBMS):操作和管理数据库的大型软件。
SQL(Structured Query Language):操作关系型数据库的编程语言,定义了一套操作关系型数据库统一标准。
主流的关系型数据库管理系统
![](https://img-blog.csdnimg.cn/img_convert/1fc19e88dfbdd06a9a5bdacedf8f18eb.png)
在了解MySQL之前我们先了解一下什么关系型数据库。
关系型数据库(RDBMS)
概念:建立在关系模型基础上,由多张相互连接的二维表组成的数据库。
特点:
使用表存储数据,格式统一,便于维护。
2.使用SQL语言操作,标准统一,使用方便。
mysql概念:
mysql是一个关系型数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库中,这样就增加了速度并提高了灵活性。
SQL部分
SQL通用语法:
SQL语句可以单行或多行书写,以分号结尾。
SQL语句可以使用空格/缩进来增强语句的可读性。
MySQL数据库的SQL语句不区分大小写,关键字建议使用大写。
注释:
单行注释:--注释内容或#注释内容(MySQL特有)
多行注释:/*注释内容*/
SQL分类:
![](https://img-blog.csdnimg.cn/img_convert/152e9faafbc83bdcf5a62d0aba63d600.png)
DDL-数据库操作:
查询:
查询所有数据库:
show databases;
查询当前数据库:
select database();
创建:
create database [if no exists] 数据库名 [defaul charset 字符集] [collate 排序规则];此处的字符集我们不推荐使用utf8,而是使用utf8mb4,因为数据库中有的数据可能是四个字节。
删除:
drop database [if exists] 数据库名;
使用:
use 数据库名;
DDL-表操作-查询:
查询当前数据库所有表:
show tables;
查询表结构:
desc 表名;
查询指定表的建表语句:
show create table 表名;
DDL-表操作-创建:
create table 表名(
字段1 字段1类型[comment 字段1注释]
字段2 字段2类型[comment 字段2注释]
字段3 字段3类型[comment 字段3注释]
...
字段n 字段n类型[comment 字段n注释]
);[comment 表注释]
例子
![](https://img-blog.csdnimg.cn/img_convert/c7fc464073dbaa252ad535ea48fec503.png)
DDL-表操作-修改:
添加字段
alter table 表名 add 字段名 类型(长度) [commen 注释] [约束];
![](https://img-blog.csdnimg.cn/img_convert/8f5d504cb99393080bd0d964b42003cd.png)
修改字段的数据类型
alter table 表名 modify 字段名 新数据类型(长度);
修改字段名和字段类型
alter table 表名 change 旧字段名 新字段名 类型(长度) [comment 注释] [约束];
![](https://img-blog.csdnimg.cn/img_convert/98a02383ca339714193355002b5cba9e.png)
alter table emp change nickname username varchar(30) comment '用户名';
删除字段:
alter table 表名 drop 字段名;
![](https://img-blog.csdnimg.cn/img_convert/dc50c6eaa0e8038777e2eb589efb68b7.png)
alter table emp drop username;
修改表名:
alter table 表名 rename to 新表名;
![](https://img-blog.csdnimg.cn/img_convert/0228cd2aa2444abbd515c79fe9ebc808.png)
alter table emp rename to employee;
DDL-表操作-删除:
删除表:
drop table [if exists] 表名;
删除指定表,并重建该表:
truncate table 表名;
注意 :在删除表的时候,表中所有数据都会被删除
![](https://img-blog.csdnimg.cn/img_convert/aa279c0636bb9d05f1b44b617337e0ab.png)
DML:
DML是数据操作语言,用来对数据库表中的数据记录进行增删改操作。
添加数据(insert)
修改数据(updata)
删除数据(delete)
DML-添加数据:
给指定字段添加数据:
insert into 表名 (字段名1,字段名2,...) values (值1,值2...);
给全部字段添加数据:
insert into 表名 values (值1,值2,...);
批量添加数据:
insert into 表名 (字段名1,字段名2,....) values (值1,值2,...),(值1,值2,...),(值1,值2,...);
insert into 表名 values (值1,值2,...),(值1,值2,...),(值1,值2,...);
DML-修改数据:
updata 表名 set 字段名1=值1,字段名2=值2,....[where 条件];
![](https://img-blog.csdnimg.cn/img_convert/6244f5be2c1015edbeaa4b9f17bba5cf.png)
DML-删除数据:
delete from 表名 [where 条件];
DQL:
DQl是数据查询语言,用来查询数据库中表的记录。
查询关键字:select。
![](https://img-blog.csdnimg.cn/img_convert/64a89722ecd34a012693b41c86f2b6b4.png)
DQL-基本查询:
查询多个字段:
select 字段1,字段2,字段3,... from 表名;
select * from 表名;
设置别名:
select 字段1[as 别名1],字段2 [as 别名2], ... from 表名。
去除重复记录:
select distinct 字段列表 from 表名。
DQL-条件查询:
语法
select 字段列表 from 表名 where 条件列表;
![](https://img-blog.csdnimg.cn/img_convert/69927ee31f96725096e2ad9d709622c9.png)
DQL-聚合函数:
1.介绍:
将一列数据当做一个整体,进行纵向运算。
2.常见的聚合函数
![](https://img-blog.csdnimg.cn/img_convert/8b9d708e6c5390bdcd8650580a98bc1e.png)
语法:
select 聚合函数(字段列表) from 表名;
注意所有的null值不参与聚合函数的运算
DQL-分组查询:
语法:
select 字段列表 from 表名 [where 条件] group by 分组字段名 [having 分组后过滤条件];
where与having的区别:
执行时机不同,where是分组之前进行过滤,不满足where条件,不参与分组,而having是分组之后对结果进行过滤。
判断条件不同:where不能对聚合函数进行判断,而having可以。
注意:
执行顺序:where> 聚合函数 > having
分组之后,查询的字段一般为聚合函数和分组字段,查询其他字段无任何意义。
DQL-排序查询:
1语法
select 字段列表 from 表名 order by 字段1 排序方式1,字段2 排序方式2;
2排序方式:
asc : 升序(默认值)
desc: 降序
注意:如果是多字段排序,当第一个字段相同时,才会根据第二个字段进行排序。
DQL-分页查询:
语法;
select 字段列表 from 表名 limit 起始索引,查询记录数;
注意:
起始索引从0开始,起始索引 = (查询页码 - 1)*每页显示记录数。
分页查询是数据库的方言(每个数据库系统略有不同),MySQL是limit。
如果查询的是第一页数据,起始索引可以省略,直接写limit 10;
DQL-执行顺序:
![](https://img-blog.csdnimg.cn/img_convert/5067f5fa7a1928a5af72e460a7c0f75c.png)
DCL:
DCL是用来管理数据库用户、控制数据库的访问权限。
DCL-管理用户:
查询用户:
use mysql;
select * from user;
创建用户:
create user '用户名@主机名' identified by '密码';
修改用户密码
alter user ‘用户名@主机名’ identified with mysql_native_password by '密码';
4,删除用户
drop user '用户名@主机名'
实例如下:
![](https://img-blog.csdnimg.cn/img_convert/3f6c5b16c46e85a4a247b636801e0a4b.png)
DCL-控制权限:
![](https://img-blog.csdnimg.cn/img_convert/ab83c4cd754b5b390dc76b57ce243967.png)
查询权限
show grants for '用户名@主机名';
授予权限
grant 权限列表 on 数据库名.表名 to '用户名@主机名 ';
撤销权限
revoke 权限列表 on 数据库名.表名 from '用户名@主机名';
函数
函数的定义:是指一段可以直接被另一段程序调用的程序或代码;
字符串函数:
![](https://img-blog.csdnimg.cn/img_convert/12419da1d7f57771ce828918662dab92.png)
SELECT 函数(参数);
小案例
![](https://img-blog.csdnimg.cn/img_convert/50276be3e33900682a16190838848a6a.png)
数值函数:
![](https://img-blog.csdnimg.cn/img_convert/75c8d09ee4a43009d2842011e84f9c2b.png)
小案例
![](https://img-blog.csdnimg.cn/img_convert/6da070865a6e737f7fa2793558181bef.png)
日期函数:
![](https://img-blog.csdnimg.cn/img_convert/599c9a61e4daee1ac6f507476b2b0842.png)
![](https://img-blog.csdnimg.cn/img_convert/32e0e2400ac2e19f9b0ce22fd246220e.png)
求取两个日期的差数
![](https://img-blog.csdnimg.cn/img_convert/77c7fb49383e98e609c1bdea06eea4ca.png)
![](https://img-blog.csdnimg.cn/img_convert/1ff1d8b89ed601a3a18bb69c0b872400.png)
datediff()求取两个日期时间差数时 是用第一个时间减去第二个时间
小案例:
![](https://img-blog.csdnimg.cn/img_convert/3ef627ac4e415b73b4ade5b9ccd0a87b.png)
流程函数:
![](https://img-blog.csdnimg.cn/img_convert/827def64b0e89bee57809e797d53d269.png)
小案例
![](https://img-blog.csdnimg.cn/img_convert/b22890f21d9c311dff28b0e6cce7d2f0.png)
![](https://img-blog.csdnimg.cn/img_convert/d84150f2789b43dbca15670c3a925634.png)
小案例
![](https://img-blog.csdnimg.cn/img_convert/c5f7b8f50ce0dbaa18a54c583204c25a.png)
约束:
概念:约束是作用于表中字段上的规则,用于限制存储在表中的数据。
目的:保证表中数据的正确性、有效性、完整性。
![](https://img-blog.csdnimg.cn/img_convert/893ba4e0e095c6c3202f182a07c9880d.png)
![](https://img-blog.csdnimg.cn/img_convert/c5bdd88a0e79b4ad89873d4de1b3059c.png)
案例:
![](https://img-blog.csdnimg.cn/img_convert/00260a9200bfac19cd27a886a8b767e7.png)
外键约束:
外键用来让两张表的数据建立连接,从而保证数据的一致性和完整性。
![](https://img-blog.csdnimg.cn/img_convert/f35e54ba655b39d2b4a846192bd9a102.png)
![](https://img-blog.csdnimg.cn/img_convert/940628654095af0b538609b2b6ce5f93.png)
有外键的叫做子表,被连接的叫做父表。
![](https://img-blog.csdnimg.cn/img_convert/e2d7b9e39ce05fc03f32bb72c4454c57.png)
![](https://img-blog.csdnimg.cn/img_convert/23b831fa84a6cb9287fa49a36f1ce329.png)
![](https://img-blog.csdnimg.cn/img_convert/10f74ff60083332d3d5a7866d431cff1.png)
多表查询概述:
1.一对多(多对一),例如员工和部门的关系,一个员工只能属于一个部门,一个部门可以有多个员工,则把部门表作为父表,员工表作为子表。员工表设置外键连接部门表的主键。
2.多对多,例如学生和课程的关系,一个学生可以选修多门课程,一个课程也可以被多名学生选修,此时我们需要建立一个中间表,中间表设置两个外键,分别对应学生表的主键和课程表的主键。用一张中间表把它们连接起来。
3.一对一,例如用户与用户的详细关系,多用于单表拆分,将一张表的基础字段放在一张表中,其他详细信息放在另一张表中,以提升操作效率。如何实现? 在任意一张表中加入外键,关联另一方的主键,并设置外键为唯一的(unique).
笛卡尔积:笛卡尔积是指在数学中,两个集合A集合和B集合的所有组合情况(多表查询时需要消除无效的笛卡尔积)。
多表查询分类:
![](https://img-blog.csdnimg.cn/img_convert/4c88b275c23cb329151a3d60ec3ca385.png)
连接查询——内连接
![](https://img-blog.csdnimg.cn/img_convert/4fa83b19a6a82972b2b1f8ffd09c813b.png)
连接查询——外连接
语法:
![](https://img-blog.csdnimg.cn/img_convert/cf556cff28f0da34c3e1563c2408ebc3.png)
连接查询——自连接:
语法:
![](https://img-blog.csdnimg.cn/img_convert/696b81d2d97a92b70a1c8270de70e303.png)
联合查询——union,union all
对于union查询,就是把多次查询的结果合并起来,形成一个新的查询结果集。
![](https://img-blog.csdnimg.cn/img_convert/8a388c30ef8c310804e75ae0cbde318b.png)
unionall是直接将查询的结果合并,union会将查询的结果去重。
对于联合查询的多张表的列数必须保持一致,字段类型也需要一致。
子查询:
概念:对于sql语句中嵌套select语句,称为嵌套查询,又称为子查询。
![](https://img-blog.csdnimg.cn/img_convert/7eee29b6e0e929a9a8251c45eaf6e89f.png)
![](https://img-blog.csdnimg.cn/img_convert/e7b28a4ae5ed20761051d126c797eab0.png)
标量子查询:子查询返回的结果是单个值(数字,字符串,日期),最简单的形式,这种子查询称为标量子查询。
常用的操作符号: =、 <> 、 > 、 >=、 < 、<=
列子查询:子查询返回的结果是一列(可以是多行),这种子查询称为列子查询。
常用的操作符: in, not in, any, some, all.
![](https://img-blog.csdnimg.cn/img_convert/e58ab50b67b1dada92ad1fd350b630c5.png)
行子查询:子查询返回的结果是一行(可以是多列),这种子查询称为行子查询。
常用的操作符: =、<>、in 、 not in
![](https://img-blog.csdnimg.cn/img_convert/e221e42d01a204396759218b2c3be80d.png)
(select salary , managerid from emp where name = '张无忌')这个叫做行子查询并非上面的全部语句,不能混淆了概念。 因为它返回的结果就是一行多列。
表子查询:子查询返回的结果是多行多列,这种子查询称为表子查询。