最全《遇见狂神说》MySQL从入门到删库(一),顺利收获Offer

最后

针对以上面试题,小编已经把面试题+答案整理好了

最新大厂必问微服务面试题汇总:SpringCloud、Boot、Dubbo

最新大厂必问微服务面试题汇总:SpringCloud、Boot、Dubbo

最新大厂必问微服务面试题汇总:SpringCloud、Boot、Dubbo

面试专题

image

除了以上面试题+答案,小编同时还整理了微服务相关的实战文档也可以分享给大家学习

image

image

image

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

  • change 用来字段重命名,不能修改字段类型和约束

  • modify 不用来字段重命名,只能修改字段类型和约束

删除表

  • 删除表DROP TABLE [IF EXISTS] 表名

– 删除表

DROP TABLE [IF EXISTS] teacher1

2.MySQL数据管理

=============================================================================

2.1 外键(了解)


  • 创建外键

方式一: 创建子表同时创建外键

  • 学生表的gradeid字段,要去引用年级表的 gradeid

    1. 定义外键key
    1. 给这个外键添加约束(执行引用)

– 年级表

create table grade(

gradeid int(10) not null auto_increment comment ‘年纪id’,

gradename varchar(50) noy null comment ‘年级名称’,

primary key(gradeid)

)engine=innodb default charset = utf8;

– 学生表

– 学生表的gradeid字段,要去引用年级表的 gradeid

– 1. 定义外键key

– 2. 给这个外键添加约束(执行引用)

create table if not exists student (

id INT(4) NOT NULL AUTO_INCREMENT COMMENT ‘学号’,

name varchar(30) NOT NULL DEFAULT ‘匿名’ COMMENT ‘姓名’,

pwd varchar(20) NOT NULL DEFAULT ‘123456’ COMMENT ‘密码’,

sex varchar(2) NOT NULL DEFAULT ‘女’ COMMENT ‘性别’,

birthday DATETIME DEFAULT NULL COMMENT ‘出生日期’,

address varchar(100) DEFAULT NULL COMMENT ‘家庭住址’,

gradeid int(10) noy null comment ‘学生的年级’,

email varchar(50) DEFAULT NULL COMMENT ‘邮箱’,

PRIMARY KEY(id),

– 1. 定义外键 FK_gradeid

KEY FK_gradeid(gradeid),

– 2. 给这个外键添加约束

CONSTRAINT FK_gradeid FOREIGN KEY(gradeid) references grade(gradeid)

)ENGINE = INNODB DEFAULT CHARSET = utf8;

方式二:创建表成功后,添加外键约束

– 创建表的时候没有外键关系

alter table studnet add constraint FK_gradeid foreign key(gradeid) references grade(gradeid),

以上操作都是物理外键,数据库级别的外键,我们不建议使用!

最佳实践

  • 数据库就是单纯的表,只用来存数据,只有行(数据)和列(字段)

  • 我们想使用多张表的数据,想使用外键(程序去实现)

注意:删除具有主外键关系的表时,要先删子表,后删主表

2.2 DML语言(记住)


数据库意义:数据存储,数据管理

DML语言:数据操作语言

  • Insert

  • update

  • delete

2.3 添加


insert

语法

– 插入数据(添加)

insert into 表名([字段名1,字段2,字段3]) values(‘值1’),(‘值2’),(‘值3’);

注意

  • 字段或值之间用英文逗号隔开

  • 可同时插入多条数据,values 后用英文逗号隔开

  • 由于主键自增我们可以省略(如果不写表的字段,它就会一一匹配)

  • 一般写插入语句,我们一定要数据和字段一一对应!

  • 字段是可以省略的,但是后面的值必须要一一对应

– 向grade表中的gradename字段插入

insert into grade(gradename) values(‘大四’);

– 插入多个字段

insert into grade(gradename)

values(‘大二’),(‘大一’);

– 数据和字段一一对应!

insert into student(name,pwd,sex) values(‘张三’,‘aaaa’,‘男’);

2.4 修改


update

语法

update 表名 set colnum_name = value,[…] where [条件]

注意事项

  1. colnum_name 是数据库的列,尽量带上``

  2. 条件,筛选的条件,如果没有指定,则会修改所有的列

  3. value ,是一个具体的值,也可以是一个变量

  4. 多个设置的属性之间,使用英文逗号隔开

update student set name=‘狂神’ where id = 1;

– 不指定条件的情况下,会改动所有表!

update student set name=‘长江7号’;

– 修改多个属性

update student set name=‘狂神’,email=‘12123@qq.com’ where id between 2 and 5;

– 通过多个条件定位数据

update student set name=‘长江7号’ where name=‘狂神’ and sex=‘男’;

| 操作符 | 含义 | 范围 | 结果 |

| — | — | — | — |

| = | 等于 | 5=6 | false |

| <>或 != | 不等于 | 5<>6 | true |

| > | 大于 | | |

| < | 小于 | | |

| <= | 小于等于 | | |

| >= | 大于等于 | | |

| between…and… | 在某个范围内 | [2,5] | |

| and | && | 5>1 and 1>2 | false |

| or | || | 5>1or 1>2 | true |

2.5 删除


delete 命令

语法: delete from 表名 [where 条件]

– 删除数据,如不指定条件则删除该表的所有列数据

delete from student;

– 删除指定数据

delete from student where id = 1;

truncate 命令

作用: 完全清空一个数据库表,表的结构和索引约束不会变

– 清空student 表

truncate student;

delete 和 truncate 区别

  • 相同点: 都能删除数据,都不会删除表结构,但truncate速度更快

  • 不同点

  • truncate 重新设置 自增列,计数器会归零

  • truncate 不会影响事务

3. DQL 查询数据(最重点)

===================================================================================

3.1DQL


(Date Query Language): 数据查询语言

  • 所有的查询操作都用它 ,select

  • 简单 和 复杂的查询都能做

  • 数据库中最核心的语言,最重要的语句

3.2Select语句


基本语法select 字段 from 表

– 查询全部学生

select * from student;

– 查询指定字段

select StudentNo,StudentName from student;

AS子句作为别名

作用:

  • 可给数据列取一个新别名

  • 可给表取一个新别名

  • 也可以给查询结果取一个新别名

– 别名,给结果起一个名字 AS 可以给字段起别名,也可以给表起别名(AS关键词可以省略)

select StudentNo As 学号,StudentName AS 学生姓名 from student AS S

– 函数 拼接字符串Concat(a,b)

select concat(‘姓名’,StudentName) AS 新名字 from student

语法: SELECT 字段1,字段2,..... FROM 表

3.3去重distinct


作用:去掉 select 查询返回的记录结果中重复的记录(返回所有列的值都相同),只返回一条

– 查询一下有哪些同学参加了考试,成绩

select * from result; – 查询全部的考试成绩

select StudentNo from result; – 查询有哪些同学参加了考试

select distinct StudentNo from result; – 发现重复数据,去重

数据库的列(表达式)

  • select 表达式 from 表

  • 数据库中的表达式: 文本值 ,列 , Null ,函数 , 计算表达式 , 系统变量

select version() – 查询系统版本(函数)

select 100*3-1 AS 计算结果 – 用来计算(表达式)

select @@auto_increment_increment – 查询自增的步长(变量)

– 学员考试成绩 + 1 查看

select StudentNo,StudentResult + 1 AS ‘提分后’ from result;

3.4where条件子句


作用: 检索数据中符合条件的值

搜索的条件由一个或者多个表达式组成,结果为布尔值!

逻辑运算符

| 运算符 | 语法 | 描述 |

| — | — | — |

| and && | a and b a&&b | 逻辑与,两个都为真,结果为真 |

| or || | a or b a || b | 逻辑或,其中一个为真,则结果为真 |

| Not ! | not a !a | 逻辑非,真为假,假为真 |

尽量使用英文字母

– 查询考试成绩在 95 ~ 100分之间的

select studentNo,StudentResult

from result

where StudentResult>=95 and StudentResult<=100

3.5模糊查询


模糊查询:比较运算符

| 运算符 | 语法 | 描述 |

| — | — | — |

| is null | a is null | 如果操作符为null,结果为真 |

| is not null | a is not null | 如果操作符不为null,结果为真 |

| between | a between and c | 若a在b和c之间,则结果为真 |

| like | a like b | SQL匹配,如果a匹配b,则结果为真 |

| in | a in(a1,a2,a3…) | 假设a在a1或者a2…,则结果为真 |

– 除了1000号同学,要其他同学的成绩

SELECT studentno,studentresult

FROM result

WHERE studentno!=1000;

– 使用NOT

SELECT studentno,studentresult

FROM result

WHERE NOT studentno=1000;

– 查询 1001,1002,1003号学员

select Sno,Sname

from student

where Sno in (1001,1002,1003);

– 查询在北京的学生

select Sno,Sname

from student

where Address in (‘安徽’,‘河南洛阳’);

– 查询姓刘的同学的学号及姓名

– like结合使用的通配符 : % (代表0到任意个字符) _ (一个字符)

SELECT studentno,studentname FROM student

WHERE studentname LIKE ‘刘%’;

– 查询姓刘的同学,后面只有两个字的

SELECT studentno,studentname FROM student

WHERE studentname LIKE ‘刘__’;

– 查询姓名中含有 嘉 字的

SELECT studentno,studentname FROM student

WHERE studentname LIKE ‘%嘉%’;

– 查询出生日期没有填写的同学

– 不能直接写=NULL , 这是代表错误的 , 用 is null

SELECT studentname FROM student

WHERE BornDate IS NULL;

– 查询出生日期填写的同学

SELECT studentname FROM student

WHERE BornDate IS NOT NULL;

– 查询没有写家庭住址的同学(空字符串不等于null)

SELECT studentname FROM student

WHERE Address=‘’ OR Address IS NULL;

  • 注意: % _只能在like里面使用

  • in 里面是确切的集合

3.6连接查询


  • 内连接inner join :查询两个表中的结果集中的交集

  • 左外连接left join:以左表为基准,右边表来一一匹配,匹配不上的,返回左表的记录,右表以NULL填充

  • 右外连接right join:以右表为基准,左边表来一一匹配,匹配不上的,返回右表的记录,左表以NULL填充

数据库的搭建如下:

  • 创建一个school数据库

  • 创建学生表student

  • 创建年级表grade

  • 创建科目表subject

  • 创建成绩表result

– 创建一个school数据库

CREATE DATABASE IF NOT EXISTS school;

– 创建学生表

CREATE TABLE IF NOT EXISTS student(

studentno INT(4) NOT NULL COMMENT ‘学号’,

loginpwd VARCHAR(20) DEFAULT NULL,

studentname VARCHAR(20) DEFAULT NULL COMMENT ‘学生姓名’,

sex TINYINT(1) DEFAULT NULL COMMENT ‘性别,0或1’,

gradeid INT(11) DEFAULT NULL COMMENT ‘年级编号’,

phone VARCHAR(50) NOT NULL COMMENT ‘联系电话,允许为空’,

address VARCHAR(255) NOT NULL COMMENT ‘地址,允许为空’,

borndate DATETIME DEFAULT NULL COMMENT ‘出生时间’,

email VARCHAR (50) NOT NULL COMMENT ‘邮箱账号允许为空’,

identitycard VARCHAR(18) DEFAULT NULL COMMENT ‘身份证号’,

PRIMARY KEY (studentno),

UNIQUE KEY identitycard(identitycard),

KEY email (email)

)ENGINE=MYISAM DEFAULT CHARSET=utf8;

– 创建年级表

CREATE TABLE IF NOT EXISTS grade(

gradeid INT(11) NOT NULL AUTO_INCREMENT COMMENT ‘年级编号’,

gradename VARCHAR(50) NOT NULL COMMENT ‘年级名称’,

PRIMARY KEY (gradeid)

) ENGINE=INNODB AUTO_INCREMENT = 6 DEFAULT CHARSET = utf8;

– 创建科目表

CREATE TABLE IF NOT EXISTS subject(

subjectnoINT(11) NOT NULL AUTO_INCREMENT COMMENT ‘课程编号’,

subjectname VARCHAR(50) DEFAULT NULL COMMENT ‘课程名称’,

classhour INT(4) DEFAULT NULL COMMENT ‘学时’,

gradeid INT(4) DEFAULT NULL COMMENT ‘年级编号’,

PRIMARY KEY (subjectno)

)ENGINE = INNODB AUTO_INCREMENT = 19 DEFAULT CHARSET = utf8;

– 创建成绩表

CREATE TABLE IF NOT EXISTS result(

studentno INT(4) NOT NULL COMMENT ‘学号’,

subjectno INT(4) NOT NULL COMMENT ‘课程编号’,

examdate DATETIME NOT NULL COMMENT ‘考试日期’,

studentresult INT (4) NOT NULL COMMENT ‘考试成绩’,

KEY subjectno (subjectno)

)ENGINE = INNODB DEFAULT CHARSET = utf8;

JOIN 对比

在这里插入图片描述

inner join

  • 分析查询的字段来自哪些表 (来自两个表就用连接查询)

  • 确定交叉点(这两个表中哪个数据是相同的)

  • 判断条件: 学生表中的 studentNo = 成绩表中的 studentNo

在这里插入图片描述

查询参加了考试的同学的学号,姓名,科目编号,分数

  1. 学号,姓名 studentNo,studentName 在student表中

  2. 科目编号,分数 SubjectNo,StudentResult 在result表中

  3. 两个表中 studentNo 是相同的

select t1.studentNo,studentName,SubjectNo,StudentResult

from student as t1

inner join result as t2

– 既在student表里查,student表连接result,

– 两个表连起来,都有studentNo,所以要指向一个表的studentNo查

on t1.studentNo = t2.studentNo;

right join

select t1.studentNo,studentName,SubjectNo,StudentResult

from student t1

right join result t2

on t1.studentNo = t2.studentNo;

left join

select t1.studentNo,studentName,SubjectNo,StudentResult

from student t1

left join result t2

on t1.studentNo = t2.studentNo;

  • 左表是 student,先从 student里面查学生学号,学生姓名

  • 即使右表result表中没有和学生学号,学生姓名匹配的科目编号,分数

  • 也会返回所有的值,只是科目编号、分数为null

| studentNo | studentName | SubjectNo | StudentResult |

| — | — | — | — |

| 1001 | 孙大圣 | null | null |

3.7总结与区别


| 操作 | 描述 | |

| — | — | — |

| inner join | 如果表中至少有一个匹配,就返回行 | |

| left join | 会从左表中返回所有的值,即使右表中没有匹配 | |

| right join | 会从右表中返回所有的值,即使左表中没有匹配 | |

– 查询缺考的同学

select t1.studentNo,studentName,SubjectNo,StudentResult

from student t1

left join result t2

on t1.studentNo = t2.studentNo

where StudentResult = null;

– 查询了参加考试的同学信息: 学号,学生姓名,科目名,考试成绩

– 1.学号,学生姓名 student表

– 2.科目名 subject表

– 3.分数 result表

– 具体实现

select t1.studentNo,studentName,SubjectName,StudentResult

from student t1

right join result t2

on t1.studentNo = t2.studentNo

– 查询考试的信息,要以考试那张表去连,左连就是以左边的表为基准

– 再在上面所查询的结果中连接第三张表

inner join subject t3

on t2.SubjectNo = t3.SubjectNo;

语法

  • join(连接的表) on(判断条件) 连接查询

  • where 等值查询

3.8自连接(了解)


数据库建立:

  • 创建分类表

  • 在分类表中插入数据

– 创建分类表

CREATE TABLE IF NOT EXISTS category (

categoryid INT(10) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT ‘主题ID’,

pid INT(10) NOT NULL COMMENT ‘父ID’,

categoryName VARCHAR(50) NOT NULL COMMENT ‘主题名字’,

PRIMARY KEY(categoryid)

) ENGINE=INNODB AUTO_INCREMENT=9 DEFAULT CHARSET = utf8;

– 在分类表中插入

INSERT INTO category(categoryid,pid,categoryName)

VALUES

(2,1,‘信息技术’),

(3,1,‘软件开发’),

(4,3,‘数据库’),

(5,1,‘美术设计’),

(6,3,‘web开发’),

(7,5,‘PS技术’),

(8,2,‘办公信息’);

在这里插入图片描述


  • 自己的表和自己的表连接,一张表拆为两张一样的表即可

父类

| categoryid | categoryName |

| — | — |

| 2 | 信息技术 |

| 3 | 软件开发 |

| 5 | 美术设计 |

子类

| pid | categoryid | categoryName |

| — | — | — |

| 3 | 4 | 数据库 |

| 2 | 8 | 办公信息 |

| 3 | 6 | web开发 |

| 5 | 7 | ps技术 |

解释:数据库的pid是3,说明数据库在软件开发下,数据库自己的分类idcategoryid是4

操作:查询父类对应的子类关系

| 父类 | 子类 |

| — | — |

| 信息技术 | 办公信息 |

| 软件开发 | 数据库 |

| 软件开发 | web开发 |

| 美术设计 | ps技术 |

查询父类对应的子类关系

select a.categoryName AS ‘父栏目’,b.categoryName AS ‘子栏目’

from category AS a,category AS b

where a.categoryid = b.pid;

在这里插入图片描述

3.9分页和排序


  • 分页 limit

  • 排序 order by

  • 升序:ASC

  • 降序:DESC


排序语法: order by 通过哪个字段排序 怎么排

– 通过科目成绩升序排列

order by StudentResult ASC;


分页语法

  • 完整语法:limit 起始下标,页面的大小

  • 缺省语法:limit 5 这是取前5

  • 注意:mysql当中limitorder by之后执行!!

  • 第一页 ,显示5条数据

limit 0,5;

  • 第二页 ,显示5条数据

limit 5,5;

  • 第三页

limit 10,5;

  • 第n页

limit(n-1) * pageSize,pageSize

  • pageSize:页面大小

最后

每年转战互联网行业的人很多,说白了也是冲着高薪去的,不管你是即将步入这个行业还是想转行,学习是必不可少的。作为一个Java开发,学习成了日常生活的一部分,不学习你就会被这个行业淘汰,这也是这个行业残酷的现实。

如果你对Java感兴趣,想要转行改变自己,那就要趁着机遇行动起来。或许,这份限量版的Java零基础宝典能够对你有所帮助。

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

t a.categoryName AS ‘父栏目’,b.categoryName AS ‘子栏目’

from category AS a,category AS b

where a.categoryid = b.pid;

在这里插入图片描述

3.9分页和排序


  • 分页 limit

  • 排序 order by

  • 升序:ASC

  • 降序:DESC


排序语法: order by 通过哪个字段排序 怎么排

– 通过科目成绩升序排列

order by StudentResult ASC;


分页语法

  • 完整语法:limit 起始下标,页面的大小

  • 缺省语法:limit 5 这是取前5

  • 注意:mysql当中limitorder by之后执行!!

  • 第一页 ,显示5条数据

limit 0,5;

  • 第二页 ,显示5条数据

limit 5,5;

  • 第三页

limit 10,5;

  • 第n页

limit(n-1) * pageSize,pageSize

  • pageSize:页面大小

最后

每年转战互联网行业的人很多,说白了也是冲着高薪去的,不管你是即将步入这个行业还是想转行,学习是必不可少的。作为一个Java开发,学习成了日常生活的一部分,不学习你就会被这个行业淘汰,这也是这个行业残酷的现实。

如果你对Java感兴趣,想要转行改变自己,那就要趁着机遇行动起来。或许,这份限量版的Java零基础宝典能够对你有所帮助。

[外链图片转存中…(img-We0D9n6p-1715586012371)]

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

  • 11
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
狂神MySQL是一门非常常用的数据库技术,在软件开发中被广泛应用。MySQL是一种关系型数据库管理系统,支持多线程、多用户的访问。MySQL具有很高的可伸缩性和灵活性,可以根据应用的需求进行配置和扩展。 狂神MySQL笔记PTF非常有价值,主要包括以下几个方面: 首先,笔记中详细介绍了MySQL的安装和配置。MySQL的安装过程可能会遇到一些问题,狂神通过笔记中的步骤和注意事项,帮助读者顺利完成安装和配置,并且讲解了一些常见的配置选项的意义和用法。 其次,笔记中深入解析了MySQL的基本概念和语法。MySQL是一种SQL数据库,而SQL语言是与之交互的重要工具。狂神通过简洁明了的语言和实例演示,教会读者如何创建数据库、表格,以及如何插入、更新和删除数据等基本操作。 再次,狂神在笔记中重点讲解了MySQL的高级应用和优化技巧。MySQL在大型项目中可能面临很高的负载和并发访问,因此如何优化数据库查询性能是非常重要的。笔记中包含了索引的创建和使用、查询优化的技巧、事务管理等方面的内容,帮助读者提高数据库的效率和性能。 最后,笔记中还包含了一些MySQL与其他工具和技术的整合,比如MySQLJava的结合、MySQL的备份与恢复、MySQL集群等。通过学习这些内容,读者可以更全面地掌握MySQL在现实项目中的应用。 总之,狂神MySQL笔记PTF是一份非常实用且全面的学习资料,不仅帮助初学者快速入门,也能让有一定经验的开发者深入了解MySQL的各个方面。它的存在对于学习和使用MySQL的人来是一份非常宝贵的资料。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值