目录
1.背景知识
2.创建数据库
2.1创建指令
2.2字符集
3.查看数据库
3.选中数据库
4.删除数据库
5.数据表的操作
5.1基本数据类型
5.2创建表
5.3查看所有的表
5.4查看表的结构
5.5删除表
6.CRUD增删查改
6.1新增和效果查看
6.3删除
6.4查找
1.背景知识
数据库就是一个服务器端和客户端结构的程序,mysql的服务器才是真正的主题,负责保存和管理数据,数据主要就是存储在硬盘上面的;
硬盘:持久保存,空间比较大;
内存:数据容易丢失,空间比较小,造价比较高;
因此,鉴于我们的数据库的数据的大小,我们的这个mysql数据库里面的数据主要就是存储在硬盘上面的;
2.创建数据库
2.1创建指令
create database db01;
create database if not exits db01;
我们已经创建了这个db01这个数据库,如果我们再次输入这个sql语句,这个时候就会报错,我们可以使用下面的第二种方式去消除这个报错的操作;
下面的这个可以避免报错,这个其实是有价值的,因为我们实际情况下的这个sql语句都是批量执行的,而不是单个执行的,我们前期进行学习的时候是单个的进行输入,所以这个if not exits的价值没有凸显出来;
在批量执行的时候,如果某一行报错,下面的所有的就不会继续执行了,因此我们加上这个就可以避免报错,让后续继续执行,不让后面的sql语句报错,这样其实是可以避免带来的其他的问题的,因此这个方式我们有必要了解一下;
2.2字符集
一个汉字占据几个字节:这个需要具体情况具体分析,不同的字符集,一个汉字占据的字节大小不一样的,很多同学认为是两个字节,这个其实是我们的GBK编码情况下的字节大小,其他的情况下这个大小事会变化的;
windows上面的默认的字符集就是GBK,我们使用的vs studio和我们的windows一直,因此这个windows也是GBK字符集,但是现在使用的最主流的就是UTF8编码,这个情况下的一个汉字是3字节,GBK里面一个汉字是2个字节;
Unicode是给字符进行编码的,但是我们把字符组合变成字符串,就无法正常识别,基于这个Unicode,我们搞了utf8,方便对于这个字符串的字符集进行管理;
3.查看数据库
列出来当前的这个mysql数据库上面都有那些库;
show databases;
3.选中数据库
use 数据库名;
我们主要是对于表进行操作,因此这个时候需要先进行数据库的指定,因此这个就是需要使用我们的use语句进行数据库的选定;
4.删除数据库
drop database 数据库名字;
删除操作删掉的不仅仅是数据库,包括这个数据库里面的各种表个数据,因此删除数据库是一个非常危险的操作,我们要谨慎操作;
线上数据库:生产环境数据库,用户访问的数据库,这个一般会有报警系统,用来对于我们的服务器的运行状态进行监视;
关掉报警,再发布程序,再开启报警这个是我们的一般操作,因为我们进行这个重启的时候,也会报警,我们关掉了这个报警系统之后,这个时候又出现了问题,因此这个就出现了问题,但是一般的公司会引入措施,例如控制权限之类的,让管理员进行操作,或者是进行数据的备份,方便我们进行数据的恢复,这样即使出现问题,我们也不怕;
这个备份分为全量备份,和实时备份
线下数据库:进行开发,测试的时候构造的假的数据,这个数据我们自己是可以恢复的,毕竟是我们的测试数据库;
5.数据表的操作
5.1基本数据类型
mysql每一行都是记录,每一列都是一个字段,这个sql语言里面的数据类型和我们的java里面的这个数据类型都是有对应的,只不过这个名称不一样罢了;
因为这个Sql语言出现的比我们的java语言更早一些,这个相关的这个体系还没有完全形成,因此这个名字比较混乱,后来就逐渐形成了体系;
除了上面的这个,还有日期类型等等,我们不需要全部记住:int long double decimal(主要是浮点数,只不过可以解决这个使用double带来的精度损失的问题) varchar(字符串类型,单位是字符,不是字节) datatime(时间日期)这几个数据类型;
5.2创建表
我们想要把这个创建的表的列的名字和表的名字相同,我们可以在这个名在上面加上反引号即可;
这个id是int类型的,而且这个name是varchar类型的,大小是20,这个是随着我们的内容逐渐增加大小的,只是不会超过20这个大小罢了;
create table 表名(列名 数据类型);
5.3查看所有的表
先use数据库,再使用hsow进行这个数据库里面的表的查看;
show tables;
5.4查看表的结构
desc就是description的简称;
desc 表的名字;
field就是字段,type是对应的类型,int括号里面的11表示的显示的宽度,显示这个int类型的时候最多占据11个字节的宽度,人家设定好的,为了显示,无需关注;
5.5删除表
drop table 表的名字;
6.CRUD增删查改
6.1新增和效果查看
insert into 表名 values(值,值);
我们首先需要清楚这个表的构造,这个构造就是我们进行插入的前提,我们使用这个desc查看这个想要插入的表的信息,发现是一个id一个name,这个时候,我们就可以使用上面的这个insert语句进行这个插入,我们插入的是内容写在这个values后面的这个括号里面的;
上面也展示了指定的列进行插入,就是我们之出入其中的某一列,不是完全插入,例如针对于上面的这个学生表,我们只想要插入这个名字,而不插入这个id,这个时候,我们可以使用
insert into 表名(属性) values(值);
这个时候需要注意的就是我们的属性和属性值需要一一对应,就是我们的这个前面的括号写name,后面的这个里面就会要填写字符串,如果前后的两个不对应的话,这个时候就会报错;
一次性插入多行数据:这个时候使用的就是
insert into 表名 values(),();
这个里面的两个内容之间的这个逗号是一定不可以省略的,否则即会报错,像下面的这个一样;
上面已经进行那各种形式的插入操作,我们怎么查看这个表经历了多轮插入之后的这个现在的一个情况呢?
这个时候,可以使用下面的这个指令打印这个表当前的所有内容的相关信息;
select * from student---------这个student以及实际的表名进行调整
这个8表示的就是表里面的所有的内容;
关于多次插入一个和一次插入多个的效率说明:就是上面介绍了一次性插入多组数据的情况,同时也介绍了这个一次一次的插入的场景,两个都是可以实现相同的效果,但是如果我们想插入3组数据,我们是插入三次呢,还是一次性全部插入?我们选择后者,因为这个mysql是客户端和服务端的交互,我们的多次插入会增加交互的次数,提高成本;
如何添加时间类型的数据:
我们也可以使用这个now快速获取当前的这个时间;
6.3删除
drop这个命令进行删除;
6.4查找
全列查询:就是上面使用的这个select *这个语句,这个*表示的就是通配符,指的就是所有的意思
服务器通过网络把这个数据返回给客户端,进而以表格的形式展现在我们用户的面前;
select * from student(依据实际的表名字进行调整)
下面的这个是我们的数据库里面想要查询的这个表里面的数据如果很多的情况下,就可能会产生的一些问题:例如其他的程序想要访问我们的硬盘这个时候的访问速度就会很慢,还有就是进行服务器的访问的时候,这个速度也会很拉胯,给用户等感觉就是这个数据库是不是挂掉了;
上面提到的这个生产环境也叫做线上环境,我们的工作中除了会遇到上面的这个线上环境,还有下面的三种线下环境:办公环境,开发环境,以及测试环境,只不过这个线下的环境是我们自己的这个内部环境,用户一般不会接触到,但是这个线上环境是直接和我们的客户打交道的;
因此这个线上环境的问题就会影响我们的用户的体验,当这个线上环境的数据量大的时候,不可随意进行select的操作;
指定列的查询:
select name from student;(依据实际的表名和列名进行修改)
这个里面的name就是我们想要查询的列名
查询字段为表达式
这个返回的数据是临时表,因此这个数据库里面的数值是不会变化的,我们的表达式查询的这个数据的修改只是临时的;
查询的时候指定列的别名
我们这个只需要在这个表达式的后面加上as+别名就可以了,这个时候就不会显示我们的表达式的名字作为列的名字;