数据库的好处


1.持久化数据到本地
2.可以实现结构化查询,方便管理

数据库相关概念


1、DB:数据库,保存一组有组织的数据的容器
2、DBMS:数据库管理系统,又称为数据库软件(产品),用于管理DB中的数据
3、SQL:结构化查询语言,用于和DBMS通信的语言

数据库存储数据的特点


1、将数据放到表中,表再放到库中
2、一个数据库中可以有多个表,每个表都有一个的名字,用来标识自己。表名具有唯一性。
3、表具有一些特性,这些特性定义了数据在表中如何存储,类似java中 “类”的设计。
4、表由列组成,我们也称为字段。所有表都是由一个或多个列组成的,每一列类似java 中的”属性”
5、表中的数据是按行存储的,每一行类似于java中的“对象”。

MySQL产品的介绍和安装

MySQL服务的启动和停止


方式一:计算机——右击管理——服务
方式二:通过管理员身份运行
net start 服务名(启动服务)
net stop 服务名(停止服务)

MySQL服务的登录和退出
方式一:通过mysql自带的客户端
只限于root用户

  1. 方式二:通过windows自带的客户端
  2. 登录:
  3. mysql 【-h主机名 -P端口号 】-u用户名 -p密码
  4. 退出:
  5. exitctrl+C

MySQL的常见命令

  1. 1.查看当前所有的数据库
  2. show databases;
  3. 2.打开指定的库
  4. use 库名
  5. 3.查看当前库的所有表
  6. show tables;
  7. 4.查看其它库的所有表
  8. show tables from 库名;
  9. 5.创建表
  10. create table 表名(
  11. 列名 列类型,
  12. 列名 列类型,
  13. 。。。
  14. );
  15. 6.查看表结构
  16. desc 表名;
  17. 7.查看服务器的版本
  18. 方式一:登录到mysql服务端
  19. select version();
  20. 方式二:没有登录到mysql服务端
  21. mysql --version
  22. mysql --V

MySQL的语法规范


1.不区分大小写,但建议关键字大写,表名、列名小写
2.每条命令最好用分号结尾
3.每条命令根据需要,可以进行缩进 或换行
4.注释
单行注释:#注释文字
单行注释:— 注释文字
多行注释:/ 注释文字 /

SQL的语言分类


DQL(Data Query Language):数据查询语言
select
DML(Data Manipulate Language):数据操作语言
insert 、update、delete
DDL(Data Define Languge):数据定义语言
create、drop、alter
TCL(Transaction Control Language):事务控制语言
commit、rollback

SQL的常见命令

  1. show databases 查看所有的数据库
  2. use 库名; 打开指定 的库
  3. show tables ; 显示库中的所有表
  4. show tables from 库名;显示指定库中的所有表
  5. create table 表名(
  6. 字段名 字段类型,
  7. 字段名 字段类型
  8. ); 创建表
  9. desc 表名; 查看指定表的结构
  10. select * from 表名;显示表中的所有数据

DQL语言的学习


进阶1:基础查询


语法:
SELECT 要查询的东西
【FROM 表名】;

  1. 类似于Java :System.out.println(要打印的东西);
  2. 特点:
  3. ①通过select查询完的结果 ,是一个虚拟的表格,不是真实存在
  4. 要查询的东西 可以是常量值、可以是表达式、可以是字段、可以是函数

进阶2:条件查询


条件查询:根据条件过滤原始表的数据,查询到想要的数据
语法:
select
要查询的字段|表达式|常量值|函数
from

where
条件 ;

  1. 分类:
  2. 一、条件表达式
  3. 示例:salary>10000
  4. 条件运算符:
  5. > < >= <= = != <>
  6. 二、逻辑表达式
  7. 示例:salary>10000 && salary<20000
  8. 逻辑运算符:
  9. and(&&):两个条件如果同时成立,结果为true,否则为false
  10. or(||):两个条件只要有一个成立,结果为true,否则为false
  11. not(!):如果条件成立,则not后为false,否则为true
  12. 三、模糊查询
  13. 示例:last_name like 'a%'

进阶3:排序查询

  1. 语法:
  2. select
  3. 要查询的东西
  4. from
  5. where
  6. 条件
  7. order by 排序的字段|表达式|函数|别名 asc|desc

进阶4:常见函数


一、单行函数
1、字符函数
concat拼接
substr截取子串
upper转换成大写
lower转换成小写
trim去前后指定的空格和字符
ltrim去左边空格
rtrim去右边空格
replace替换
lpad左填充
rpad右填充
instr返回子串第一次出现的索引
length 获取字节个数

  1. 2、数学函数
  2. round 四舍五入
  3. rand 随机数
  4. floor向下取整
  5. ceil向上取整
  6. mod取余
  7. truncate截断
  8. 3、日期函数
  9. now当前系统日期+时间
  10. curdate当前系统日期
  11. curtime当前系统时间
  12. str_to_date 将字符转换成日期
  13. date_format将日期转换成字符
  14. 4、流程控制函数
  15. if 处理双分支
  16. case语句 处理多分支
  17. 情况1:处理等值判断
  18. 情况2:处理条件判断
  19. 5、其他函数
  20. version版本
  21. database当前库
  22. user当前连接用户

二、分组函数

  1. sum 求和
  2. max 最大值
  3. min 最小值
  4. avg 平均值
  5. count 计数
  6. 特点:
  7. 1、以上五个分组函数都忽略null值,除了count(*)
  8. 2sumavg一般用于处理数值型
  9. maxmincount可以处理任何数据类型
  10. 3、都可以搭配distinct使用,用于统计去重后的结果
  11. 4count的参数可以支持:
  12. 字段、*、常量值,一般放1
  13. 建议使用 count(*)

进阶5:分组查询


语法:
select 查询的字段,分组函数
from 表
group by 分组的字段

  1. 特点:
  2. 1、可以按单个字段分组
  3. 2、和分组函数一同查询的字段最好是分组后的字段
  4. 3、分组筛选
  5. 针对的表 位置 关键字
  6. 分组前筛选: 原始表 group by的前面 where
  7. 分组后筛选: 分组后的结果集 group by的后面 having
  8. 4、可以按多个字段分组,字段之间用逗号隔开
  9. 5、可以支持排序
  10. 6having后可以支持别名

进阶6:多表连接查询

  1. 笛卡尔乘积:如果连接条件省略或无效则会出现
  2. 解决办法:添加上连接条件

一、传统模式下的连接 :等值连接——非等值连接

  1. 1.等值连接的结果 = 多个表的交集
  2. 2.n表连接,至少需要n-1个连接条件
  3. 3.多个表不分主次,没有顺序要求
  4. 4.一般为表起别名,提高阅读性和性能

二、语法:通过join关键字实现连接

  1. 含义:1999年推出的sql语法
  2. 支持:
  3. 等值连接、非等值连接 (内连接)
  4. 外连接
  5. 交叉连接
  6. 语法:
  7. select 字段,...
  8. from 1
  9. inner|left outer|right outer|crossjoin 2 on 连接条件
  10. inner|left outer|right outer|crossjoin 3 on 连接条件
  11. where 筛选条件】
  12. group by 分组字段】
  13. having 分组后的筛选条件】
  14. order by 排序的字段或表达式】
  15. 好处:语句上,连接条件和筛选条件实现了分离,简洁明了!

三、自连接

案例:查询员工名和直接上级的名称

  1. SELECT e.last_name,m.last_name
  2. FROM employees e
  3. JOIN employees m ON e.`manager_id`=m.`employee_id`;
  1. SELECT e.last_name,m.last_name
  2. FROM employees e,employees m
  3. WHERE e.`manager_id`=m.`employee_id`;

进阶7:子查询

含义:

  1. 一条查询语句中又嵌套了另一条完整的select语句,其中被嵌套的select语句,称为子查询或内查询
  2. 在外面的查询语句,称为主查询或外查询

特点:

  1. 1、子查询都放在小括号内
  2. 2、子查询可以放在from后面、select后面、where后面、having后面,但一般放在条件的右侧
  3. 3、子查询优先于主查询执行,主查询使用了子查询的执行结果
  4. 4、子查询根据查询结果的行数不同分为以下两类:
  5. 单行子查询
  6. 结果集只有一行
  7. 一般搭配单行操作符使用:> < = <> >= <=
  8. 非法使用子查询的情况:
  9. a、子查询的结果为一组值
  10. b、子查询的结果为空
  11. 多行子查询
  12. 结果集有多行
  13. 一般搭配多行操作符使用:anyallinnot in
  14. in 属于子查询结果中的任意一个就行
  15. anyall往往可以用其他查询代替

进阶8:分页查询

应用场景:

  1. 实际的web项目中需要根据用户的需求提交对应的分页查询的sql语句

语法:

  1. select 字段|表达式,...
  2. from
  3. where 条件】
  4. group by 分组字段】
  5. having 条件】
  6. order by 排序的字段】
  7. limit 【起始的条目索引,】条目数;

特点:

  1. 1.起始条目索引从0开始
  2. 2.limit子句放在查询语句的最后
  3. 3.公式:select * from limit page-1)*sizePerPage,sizePerPage
  4. 假如:
  5. 每页显示条目数sizePerPage
  6. 要显示的页数 page

进阶9:联合查询

引入:
union 联合、合并

语法:

  1. select 字段|常量|表达式|函数 from 表】 where 条件】 union all
  2. select 字段|常量|表达式|函数 from 表】 where 条件】 union all
  3. select 字段|常量|表达式|函数 from 表】 where 条件】 union all
  4. .....
  5. select 字段|常量|表达式|函数 from 表】 where 条件】

特点:

  1. 1、多条查询语句的查询的列数必须是一致的
  2. 2、多条查询语句的查询的列的类型几乎相同
  3. 3union代表去重,union all代表不去重

DML语言

插入

语法:
insert into 表名(字段名,…)
values(值1,…);

特点:

  1. 1、字段类型和值类型一致或兼容,而且一一对应
  2. 2、可以为空的字段,可以不用插入值,或用null填充
  3. 3、不可以为空的字段,必须插入值
  4. 4、字段个数和值的个数必须一致
  5. 5、字段可以省略,但默认所有字段,并且顺序和表中的存储顺序一致

修改

修改单表语法:

  1. update 表名 set 字段=新值,字段=新值
  2. where 条件】

修改多表语法:

  1. update 1 别名1,表2 别名2
  2. set 字段=新值,字段=新值
  3. where 连接条件
  4. and 筛选条件

删除

方式1:delete语句

单表的删除: ★
delete from 表名 【where 筛选条件】

多表的删除:
delete 别名1,别名2
from 表1 别名1,表2 别名2
where 连接条件
and 筛选条件;

方式2:truncate语句

  1. truncate table 表名

两种方式的区别【面试题】

  1. #1.truncate不能加where条件,而delete可以加where条件
  2. #2.truncate的效率高一丢丢
  3. #3.truncate 删除带自增长的列的表后,如果再插入数据,数据从1开始
  4. #delete 删除带自增长列的表后,如果再插入数据,数据从上一次的断点处开始
  5. #4.truncate删除不能回滚,delete删除可以回滚

DDL语句


库和表的管理


库的管理:

  1. 一、创建库
  2. create database 库名
  3. 二、删除库
  4. drop database 库名

表的管理:
# 1.创建表

  1. CREATE TABLE IF NOT EXISTS stuinfo(
  2. stuId INT,
  3. stuName VARCHAR(20),
  4. gender CHAR,
  5. bornDate DATETIME
  6. );
  7. DESC studentinfo;
  8. #2.修改表 alter
  9. 语法:ALTER TABLE 表名 ADD|MODIFY|DROP|CHANGE COLUMN 字段名 【字段类型】;
  10. #①修改字段名
  11. ALTER TABLE studentinfo CHANGE COLUMN sex gender CHAR;
  12. #②修改表名
  13. ALTER TABLE stuinfo RENAME [TO] studentinfo;
  14. #③修改字段类型和列级约束
  15. ALTER TABLE studentinfo MODIFY COLUMN borndate DATE ;
  16. #④添加字段
  17. ALTER TABLE studentinfo ADD COLUMN email VARCHAR(20) first;
  18. #⑤删除字段
  19. ALTER TABLE studentinfo DROP COLUMN email;
  20. #3.删除表
  21. DROP TABLE [IF EXISTS] studentinfo;

常见类型

  1. 整型:
  2. 小数:
  3. 浮点型
  4. 定点型
  5. 字符型:
  6. 日期型:
  7. Blob类型:

常见约束

  1. NOT NULL
  2. DEFAULT
  3. UNIQUE
  4. CHECK
  5. PRIMARY KEY
  6. FOREIGN KEY

2.一周学习经验分享
感觉学习mysql的话可以在网上像力扣去刷sqlserver 的题让你的sql语句更标准
power designer画er图可以自动生成sql代码,我们可以比较比较区别在哪
3.一周学习不足与需要改进的地方
MySQL和Oracle有些不那么严格的要求,所以有时候写起来就很奇怪,因为不会报错有时候写错了,像没写错一样,还是需要多去验证与优化
4.一周学习状态
因为学习过SQL server和Oracle相对比较轻松,相当于上课就在回忆以前的内容.