Java最全深入分析JavaWeb Item26 -- MySQL 学习笔记_javaweb数据库表item,目前最全的《Java面试题及解析》

最后

面试题文档来啦,内容很多,485页!

由于笔记的内容太多,没办法全部展示出来,下面只截取部分内容展示。

1111道Java工程师必问面试题

MyBatis 27题 + ZooKeeper 25题 + Dubbo 30题:

Elasticsearch 24 题 +Memcached + Redis 40题:

Spring 26 题+ 微服务 27题+ Linux 45题:

Java面试题合集:

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

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


上面程序典型过程性语言 


2、官方提供数据库标准语言 —- 任何数据库都必须支持SQL语法   
 \* 每个数据都应该提供sql扩展,增强sql过程化编程


SQL分类:数据定义语言 DDL 、数据操纵语言 DML 、数据控制语言 DCL   
 有人将select查询语句自成一类 数据查询语言 DQL   
 **DDL**:数据定义语言,定义、修改、删除 数据库内部结构 —- 例如 : 对数据库、数据表 以上操作   
 **DML**:数据操纵语言 ,对数据表记录 增加、删除、修改   
 **DCL**:数据控制语言 用户授权、if 、while、事务管理   
 **DQL**:数据查询语言 select查询语句 


SQL语句使用:数据库操作SQL 、数据表操作SQL 、数据记录操作SQL


### 第一部分:数据库 SQL


##### **1、数据库创建 create database 数据库名称;**


创建一个名称为mydb1的数据库 —– create database mydb1;   
 \* 通过show databases; 查看所有数据库


在创建数据库时,为数据库指定字符集及字符集比较方式 —- 语法: create database 数据库名称 character set 编码集 collate 比较方式;   
 \* 如果不指定字符集和比较方式,使用默认 — 修改utf-8 




---


mysql安装目录   
 bin —- mysql执行程序   
 docs —- 文档   
 share — 各国编码信息   
 data —- 存放mysql 数据文件   
 \* 每个数据库 创建一个同名文件夹,.frm 存放table表结构、ibdata1存放mysql中所有数据表数据记录   
 \* 在数据库每个文件夹中存在db.opt —- 保存数据默认编码集   
 \* win7 数据库文件夹默认 C:\ProgramData\MySQL\MySQL Server 5.5\data




---


创建一个使用utf8字符集的mydb2数据库 —– create database mydb2 character set utf8;()   
 创建一个使用utf8字符集,并带校对规则的mydb3数据库 —– create database mydb3 character set utf8 collate utf8\_unicode\_ci;   
 \* 什么是校对规则? 用于排序 对张三和李四排序,按照拼音排序、按照笔画排序,按照名字数量   
 \* 一个字符集对应很多校对规则 


##### **2、查看和删除数据库**


查看当前数据编码集 show create database 数据库名;   
 查看前面创建的mydb2数据库的定义信息 —– show create database mydb2;


删除数据库:drop database 数据库名称;   
 删除前面创建的mydb1数据库 —– drop database mydb1;


##### **3、修改数据库编码**


语法: alter database 数据库名称 character set 编码集; 


将mydb2 数据库编码集设置gbk ————- alter database mydb2 character set gbk;


##### **4、切换数据库**


如果想对数据库中数据表和数据记录进行操作,必须先切换到指定数据库 —- use 数据库名称;   
 查看当前正在使用数据库 select database(); 


### 第二部分:数据表table —- 表结构SQL


##### **1、创建数据表**


create table 表名(列名 类型(长度),列名 类型(长度) …) character set 编码集;   
 \* 如果不设置编码集,数据表将采用数据库默认字符集 



create table users(
id int,
name varchar(40),
password varchar(40),
birthday date
);


* 所有数据类型中,除了char 、varchar 必须指定长度,其它类型默认长度


数据库类型   
 1) 整数类型 `tinyint (byte) smallint(short) int(int) bigint(long) float double`   
 2) 字符串类型 varchar char 长度取值0-255 —- String   
 varchar变长 varchar(20) 向数据库存入hello ,因为变长,列长度会根据保存内容自动调整   
 char定长 char(8) —- 向数据库存入hello 因为定长 保存hello + 3个空格   
 \* varchar经常使用,char性能更好   
 3) 逻辑性 bit 一位 — boolean \*bit(8)表示8位 等于tinyint ,bit(32) 等于int   
 4) 日期型 `date time datetime timestamp`   
 date 只能保存日期   
 time 只能保存时间   
 datetime 日期和时间都有   
 timestamp 日期和时间都有,自动更新 —- 操作数据表,timestamp字段自动更新当前时间 


5) 大数据类型 text、blob   
 text 文本类型数据,主要存储字符文件 — 文本文件   
 blob 二进制文件 ,存储任何类型文件(音乐、电影)   
 \* blob和text最大类型 longtext longblob 最大可以保存4GB文件 


GB = 1024MB MB=1024KB KB=1024Byte


创建一个员工表employee   
 id 整形   
 name 字符型   
 gender 字符型   
 birthday 日期型   
 entry\_date 日期型   
 job 字符型   
 salary 小数型   
 resume 大文本型



create table employee (
id int,
name varchar(40),
gender varchar(10),
birthday date,
entry_date date,
job varchar(20),
salary double,
resume longtext
);


##### **2、通过desc语句 查看表结构**


语法:desc 表名; 


单表约束:主键约束(唯一标识一条记录) 唯一约束(该字段内容不允许重复) 非空约束(值不能为空)   
 主键约束—– primary key 不能为空、不能重复   
 \* 主键数字类型,一般设置主键自动增长 mysql设置自动增长 auto\_increment   
 唯一约束 —– unique 一张表只有最重要那个字段才能作为主键   
 非空 —– not null



create table employee (
id int primary key not null auto_increment ,
name varchar(40) unique not null,
gender varchar(10) not null,
birthday date not null,
entry_date date not null,
job varchar(20) not null,
salary double not null,
resume longtext not null
);


##### **3、数据表结构修改**


向已有数据表添加一列 :`alter table 表名` **add** `列名 类型(长度) 约束;`   
 改变已有数据表一列类型、长度: `alter table 表名` **modify** `列名 类型(长度) 约束;`   
 改变已有数据表一列的名称 : `alter table 表名` **change** `旧列名 新列名 类型(长度) 约束;`   
 删除已有一列 : `alter table 表名` **drop** `列名`;   
 修改表名: **rename** `table 旧表名 to 新表名;`   
 修改表的字符集:alter table student character set utf8;


练习   
 在上面员工表的基本上增加一个image列 —– alter table employee add image varchar(255);   
 修改job列,使其长度为60 —— alter table employee modify job varchar(60) not null;   
 删除gender列。—— alter table employee drop gender;   
 表名改为user。 —– rename table employee to user;   
 修改表的字符集为utf8 —- alter table user character set utf8;   
 \* show create table user;   
 列名name修改为username —- alter table user change name username varchar(40) unique not null;


##### **4、数据表删除**


语法: drop table 表名;   
 \* show tables; 查看当前数据 中所有表


### 第三部分:对数据表中数据记录 进行 增删改查


##### **1、表记录的插入**


语法:`insert into 表名(列名,列名, .... ) values(值, 值, ....)` 【官方写法】   
 \* 值个数应该列个数相同,值顺序和列顺序相同,值类型和列字段类型匹配 


步骤


1) 插入数据



insert into employee(id,name,gender,birthday, entry_date,job,salary,resume) values(null,‘zs’,‘male’,‘1990-01-10’,‘2012-10-10’,‘hr’,3000,‘He is a good man!’);


* 插入数据时,字符串添加 单引号 ” —- 字符和日期型数据应包含在单引号中



insert into employee(id,name,gender,birthday, entry_date,job,salary,resume) values(null,‘lisi’,‘male’,‘1980-01-10’,‘2000-10-10’,‘manager’,8000,‘He is a very good man!’);



insert into employee values(null,‘wangwu’,‘female’,‘1977-10-08’,‘1999-11-12’,‘BOSS’,100000,‘He is BOSS’);


* 在插入数据时,如果有些列存在默认值或者可以为null ,插入省略部分列 。



create table person(
id int primary key not null auto_increment,
name varchar(40) not null,
introduce varchar(255)
);


`insert into person(name) values('zs');` — 这里只要写不能为空列 就可以了【经常用】


* 再插入语句时,省略所有列名   
 `insert into person values(null,'lisi',null)`; —- 省略所有列名,必须为所有列提供value值,按照数据表中列顺序【推荐写法】
* 插入数据后,通过select \* from 表名; ——- 查询插入的数据


插入数据时,**中文乱码问题**



insert into employee values(null,‘小丽’,‘female’,‘1995-10-08’,‘2015-11-12’,‘Sales’,2000,‘是一个有潜质的女孩子!’);


* 查看数据库相关编码集 `show variables like 'character%';`
* 使用mysql客户端 — 黑色窗口界面使用gbk输入方式


mysql有六处使用了字符集,分别为:client 、connection、database、results、server 、system。   
 服务器端相关:database server system(永远无法修改 就是utf-8)   
 客户端相关 connection client results   
 解决插入乱码问题:将客户端相关三个编码集设置 gbk   
 `set names gbk;` —– 快速设置客户端相关三个编码集 (临时设置当前窗口编码集)


修改mysql 配置文件,永久改变客户端编码集 —– `mysql/my.ini`   
 [mysql] —- 客户端配置 ===》将客户端的编码方式改为gbk;   
 [mysqld] —- 服务器端配置 


##### **2、数据表记录修改操作 update 语句**


语法: `update 表名 set 列名=值,列名=值 where条件语句`


* 没有where语句,对所有数据行进行更新



update employee set salary = 5000 ; ---- 修改所有员工工资5000


练习   
 将所有员工薪水修改为5000元。 —— `update employee set salary = 5000 ;`   
 将姓名为’zs’的员工薪水修改为3000元。`update employee set salary = 3000 where name = 'zs';`   
 \* `update employee set salary = 3000 where binary name = 'ZS';` —- 条件比较前添加 binary 使比较更加精确严格   
 将姓名为’lisi’的员工薪水修改为4000元,job改为ccc。 ——— `update employee set salary = 4000, job='ccc' where binary name = 'lisi';`   
 将wangwu的薪水在原有基础上增加1000元。——- `update employee set salary = salary+1000 where name = 'wangwu';`


##### **3、数据表记录通过delete语句进行删除**


语法:`delete from 表名 where 条件语句;`


删除一个表所有记录 truncate 表名; 效果与 delete from 表名; 


**truncate与delete 使用上区别 ?**   
 truncate 删除记录后不可恢复的,不受事务管理,原理:先删除整个表,重新创建   
 delete 可以被事务管理 ,在事务中删除数据可以回滚恢复,原理: 一行一行删除数据记录   
 truncate 删除所有记录性能上 好于 delete


练习:   
 删除表中名称为’zs’的记录 。 —- `delete from employee where name='zs';`   
 删除表中所有记录。 —- `delete from employee;`   
 \* 演示 事务的回滚 ,通过delete在事务中删除可以恢复的



mysql> start transaction;
Query OK, 0 rows affected (0.00 sec)

mysql> delete from employee;
Query OK, 3 rows affected (0.00 sec)

mysql> select * from employee;
Empty set (0.00 sec)

mysql> rollback;


使用truncate删除表中记录。—–truncate employee; 数据永远删除,不会恢复


##### **4、数据记录的查询**


语法:`select * | 指定列名,列名 from 表名;`   
 1) 基本查询



select * from employee; ---- 查看当前数据表所有记录
select gender from employee; ----- 查看employee的 gender列数据
select distinct gender from employee; ---- 查看employee表所有性别 ,排重


创建scores



create table scores(id int primary key not null auto_increment,name varchar(40),math double,chinese double,english double);

insert into scores values(null,‘老黎’,85,90,76);
insert into scores values(null,‘老刘’,70,65,80);
insert into scores values(null,‘老冯’,60,70,65);


练习:   
 查询表中所有学生的信息。—— `select * from scores;`   
 查询表中所有学生的姓名和对应的英语成绩。——- `select name,english from scores;`   
 过滤表中重复数据。—– `select distinct * from scores;`


2) 查询时进行运算



select 列名运算表达式 from 表名;
select 列名 【as】 列别名 from 表名;


练习   
 在所有学生英语分数上加10分特长分。`select name,english+10 from scores;`   
 统计每个学生的总分。 `select name,math+chinese+english from scores;`   
 使用别名表示学生分数。`select name,math+chinese+english as 总分 from scores;`   
 \* 起别名时 as 可以省略 select name 姓名 from scores;   
 \* **select name math from scores; select name,math from scores;注意区别这两个**


3) 查询数据时通过比较运算添加where条件 过滤查询内容   
 使用where子句,进行过滤查询。练习:   
 查询姓名为老黎的学生总成绩 —- `select math+chinese+english from scores where name='老黎';`   
 查询英语成绩大于80分的同学 —- `select * from scores where english > 80;`   
 查询总分大于200分的所有同学 —- `select * from scores where math+chinese+english > 200;`


4) select 其它比较运算   
 查询语文成绩不为90 分学生 `select * from scores where chinese <> 90;`


**between …and…** 查询语文在70-80之间同学 



select * from scores where chinese<=80 and chinese>=70;
select * from scores where chinese between 70 and 80 ; ---- 先写小的后写大的


**in(set)** 在几个固定值中取值 `select * from scores where chinese in (70,80,90);` —- 查询语文成绩为70分或者80分或者90分同学 


**like** 模糊查询 `select * from scores where name like '老%';`   
 查询学生中姓 老所有人 —– % 代表任意select \* from scores where name like ‘老*‘;生中 姓 老 名字为两个字 学生 ——*  代表任意单个字符 


**is null** 判断一列是否为空 



insert into scores values(null,‘小丽’,null,80,90);


查询无数学成绩所有人 `select * from scores where math is null;`   
 查询有数学成绩人 `select * from scores where math is not null;`



  • select * from scores where 1; — 在编程语言中 1 ---- true
    select * from scores where 0 ; ---- 0 — false

* null 代表1/2 —- 任何表达式和null 进行逻辑运算 结果都是false


逻辑运算中 and 、or —- and 和 or谁优先级高 ?



select * from scores where 2>1 or 2>3 and 3>4 ; ---- and先执行 SQL攻击


练习:   
 查询英语分数在 80-90之间的同学。 `select * from scores where english between 80 and 90;`   
 查询数学分数为89,90,91的同学。 `select * from scores where math in (89,90,91);`   
 查询所有姓李的学生成绩。 `select * from scores where name like '李%';`   
 查询数学分>80,语文分>80的同学。 `select * from scores where math>80 and chinese >80;`


5) 对select查询结果通过 **order by** 语句进行排序   
 语法 : `select * from 表名 where条件语句 order by 列名 asc|desc , 列名 asc|desc ... ;`


练习:   
 对数学成绩排序后输出。`select * from scores order by math; 默认是升序`   
 对总分排序按从高到低的顺序输出 `select name,chinese+math+english from scores order by chinese+math+english desc;`   
 对姓老的学生数学成绩排序输出 `select * from scores where name like '老%' order by math desc;` 




---


6) **聚集函数**(分组函数) —- 结合查询分组进行数据统计   
 **count**返回查询结果记录条数 ===>统计个数的函数   
 练习:   
 统计一个班级共有多少学生? `select count(*) from scores;`   
 统计数学成绩小于80的学生有多少个? `select count(*) from scores where math<80;`   
 统计总分大于250的人数有多少? `select count(*) from scores where math+chinese+english>250;`


**sum** 对一列的数据求和   
 统计一个班级数学总成绩? `select sum(math) from scores;`   
 统计一个班级语文、英语、数学各科的总成绩 `select sum(math),sum(chinese),sum(english) from scores;`   
 统计一个班级语文、英语、数学的成绩总和 `select sum(math+ chinese + english) from scores;`   
 统计一个班级语文成绩平均分 `select sum(chinese)/count(chinese) from scores;`   
 \* sum求和时 null不运算 



# 总结

谈到面试,其实说白了就是刷题刷题刷题,天天作死的刷。。。。。

为了准备这个“金三银四”的春招,狂刷一个月的题,狂补超多的漏洞知识,像这次美团面试问的算法、数据库、Redis、设计模式等这些题目都是我刷到过的

**并且我也将自己刷的题全部整理成了PDF或者Word文档(含详细答案解析)**

![我的美团offer凉凉了?开发工程师(Java岗)三面结束等通知...](https://img-blog.csdnimg.cn/img_convert/099bcd1c9c925e6e9cad20851883cbe1.webp?x-oss-process=image/format,png)

66个Java面试知识点

**架构专题(MySQL,Java,Redis,线程,并发,设计模式,Nginx,Linux,框架,微服务等)+大厂面试题详解(百度,阿里,腾讯,华为,迅雷,网易,中兴,北京中软等)**

![我的美团offer凉凉了?开发工程师(Java岗)三面结束等通知...](https://img-blog.csdnimg.cn/img_convert/e4709c74663b5874d9c98a8b558e5b11.webp?x-oss-process=image/format,png)

**算法刷题(PDF)**

![我的美团offer凉凉了?开发工程师(Java岗)三面结束等通知...](https://img-blog.csdnimg.cn/img_convert/151bd00bf8e2e9f58820556484d0911b.webp?x-oss-process=image/format,png)

> **本文已被[CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)收录**

**[需要这份系统化的资料的朋友,可以点击这里获取](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)**

is、设计模式等这些题目都是我刷到过的

**并且我也将自己刷的题全部整理成了PDF或者Word文档(含详细答案解析)**

[外链图片转存中...(img-wPBSkbyO-1715351152808)]

66个Java面试知识点

**架构专题(MySQL,Java,Redis,线程,并发,设计模式,Nginx,Linux,框架,微服务等)+大厂面试题详解(百度,阿里,腾讯,华为,迅雷,网易,中兴,北京中软等)**

[外链图片转存中...(img-VMpjO1Oi-1715351152808)]

**算法刷题(PDF)**

[外链图片转存中...(img-8fJwazqt-1715351152808)]

> **本文已被[CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)收录**

**[需要这份系统化的资料的朋友,可以点击这里获取](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)**

  • 9
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值