软件名 作用
DataGrip 数据库
WebStorm 前端编辑器
IntelliJ IDEA Java编辑器
PyCharm Python编辑器

MySQL篇章

1、关系型数据库(RDBMS)

概念:建立在关系模型基础上,由多张相互连接的二维表组成的数据库

2、MySQL启动

net start mysql80
net stop mysql80

MySQL客户端连接
一种是:mysql -u root -p
另一种是:直接寻找M有SQL 8.0 Command Line Client - Unicode点击打开后即可

3、MySQL数据模型:数据库、表

4、SQL分类

DDL:数据定义语言,用来定义数据库对象(数据库,表,字段)
DML:数据操作语言,用来对数据表中的数据进行增删改
DQL:数据查询语言,用来查询数据库中表的记录
DCL:数据控制语言,用来创建数据库用户、控制数据库的访问权限

5、注意,在删除表时,表中的全部数据也会被删除

具体操作的代码:

  • DDL数据库操作:
    show databases; // 展示已有数据库的情况;
    create database 数据库名; // 创建一个新的数据库
    use 数据库名; // 具体使用哪一个数据库
    select database(); // 查看现在在哪一个数据库中
    drop database 数据库名; // 删除哪一个数据库
    in
  • DDL表操作:
    show tables; // 展示已有tables的情况
    create table 表名 (字段 字段类型 [comment ‘ ‘],
    字段 字段类型 [comment ‘ ‘],
    字段,字段类型 [comment ‘ ‘])[commit ‘ ‘]; // 创建的表的具体的结构与表头
    desc 表名; // 展示表的结构信息
    show create table 表名; // 进一步展示表的结构信息
    alter table 表名 add/modify/change/drop/rename to … // 进行文章结构的删减与修改
    drop table 表名; // 进行删表操作
  • DML-添加数据
    insert info 表名(字段名1,字段名2,…)values (值1,值2,…); // 给指定字段添加数据
    insert info 表名 values (值1,值2,…) // 给全部字段添加数据
    // 批量添加数据
    insert info 表名 (字段名1,字段名2,…) values (值1,值2,…), (值1,值2,…),(值1,值2,…);

注意事项:

  • 1、插入数据时,指定的字段顺序需要与值的顺序是一一对应的。
  • 2、字符串和日期型数据应该包含在引号中。
  • 3、插入的数据大小,应该在字段的规定范围内。(比如什么varchar(5)这样子,限定你长度之类的)

此处插入一个知识点:varchar 和 char 是 MySQL 中的两种数据类型,都是用来存储字符串的。
两者的区别在于:varchar 类型的长度是可变的,而 char 类型的长度是固定的。char 类型是一个定长的字段,以 char(10) 为例,不管真实的存储内容多大或者是占了多少空间,都会消耗掉 10 个字符的空间。但是char类型的使用效率会比较的高。

  • DML 更新数据与删除数据
    更新数据:update 表名 set 字段名1=值1,字段名2=值2,…[where 条件];
    注意:修改语句的条件可以有,也可以没有,如果没有条件,则会修改整张表的所有数据。
    删除数据:delete from 表名 [where 条件]
    注意:
    1、delete 语句的条件可以有,也可以没有,如果没有条件,则会删除整张表的所有数据。
    2、delete 语句不能删除某一个字段的值(可以使用update)

(5)DQL语法:
select 字段列表
from 表名列表
where 条件列表
group by 分组字段列表
having 分组后条件列表
order by 排序字段列表
limit 分页参数

一、DQL基本查询

1、查询多个字段:
select 字段1,字段2,字段3… from 表名;
select * from 表名;
2、设置别名:// 方便理解罢了
select 字段1[as 别名1],字段2[as 别名2],… from 表名;
3、去除重复记录(其实就是去重操作而已)
select distinct 字段列表 from 表名; // 其实看英文意思就知道是distinct,差异性

二、DQL条件查询

select 字段列表 from 表名 where 条件列表; // 代码的形式
一个有意思的查询条件:select * from emp where name like ‘__’; // 这里的是两个下划线,表示是两个占位符,匹配到两个内容的

三、DQL聚合查询

对应的语法是:select 聚合函数(字段列表) from 表名; //将一列数据作为一个整体,进行纵向计算
注意:null值不参与所有聚合函数运算

四、DQL分组查询

语法:select 字段列表 from 表名 [where 条件] group by 分组字段名 [having 分组后过滤条件];
注意:
此处的where与having的区别是:
1、执行时机不同:where 是分组之前进行过滤,不满足where条件,不参与分组;而having是分组之后对结果进行过滤。
2、判断条件不同:where不能对聚合函数进行判断,而having可以
执行顺序:where>聚合函数>having。
分组之后,查询的字段一般为聚合函数和分组字段,查询其他字段无任何意义。

五、DQL排序查询

语法:select 字段列表 from 表名 order by 字段1 排序方式1, 字段2 排序方式2; // 相应的执行代码
排序方式:asc——升序(默认值) desc——降序

注意:如果是多字段排序,当第一个字段值相同时,才会根据第二个字段进行排序。

六、DQL分页查询

语法:select 字段列表 from 表名 limit 起始索引,查询记录数;
注意:
1、起始索引从0开始,起始索引从0开始,起始索引=(查询页码-1)*每页显示记录数。
2、分页查询是数据库的方言,不同的数据库有不同的实现,MySQL中是LIMIT。
3、如果查询的是第一页数据,起始索引()可以省略,直接简写为limit 10.

总结:

1、grouby 先于 order 先于limit 的顺序进行写代码的(其实就是
select
字段列表
from
表名列表
where
条件列表
group by
分组字段列表
having
分组后条件列表
order by
排序字段列表
limit
分页参数
)的顺序——即编写顺序

相应的执行顺序为:
from
表名列表
where
条件列表
group by
分组字段列表
having
分组后条件列表
select
字段列表
order by
排序字段列表
limit
分页参数

(6)DCL—用于管理数据库用户、控制数据库的访问权限
相应的代码:
1、查询用户

mysql;
select * from user;

2、创建用户
create user '用户名'@'主机名' identified by '密码';

3、修改用户密码
alter user '用户名'@'主机名' identified with mysql_native_password by '新密码';

4、删除用户

drop user '用户名'@'主机名';

注意:
1、主机名可以使用%通配。
2、这类SQL开发人员操作的比较少,主要是DBA(Database Administrator 数据库管理员)使用。

DCL-权限(常用的权限)
all,all privileges——所有权限
select——查询数据
insert——插入数据
update——修改数据
delete——删除数据
alter——修改表
drop——删除数据库/表/视图
create——创建数据库/表

权限控制代码:
1、查询权限:
show grants for ‘用户名’@’主机名’;
2、授予权限:
grant 权限列表 on 数据库名.表名 to ‘用户名’@’主机名’;
3、撤销权限:
revoke 权限列表 on 数据库名.表名 from ‘用户名’@’主机名’;
注意:
1、多个权限之间,使用逗号分隔;
2、授权时,数据库名和表名可以使用*进行统配,代表所有。

函数部分:
1、字符串函数
concat, lower, upper, lpad, rpad, trim, substring
2、数值函数
ceit, floor, mod, rand, round
3、日期函数
curdate, curtime, now, year, month, day, date_add, datediff
4、流程函数
if, ifnull, case […] when … then … else … end
流程函数的应用实例是:
(case when math >= 85 then ‘优秀’ when math >=60 then ‘及格’ else ‘不及格’ end) ‘数学’

约束
概述:约束是作用于表中字段上的规则,用于限制存储在表中的数据。
目的:保证数据库中数据的正确、有效性和完整性
分类:
非空约束——not null
唯一约束——unique
主键约束——primary key
默认约束——default
检查约束——check
外键约束——foreign key
注意:约束是作用于表中字段上的,可以在创建表/修改表的时候添加约束。
其实只有unique这一属性不满足时,id才会++

添加外键的语法:
alter table 表名 add constraint 外键名称 foreign key (外键字段名) references 主表(主表列名)

删除外键的语法:
alter table 表名 drop foreign key 外键名称;

字段图标中出现黄色小钥匙是主键的意思,出现蓝色小钥匙是外键的意思。

表的关系:
一对多,多对多
多对多的实现方式是通过建立第三张中间表,中间表至少包含两个外键,分别关联两方主键

连接查询
内连接查询语法:
隐式内连接: select 字段列表 from 表1,表2 where 条件 … ;
显式内连接:select 字段列表 from 表1 [inner] join 表2 on 连接条件 … ;

对于为什么取交集这一问题,原因在于两张数据表保持的信息是不一样的,只能通过外键去寻找。

左外连接:
select 字段列表 from 表1 left [outer] join 表2 on 条件 …;
右外连接:
select 字段列表 from 表1 right [output] join 表2 on 条件 …;

自连接查询语法:
select 字段列表 from 表A 别名A join 表A 别名B on 条件 … ;
自连接查询,可以是内连接查询,也可以是外连接查询。

联合查询
对于union查询,就是把多次查询的结果合并起来,形成一个新的查询结果集。
select 字段列表 from 表A …
union [all]
select 字段列表 from 表B … ;
注意:这里的all如果有的话就是不进行数据的去重操作,只是将两个表的查询结果进行合并。一旦有all的话,那就是要求进行查重处理。同时,对于联合查询的多张表的列数必须保持一致,字段类型也需要保持一致。

子查询
概念:sql语句中嵌套select语句,称为嵌套查询,又称子查询。
实例:select * from t1 where column = (select column from t2);
子查询外部的语句可以是insert / update / delete / select 的任何一个。

事务:
1、事务简介:事务是一组操作的集合,这组操作,要么全部执行成功,要么全部执行失败。
2、事务操作:
start transaction; // 开启事务
commit / rollback; //提交/回滚事务
3、事务的四大特性:
原子性(atomicity):事务是不可分割的最小操作单元,要么全部成功,要么全部失败。
一致性(concistency):事务完成时,必须使所有的数据都保持一致状态。
隔离性(isolation):数据库系统提供的隔离机制,保证事务在不受外部并发操作影响的独立环境下运行。
持久性(durability):事务一旦提交或回滚,它对数据库中的数据的改变就是永久的。
4、并发事务问题
脏读、不可重复读、幻读
5、事务隔离级别
read uncommitted、read committed、repeatable read、serializable