MySQL快速入门(一)—Java进阶学习第十五天

文档版本 开发工具 测试平台 工程名字 日期 作者 备注
V1.0 2016.05.09 lutianfei none

数据库简介

  • 什么是数据库

    • 数据库就是一个文件系统,但是访问的时候需要使用标准SQL语句来访问数据。
  • 关系型数据库
    • 存储的都是实体与实体之间的关系
  • ER模型图

  • 常见的数据库
  • Oracle : 甲骨文公司的数据库产品,大型的收费的数据库。
  • SQLServer : 微软公司的数据库产品,中型的收费的数据库。
  • MySQL : 是开源的,免费的数据库产品。在5.x版本是免费的,6.x是收费的。
  • DB2 : IBM公司的数据库产品,大型的收费的数据库。
  • SyBASE : 已退出了历史舞台,PowerDigener(数据库建模工具)

MySQL数据库

MySQL的简介

MySQL完全卸载
  • 找到MySQL的安装路径,找到my.ini的配置文件。

    • basedir=”C:/Program Files (x86)/MySQL/MySQL Server 5.5/” 安装的路径(删除)
    • datadir=”C:/ProgramData/MySQL/MySQL Server 5.5/Data/” MySQL存储数据的路径(删除)
  • 通过控制面板卸载MySQL
  • 找到上面的两个路径,删除。

MySQL 安装与配置

  • 注:

    • 安装路径不要有中文。
    • MySQL默认端口是3306,不要修改。
    • 设置MySQL的编码集(采用UTF-8的编码)
    • 要把Include Bin Directory in Windows PATH勾选上。
    • 设置用户名的密码:两行都是密码,第一行是密码,第二行是确认密码。
  • 访问:
    • cmd > 输入命令 mysql -u root -p 回车
    • 输入密码 回车

密码重置

  • 1.停止mysql服务:

    • services.msc 进入到服务界面
  • 2.在cmd>输入一个命令:
    • mysqld –skip-grant-tables (开启一个mysql服务,不需要进行认证.)
  • 3.新打开一个cmd窗口
    • mysql -u root -p 不需要输入密码.就可以进入.
  • 4.输入命令 show databases;查看数据库,输入命令 use mysql;使用mysql数据库。
  • 5.修改密码的语句:
    • update user set password=password(‘root’) WHERE user=’root’;
  • 6.将两个窗口都关闭.
  • 7.任务管理器中结束(mysqld)进程.
  • 8.重启mysql服务

MySQL数据库服务器、数据库和表关系

  • 所谓安装数据库服务器,只是在机器上装了一个数据库管理程序,这个管理程序可以管理多个数据库,一般开发人员会针对每一个应用创建一个数据库。
  • 为保存应用中实体的数据,一般会在数据库创建多个表,以保存程序中实体的数据。
  • 数据库服务器、数据库和表的关系如图所示:

  • 1、Java是使用对象封装数据,例如程序产生了如上所示2个user对象,这些对象的数据要想保存到数据库中,需要在数据库中创建与之对应的表,一个user对象中封装的数据,要保存到数据库中,一般就要在数据库中创建一个与之对应的表。
  • 2、对象的属性定义为表头,对象的数据对应于表中的一条记录。
  • 3、每个对象对应于表中的一条记录。

数据在数据库中的存储方式


SQL语句(重点)

SQL的简介

  • SQL:Structured Query Language, 结构化查询语言
  • 特点:非过程性语言
    • 过程性语言:当前的这条语句执行需要依赖于上一条或几条语句
    • 非过程性语言:写一条语句,就会执行一个结果。
  • 为加强SQL的语言能力,各厂商增强了过程性语言的特征
  • 如Oracle的PL/SQL 过程性处理能力
  • SQL Server、Sybase的T-SQL
  • SQL是用来存取关系数据库的语言,具有查询、操纵、定义和控制关系型数据库的四方面功能

SQL语言分类

  • DDL (数据定义语言)

    • 数据定义语言 - Data Definition Language
    • 用来定义数据库的对象,如数据表视图索引
  • DML (数据操纵语言)(重点)
    • 数据处理语言 - Data Manipulation Language
    • 在数据库表中更新增加删除记录
    • 如 update, insert, delete
  • DCL (数据控制语言)
    • 数据控制语言 – Data Control Language
    • 指用于设置用户权限控制事务语句
    • 如grant,revoke,if…else,while,begin transaction
  • DQL (数据查询语言)(重点)
    • 数据查询语言 – Data Query Language
    • select

数据库(CURD – 增删改查)

创建数据库

  • 语法:

    • create database 数据名称;
    • create database 数据库名称 character set 编码 collate 校对规则;
    • 校对规则:和编码是成对出现的
CREATE TABLE table_name
(
    field1  datatype,
    field2  datatype,
    field3  datatype,
)character set 字符集 collate 校对规则
  • field:指定列名 
  • datatype:指定列类型
  • 练习
  • 创建一个名称为mydb1的数据库。
    • create database mydb1;
  • 创建一个使用utf8字符集的mydb2数据库。
    • create database mydb2 character set ‘utf8’;
  • 创建一个使用utf8字符集,并带校对规则的mydb3数据库。
    • create database mydb3 character set ‘utf8’ collate ‘utf8_bin’;

查看、删除数据库

  • 查看数据库 : show databases;
  • 查询数据库的定义 : show create database 数据库;
  • 删除数据库 : drop database 数据库名称;
  • 练习
  • 查看当前数据库服务器中的所有数据库
    • show databases;
  • 查看前面创建的mydb2数据库的定义信息
    • show create database mydb2;
  • 删除前面创建的mydb1数据库
    • drop database mydb1;

修改数据库

  • 语法:alter database 数据库 character set 编码 collate 校对规则;
  • 练习:查看服务器中的数据库,并把其中某一个库的字符集修改为gbk
    • alter database mydb2 character set ‘gbk’;

其他的操作

  • 切换数据库 : use db_name;
  • 查看当前使用的数据库 : select database();

数据表(CURD–增删改查)

创建表

  • 语法:
    create table 表名(
        字段1 类型(长度) 约束,
        字段2 类型(长度) 约束,
        字段3 类型(长度) 约束,
        字段4 类型(长度) 约束
    );
  • 注意:

    • 表名小括号,后面要有分号。
    • 每一行字段后面要有逗号,但是最后一行没有逗号。
    • 数据的类型后面有长度,如果是字符串类型,长度必须加。如果其他类型可以不加。默认长度。int 默认长度11

MySQL常用数据类型

  • 字符串型

    • VARCHAR、CHAR
    • varchar和char区别:
      • varchar(经常使用) 长度是可变的。 name varchar(8) 存入数据hello,但是如果存入helloworld报错了。
      • char 长度不可变的。 name char(8) 存入的数据hello,如果不够用空格补全。
      • 效率高:char效果。
  • 大数据类型(一般不用)
    • BLOB、TEXT
    • BLOB:二进制文件
    • TEXT:字符
  • 数值型
    • TINYINT 、SMALLINT、INT、BIGINT、FLOAT、DOUBLE
    • java 中 byte short int long float double 与之相对应
  • 逻辑性 对应boolean
    • BIT
  • 日期型
    • DATE、TIME、DATETIME、TIMESTAMP
    • date 只包含日期
    • time 只包含时分秒
    • datetime和timestamp包含日期和时分秒区别:
      • datetime需要手动录入时间。
      • timestamp不传入数据,默认选择当前系统时间。
  • 练习,创建员工表的练习

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

定义单表字段的约束

  • 主键约束(重点)

    • 主键约束 primary key : 信息记录某个字段可以唯一区分其他信息记录,这个字段就可以是主键 (唯一 非空)
    • auto_increment 数据库维护主键。自动增长。
    • primary key:不允许为空,不允许重复
    • 删除主键alter table tablename drop primary key ;
    • 如果主键约束类型为 数值型 int bigint ,添加auto_increment 自动增长
  • 唯一约束
    • 值是唯一的。使用unique声明
  • 非空约束
    • 值不能为空 not null
  • 创建新的标签employee2,把约束加上。
    create table employee2(
        id int primary key auto_increment,
        name varchar(20) unique not null,
        gender varchar(10) not null,
        birthday date not null,
        entry_date date not null,
        job varchar(100) not null,
        salary double not null,
        resume text not null
    );
查看数据表结构
  • desc 表名; 查看表的信息
  • show tables ; 查看当前库内所有表名
  • show create table 表名; 查看建表语句和字符集
删除表
  • 语法:drop table 表名;

    • drop table employee2;
修改表
  • alter table 表名 add 字段 类型(长度) 约束;添加字段
  • alter table 表名 drop 字段;删除字段
  • alter table 表名 modify 字段 类型(长度) 约束;修改类型或者约束
  • alter table 表名 change 旧字段 新字段 类型(长度) 约束修改字段的名称
  • rename table 表名 to 新表名;修改表名
  • alter table 表名 character set utf8;修改字符集
  • 练习
  • 在上面员工表的基本上增加一个image列。
    • alter table employee add image varchar(20);
  • 修改job列,使其长度为60。
    • alter table employee modify job varchar(60);
  • 删除gender列。
    • alter table employee drop gender;
  • 表名改为user。
    • rename table employee to user;
  • 修改表的字符集为utf8
    • alter table user character set utf8;
  • 列名name修改为username
    • alter table user change name username varchar(30);

数据–CRUD语句

添加数据

  • 语法:

    • insert into 表名 (字段1,字段2,字段3..) values(值1,值2,值3...); 有几列就插入多少的值
    • insert into 表名 values(值1,值2,值3...); 插入所有的列
  • 注意:
    • 插入的数据应与字段的数据类型相同
    • 数据的大小应在列的规定范围内,例如:不能将一个长度为80的字符串加入到长度为40的列中。
    • 在values中列出的数据位置必须与被加入的列的排列位置相对应。
    • 字符日期型数据应包含在单引号‘‘中。
    • 插入空值:不指定或insert into table values (null)
  • 练习:
  • 向user表中插入数据
insert into user values (1,‘xiaofeng‘,‘1994-10-10‘,‘2011-1-1‘,‘HR‘,19000,‘aaa‘,‘abc‘);
insert into user values (2,‘美美‘,‘1994-10-10‘,‘2011-1-1‘,‘HR‘,19000,‘aaa‘,‘abc‘);
insert into user values (3,‘小风‘,‘1994-10-10‘,‘2011-1-1‘,‘WORKER‘,21000,‘aaa‘,‘abc‘);
insert into user values (4,‘芙蓉‘,‘1994-10-10‘,‘2011-1-1‘,‘HR‘,1000,‘aaa‘,‘abc‘);
insert into user values (5,‘班长‘,‘1994-10-10‘,‘2011-1-1‘,‘HR‘,100,‘aaa‘,‘abc‘);
  • 注意:字符和日期要写在 单引号中

    • show variables like ‘character%’;
    • set character_set_results=gbk;或者 set names gbk;

解决中文乱码的问题(重点)

  • 解决方案:通过修改my.ini 修改字符集编码,重启MySQL的服务
[client]
port=3306
[mysql]
default-character-set=gbk
  • mysql有六处使用了字符集,分别为:client 、connection、database、results、server 、system。

    • client是客户端使用的字符集。
    • connection是连接数据库的字符集设置类型,如果程序没有指明连接数据库使用的字符集类型就按照服务器端默认的字符集设置。
    • database是数据库服务器中某个库使用的字符集设定,如果建库时没有指明,将使用服务器安装时指定的字符集设置。
    • results是数据库给客户端返回时使用的字符集设定,如果没有指明,使用服务器默认的字符集。
    • server是服务器安装时指定的默认字符集设定。
    • system是数据库系统使用的字符集设定。(utf-8不可修改)

修改语句

  • 语法: update 表名 set 字段=值,字段=值... [where ]

    • 如果没有where条件,默认更新所有的记录。
    • 有where提交,选择某一条记录。
    • UPDATE语法可以用新值更新原有表行中的各列
    • SET子句指示要修改哪些列和要给予哪些值。
  • 练习:在上面创建的employee表中修改表中的纪录。
  • 将所有员工薪水修改为5000元。
    • update user set salary=5000;
  • 将姓名为’班长’的员工薪水修改为3000元。
    • update user set salary=3000 where username=’班长’;
  • 将姓名为’美美’的员工薪水修改为4000元,job改为BOSS。
    • update user set salary=4000,job=’BOSS’ where username=’美美’;
  • 将班长的薪水在原有基础上增加1000元。
    • update user set salary = salary+1000 where username=’班长’;

删除数据

  • 语法:

    • delete from 表名 [where];
    • truncate 表名; 删除所有的数据
  • truncate 和 delete的区别:
    • truncate删除数据,先删除整个表。再创建一个新的空的表。(效率)
    • delete删除数据,一条一条删除的。
    • 事物(insert update delete)(后面讲)
  • Delete语句练习
  • 删除表中名称为’班长’的记录。
    • delete from user where username=’班长’;
  • 删除表中所有记录。
    • delete from user;
  • 使用truncate删除表中记录。
    • truncate user;

查询语句

  • 语法:

    • select * from 表名; 查询所有(字段)
    • select 字段名1,字段名2,字段名3 from 表名; 显示查询字段名
    • select DISTINCT 字段名 from 表名; 去除重复的数据
  • select 指定查询哪些列的数据。
  • *号代表查询所有列。
create table stu(
    id int primary key auto_increment,
    name varchar(20),
    math int,
    english int,
    chinese int
);

insert into stu values(null,‘班长‘,18,11,62);
insert into stu values(null,‘小风‘,98,91,92);
insert into stu values(null,‘美美‘,68,81,52);
insert into stu values(null,‘美女‘,98,90,65);
  • 练习
  • 查询表中所有学生的信息。
    • select * from stu;
  • 查询表中所有学生的姓名和对应的英语成绩。
    • select name,english from stu;
  • 过滤表中重复数据。(面试题)
    • select distinct english from stu;
select 语句中别名的使用
  • 在select语句中可使用as语句(as 可以省略)

    • SELECT column as 别名 from 表名;
  • 练习:
  • 在所有学生分数上加10分特长分。
    • select name,math+10,english+10,chinese+10 from stu;
  • 统计每个学生的总分。
    • select name,math+english+chinese from stu;
  • 使用别名表示学生分数。
    • select name,(math+english+chinese) as sum from stu;
使用where条件过滤
  • 在where子句中经常使用的运算符

  • 查询姓名为班长的学生成绩

    • select * from stu where name=’班长’;
  • 查询英语成绩大于90分的同学
    • select name,english from stu where english < 15;
  • 查询总分大于200分的所有同学
    • select name,math+english+chinese from stu where (math+english+chinese) > 200;
  • like – 模糊查询

    • 写法:like ‘张_或者%’;
    • _%区别:占位符。_只一个%可以有多个
    • %的写法 :
      • like ‘%张’; 结果XXX张
      • like ‘张%’; 结果张XXX
      • like ‘%张%’; 只要有张就行
  • is null – 判断是否为null
  • and – 并且
  • or – 或者
  • not – 不成立
  • 练习
  • 查询英语分数在 80-90之间的同学。
    • select * from stu where english >80 and english <90;
    • select * from stu where english between 80 and 90;
  • 查询数学分数为18,78,46的同学。(in)
    • select * from stu where math in(18,78,46);
  • 查询所有姓班的学生成绩。
    • select * from stu where name like ‘班%’;
  • 查询数学分>80 或者 语文分>80的同学。
    • select * from stu where math >80 or chinese > 80;
排序
  • 使用order by 升序默认的(asc)/降序(desc)
  • 出现select的语句末尾
SELECT column1, column2. column3..
    FROM    table;
    order by column asc|desc
  • 练习
  • 对数学成绩排序后输出。
    • select name,math from stu order by math;
  • 对总分排序按从高到低的顺序输出
    • select name,math+english+chinese from stu order by (math+english+chinese) desc;
  • 对学生成绩按照英语进行降序排序,英语相同学员按照数学降序
    • select * from stu order by english desc,math desc;
  • 对姓美的学生成绩排序输出
    • select * from stu where name like ‘美%’ order by english desc;

聚集函数

  • 聚集函数 指SQL语句中内置函数
聚集函数-count
  • Count(列名)返回某一列的总数
Select count(*)|count(列名) from tablename
        [WHERE where_definition] 
  • 练习:
  • 统计一个班级共有多少学生?
    • select count(*) from stu;
  • 统计数学成绩大于90的学生有多少个?
    • select count(*) from stu where math > 90;
  • 统计总分大于150的人数有多少?
    • select count(*) from stu where (math+english+chinese) > 150;
聚集函数-sum
  • sum函数返回满足where条件的列的和(忽略NULL:ifnull(xxx,0)
Select sum(列名){,sum(列名)…} from tablename
        [WHERE where_definition]  
  • 统计一个班级数学总成绩?

    • select sum(math) from stu;
  • 统计一个班级语文、英语、数学各科的总成绩
    • select sum(math),sum(english),sum(chinese) from stu;
  • 统计一个班级语文、英语、数学的成绩总和
    • select sum(ifnull(math,0)+english+chinese) from stu;
    • select sum(math)+sum(english)+sum(chinese) from stu;
  • 统计一个班级语文成绩平均分
    • select sum(chinese) / count(*) from stu;

聚集函数-AVG

  • AVG函数返回满足where条件的一列的平均值
  • 练习:
  • 求一个班级数学平均分?
    • select avg(math) from stu;
  • 求一个班级总分平均分
    • select avg(ifnull(math,0)+english+chinese) from stu;

聚集函数-MAX/MIN

  • max/min函数返回满足where条件的一列的最大/最小值
Select max(列名) from tablename
        [WHERE where_definition] 
  • max 最大值

    • select max(math) from stu;
  • min 最小值
    • select min(math) from stu;

聚集函数-GROUP

  • GROUP BY子句可以将查询结果按属性列或属性列组合在的方向上进行分组,每组在属性列或属性列组合上具有相同的值。
  • 注意,使用GROUP BY 时,SELECT 子句中只能由以下部分组成:
    • 汇总函数
    • GROUP BY 中出现的列名
    • 上面两个条件通过函数和表达式的结果
    • 条件过滤需要是having,不能使用where
  • 例如:
    • SELECT A_ID ,COUNT(*) FROM C GROUP BY A_ID; =>合法
    • SELECT A_DATE,COUNT(*) FROM C GROUP BY A_ID; =>不合法,如图示中的按A_ID分组后,对于其他各列的查询只能是汇总查询,否则没有意义
  • 练习:对订单表中商品归类后,显示每一类商品的总价
create table orders(
    id int,
    product varchar(20),
    price float
);

insert into orders(id,product,price) values(1,‘电视‘,900);
insert into orders(id,product,price) values(2,‘洗衣机‘,100);
insert into orders(id,product,price) values(3,‘洗衣粉‘,90);
insert into orders(id,product,price) values(4,‘桔子‘,9);
insert into orders(id,product,price) values(5,‘洗衣粉‘,90);

select product,count(*),sum(price) from orders group by product;
  • 练习:查询购买了几类商品,并且每类总价大于100的商品

    • select product,sum(price) from orders group by product having sum(price) > 100;
  • select 语句总结 :

    • S-F-W-G-H-O 组合

      • select … from … where … group by… having… order by … ;
      • 顺序不能改变

备份、恢复数据库

  • 备份数据库
  • 备份命令 mysql/bin/mysqldump 将数据库SQL语句导出
    • 语法:mysqldump -u 用户名 -p 数据库名 > 磁盘SQL文件路径
  • 例如: 备份day12数据库 — c:\day12.sql
  • cmd > mysqldump -u root -p day12 > c:\day12.sql 回车输入密码
  • 恢复数据库(前提创建空的数据库,并且use)
  • 恢复命令 mysql/bin/mysql 将sql文件导入到数据库
    • 语法: mysql -u 用户名 -p 数据库名 < 磁盘SQL文件路径
    • 导入SQL 必须手动创建数据库 ,SQL不会创建数据库
  • 例如:将c:\day12.sql 导入 day12数据库
    • cmd > mysql -u root -p day12 < c:\day12.sql 回车密码
  • 补充知识:恢复SQL也可以在数据库内部执行 source c:\day12.sql
  • 练习
    • 备份test库中的数据,并恢复
时间: 2024-09-30 15:55:59

MySQL快速入门(一)—Java进阶学习第十五天的相关文章

MySQL快速入门(二)——Java进阶学习第十六天

文档版本 开发工具 测试平台 工程名字 日期 作者 备注 V1.0 2016.05.10 lutianfei none SQL多表操作 外键约束 作用:保证数据的完整性. 定义外键约束 可以直接在create语句中定义外键 foreign key 当前表名 (字段名) references 目标表名 (目标表的主键) 创建完语句后,可以直接使用修改语句定义 alter table 表名 add foreign key 当前表名 (字段名) references 目标表名 (目标表的主键); 作用

Java进阶学习第十天——request&amp;response

文档版本 开发工具 测试平台 工程名字 日期 作者 备注 V1.0 2016.05.03 lutianfei none 缺省的servlettomcat服务器默认的 response对象响应对象 HttpServletResponse对象服务器的响应 响应行 响应头 响应体 案例 重定向登陆页面 页面定时刷新页面读秒操作 禁用浏览器缓存三个头信息 向页面输出中文乱码问题 实现文件下载初级下载 实现验证码重点 request对象请求对象 获取客户机信息 获取请求头信息 获取请求参数重点 乱码问题解

Java进阶学习第十四天——MVC开发流程

MVC案例的编写 数据库:暂时先使用XML作为数据库 技术 Servlet + JavaBean + JSP 封装数据 BeanUtils 在JSP显示 JSTL + JSP 解析XML DOM4J解析XML 环境准备 新建web项目,导入jar包 创建数据库,在磁盘上创建一个user.xml文件 完成注册的需求 注册表单(案例) 数据库(没有) 使用xml来代替. 架构 Servlet + JSP + JavaBean 技术 解析XML使用DOM4J技术 Servlet技术 BeanUtils

Java基础学习笔记十五 集合、迭代器、泛型

Collection 集合,集合是java中提供的一种容器,可以用来存储多个数据. 在前面的学习中,我们知道数据多了,可以使用数组存放或者使用ArrayList集合进行存放数据.那么,集合和数组既然都是容器,它们有啥区别呢? 数组的长度是固定的.集合的长度是可变的. 集合中存储的元素必须是引用类型数据 集合继承关系图 ArrayList的继承关系: 查看ArrayList类发现它继承了抽象类AbstractList同时实现接口List,而List接口又继承了Collection接口.Collec

Java并发学习之十五——使用读写锁同步数据访问

本文是学习网络上的文章时的总结,感谢大家无私的分享. 读写锁重要的是写锁的使用,只用一个入口. 下面是读写锁使用的例子 package chapter2; import java.util.concurrent.locks.ReadWriteLock; import java.util.concurrent.locks.ReentrantReadWriteLock; public class PricesInfo { private int price1; private int price2;

Java基础学习第二十五天——多线程学习总结(二)

文档版本 开发工具 测试平台 工程名字 日期 作者 备注 V1.0 2016.03.31 lutianfei none JDK5中Lock锁的使用 虽然我们可以理解同步代码块和同步方法的锁对象问题,但是我们并没有直接看到在哪里加上了锁,在哪里释放了锁,为了更清晰的表达如何加锁和释放锁,JDK5以后提供了一个新的锁对象Lock. Lock: void lock(): 获取锁. void unlock():释放锁. ReentrantLock是Lock的实现类. public class SellT

Python2快速入门教程,只需要这十五张图片就够了!

今天给大家分享的教程是适用于Python 2.7,但它可能适用于Python 2.Python 2.7将停止在2020中的支持. 与Python 2.7和3兼容的Python代码是完全可能的.通过使用Python的futureimports.,它允许你在Python 2下运行的Python 3的代码. 总结: 不管怎么说,python一直在不断演变进化.可能只有少数人可以断言完全理解它. 你需要不断地学习和研究项目.如果你这样做了,当你回头看看自己6个月前写的代码,你会觉得这代码是有多么糟糕.如

RPC学习----Thrift快速入门和Java简单示例

一.什么是RPC? RPC(Remote Procedure Call Protocol)——远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议. RPC协议假定某些传输协议的存在,如TCP或UDP,为通信程序之间携带信息数据.在OSI网络通信模型中,RPC跨越了传输层和应用层.RPC使得开发包括网络分布式多程序在内的应用程序更加容易. 二.什么是Thrift? thrift是一个软件框架,用来进行可扩展且跨语言的服务的开发.它结合了功能强大的软件堆栈和

MySQL 快速入门

http://www.cnblogs.com/mr-wid/archive/2013/05/09/3068229.html 博客园一位牛人写了一个MySQL快速入门的教程,如果你是MySQL小白但是以后要用到数据库或者想要了解数据库的同学可以了解一下. 本人上个星期五去了一家公司面试数据工程师的实习,被虐得体无完肤,因为压根一点数据库都没有碰过,只能靠一点数据结构的基础蒙了一下选择题.现在后知后觉,开始恶补数据库知识.