MySQL数据库基础

一.知识框架

一开始学数据库,我们要先大致了解一下整个体系是怎么样的,搭建起一个知识体系,方便记忆和学习。

什么是数据库,由名可知,就是保存用户数据的程序就是数据库,那MySQL又是什么呢,其实MySQL就是一个应用软件,通过这个应用软件就可以创建数据库,能够对数据库进行增删查改等一系列操作。就相当于C语言需要VS2022,Java需要IDEA,数据库需要MySQL。

能够编写C语言的软件程序不仅有VS2022,还有DevC++等软件也可以进行C语言的编写,Java除了IDEA还有eclipse等软件,同理,能够创建数据库的软件除了MySQL,还有SQL Server,Oracle等软件,所以我们要学习的就是如何通过使用MySQL这个软件来创建数据库并进行对数据库的一系列操作。

我们之前学习C和Java的时候,编写的变量只有在运行的时候才申请了空间并存在,一旦程序执行完毕,空间也就自动回收和销毁,这个变量也就不存在了,也就是说数据可以存放,但是又没有完全存放,只能说如存,导致这样的原因是它的数据是存放在内存中

而数据库则是将数据保存在磁盘中,这样就可以完成对数据的持久化,每次程序重新加载数据都可以从数据库中读取以前的数据,就不像之前要重新申请空间,再创建一遍数据

还有一个原因,为什么内存就不能永久保存数据呢,只有外存才能永久保存数据呢,这是根据我们现在硬件发展程度来决定的,内存容量小,造价高,外存容量大,造价低,而数据库往往要存的数据都比较庞大,所以如果用内存来存放数据,成本会非常高昂,不符合现实实际,所以只能用外存来保存数据。

现在我们大致知道了什么是数据库,为什么要学MySQL有了一定的认知,那么接下来就开始讲解一些MySQL的基础用法

首先MySQL是一款对大小写不敏感的软件,什么意思呢,就是大小写它不区分,比如show和SHOW在MySQL眼里就是一样的,不像Java那些编程语言对大小写敏感,a是a,A是A

然后就是数据库的大致构成框架,大致分为四层

最外面这一层是数据库的一个抽象的概念,就是我们打开MySQL这个软件过后,但什么操作都没有执行,但我们又已经进入了数据库,此时我们就处于这一层

往里面一层就是具有实际意义的数据库,比如我们通过show databases;此时展示的数据库就是抽象意义的数据库里面包含了哪些实际意义的数据库,简单来说就是一个大盒子里面装了好几个小盒子,只不过这个大盒子我们看不见摸不着,是一个抽象意义的盒子,而小盒子才是真实存在的

每一个数据库都是由行和列组成的二维表格,其中要先创建列,也就是属性,再创建行,比如我们要创建一个保存学生数据的数据库,我们首先要确定我们需要保存学生的哪一些属性,毕竟我们不可能把学生全部所有信息都保存下来,这时我们就要根据需求,找到我们需要的属性,比如我们想要保存一个学生的姓名,学号,班级,那么我们在数据库中就要先创建这三列的属性,然后再根据每个学生的具体信息,一个学生对应一行数据行(也叫作数据记录),那么我们将所有的学生信息存入这个数据库后,我们就保存了所有学生的姓名,学号,班级在这个数据库中

有了库—>表—>列—>记录这样的一个逻辑顺序,接下来就是将这样的逻辑顺序转换成代码

二.基础操作

1.查看当前数据库(抽象意义)里有哪些数据库(实际意义)

我们要创建数据库的时候,肯定要先查看我们当前有哪些数据库,如果已经存在我们需要的数据库,那么我们直接使用即可,避免重复创建

语法:show databases;

此时我们就可以看到有5个数据库,其中第1,3,4,5是系统自带的,而第2个是我自己之前创建的数据库

2.创建数据库(实际意义)

语法:create database 【if not exists】 数据库名字 【指定数据库采用的字符集】【指定数据库字符集的校验规则】

其中【】里面的是可选的,其他的是必写的

示例(创建一个保存学生信息的数据库)

最简单的写法:create database student;

这样一个数据库就创建好了

如果我们要更准确全面的创建数据库,就可以添加【】里面的内容

比如create database if not exists student;

if not exists的意思就是如果不存在student这个名字的数据库,就创建student数据库

如果原来存在student这个名字的数据库,就会报出警告,

此时想要查看警告的内容,就可以使用语法:show warnings;

因为我们之前已经创建了一个java113的数据库,所以此时再创建一个java113的数据库会报出警告,其中Query OK就代表执行完成,但是有一个警告,show warnings就可以查看警告的具体内容,上面显示“不能创建数据库“java113”,因为数据库已经存在”。

然后我们还可以指定数据库采用的字符集和数据库字符集的校验规则,MySQL系统使用默认字符集为utf8,校验规则是:utf8_general_ci

但是MySQL的utf8并不是真正的utf8,没有包含某些复杂的中文字符,而MySQL真正的utf8是utf8mb4,所以推荐使用utf8mb4

对应的校验规则为utf8mb4_0900_ai_ci;

所以最全面完整的创建student写法为:create database if not exists student character set utf8mb4 collate utf8mb4_0900_ai_ci;

补充:数据库的名字不能用MySQL的关键字进行命名,如果一定要用,可以加上反引号`数据库名字`,反引号在esc下边,tab上边,1的左边,使用英文输入,即可打出反引号

例如:create database if not exists `database`;

3.选择数据库

既然有好几个数据库,那么我们怎么样对我们想要的数据库进行操作呢,这时就需要选择数据库

语法use 数据库名【;】

其中;可加可不加

例如我要对我自己创建的java113数据库进行操作,那么我们要先选择java113这个数据库

此时就显示数据库改变,那么接下来所有的操作都是以java113这个数据库为对象

4.删除数据库

如果有数据库我不想要了,就可以删除(但实际删除这个操作风险很大,尽量不要删除数据库)

语法:drop database 【if exists】 数据库名;

此时我们可以看见数据库(抽象)里面没有java113这个数据库了(实际)

5.创建表

我们之前讲过,数据库里面实际是一个二维表格,所以我们之前创建的数据库里面什么都没有,需要添加行和列,首先要确定属性(列)

而属性需要对应的数据类型来描述,就像Java里面需要说明变量的数据类型

其中比较陌生的是decimal,简单来说这个数值类型跟double浮点数差不多,但是在数据库大多数情况默认这个数值类型来表示金额相关的属性,而不是使用double,具体原因是因为float和double在存小数都不是特别准确,经常会出现明明是4.0的小数,却被记录为3.999999……或者4.00000……1,而像在银行这些地方,如果全是这种误差,那就会有一定的麻烦,所以像金额这些一般都是使用decimal。

然后可以在后面接2个参数:M和D,其中M代表整个长度,D表示小数点位数,比如3.1415就是M为5,D为4的decimal数值类型,用公式来说M=整数位数+小数位数(D),其中M最大为65,D最大为30,如果省略D,则默认为0,如果省略M,则默认为10

扩展:

这些数值类型可以指定为无符号(unsigned),表示不取负数

我们知道整型类型在存储的时候,其中一个比特位是专门用来记录符号位的,所以使用无符号可以多出来一个bit位来存储数值,但是实际上我们基本用不到unsigned,因为如果int类型存放不下的数据,int unsigned同样可能存放不下,与其如此,还不如直接将int提升为bigint类型

MySQL里面没有字符类型,只有字符串类型,其中字符类型用varchar表示,其中后面可以接一个参数size,size表示字符串的长度,例如“abcd”就是size为4的字符串长度,除此之外,中文等其他复杂字符类型也对应一个长度,比如“我爱学习”也是为4的字符串长度

text就是文本数据,相当于记事本里面的数据,而blob是二进制形式的文本数据,也就是只有计算机才能看懂的数据

其中timestamp也被叫为时间戳,从1970年开始,而且MySQL又是以毫秒为单位去计时的,按4字节的范围去取值,到2038年就溢出了,所以就是说如果到了2038年,这些数据就全部出错,就会发生1999年跨越2000年时,因为内存存不下,导致世界大部分计算机出现问题,发生“千年虫”的问题,所以现在我们尽量都使用datetime来存日期,这样保证我们这辈子至少不会出现这方面的问题,而使用timestamp,我们这辈子基本就一定会遇到溢出的情况,到时候就会比较麻烦

创建表的语法:create table 表名(

        字段1 类型1,

        字段2 类型2,

        ……

);

如上,就算创建好一个空表,里面没有记录,但有属性

通过desc 表名;  可以查询表结构

同时可以通过show tables;查看当前数据库的所有表

6.删除表

删除表的语法:

drop [temporary] table [if exists] 表名1 [,表名2……]

其中temporary表示的是用户自己创建的临时表,具体的知识学到后面再讲

if exists则是判断是否存在,如果表存在就进行删除操作

后面可以接多个表名,相当于连续删除多个表

同删库一样,风险危害很大,尽量不要删,如果不小心删了,也要及时告诉相关负责人,以便修复

7.注释

因为很多时候写的东西太多了,很容易自己不记得自己写的东西,同时别人也不一定能很快理解你写的东西,所以在写之前添加适当的注释是很有必要的

注释语法:--注释内容

一般注释写在最开始的一行,总结概括下面的代码的含义和作用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值