目录

MySQL数据库概述

MySQL数据库的基本操作

MySQL数据库的表的操作

MySQL数据库的增删查改(CRUD)

MySQL数据库概述:

初来乍到,什么是数据库?数据库就是存储数据的仓库,我们用户可以对数据库中的数据进行增加,修改,删除以及查询的工作(CRUD)。下面列出一些常用的数据库:

关系型数据库:指的是对于存储的数据,格式上有严格的要求,类似于以execl表格的方式来存储的。

1.MySQL数据库:开源的免费数据库,所谓开源,就是指软件的源代码是开放的,可以供用户们修改或者查看。是个人学习中最常用的小型数据库。已经被Oracle收购。

2.Oracle数据库:收费的大型数据库,Oracle公司的产品,安全性高,大型公司或者是银行需要用Oracle来进行存储。

3.SQLServer:Microsoft公司的收费的中型数据库。在高校中常常用于教学。

4.SQLite:嵌入式的小型数据库,常常应用于Android系统。

非关系型数据库:相比关系型数据库,存储方式比较灵活,但是功能更少,优势是性能更快,同时也可以更好的适应分布式环境。例如Redis MongoDB  HBase等等。

MySQL数据库是一个客户端(client) 服务器(server)结构的软件。一个服务器,是可以给多个客户端提供服务的。主动发送数据的这一方,叫客户端;被动接受数据的这一方,叫服务器;客户端给服务器发送的数据叫做请求(request);服务器给客户端返回的数据叫做响应(response)。客户端和服务器之间是通过网络之间来进行通信的。逻辑上,每个数据库是用来存储数据的集合。例如,教务系统上有很多种数据,例如教务相关的数据、公司相关的数据、论坛相关的数据等等,这几种数据逻辑上互不相关,就可以把这些放在不同的数据集合中,也就是放到不同的数据库中。每个数据集合中,又有一些数据表,例如教务数据中学生信息中每个学生的学号、姓名、班级、性别、学校等,每一行是一条数据,称为是一条记录,一行里还有很多列,每一列称为一个字段。对于MySQL以及其他的关系型数据库,是要求同一个表里面的这些数据的列数和列的类型都是要匹配的。

客户端是和用户交互的部分,通过命令行来输入sql语句。还可以通过图形化界面来进行操作,但对于初学者来说,还是建议用命令行,因为图形化界面的优势是入门容易,但是学习过程中会错过很多知识,命令行才是生产力工具。

以上介绍的是数据库相关的概况,下面的文章会介绍MySQL数据库的一些基本操作。

紧接着数据库的概述,接下来我们就需要对数据库进行一系列操作了。对于学习数据库的基本操作,其实就是学习SQL的写法。首先,我们打开一个MySQL的客户端。

看到这个界面说明登录成功了。 同样,我们也可以win+r打开cmd控制面板,把刚才执行的MySQL程序拖拽进去执行。下面我们进行对数据库的操作。


MySQL数据库的基本操作:

一.创建数据库

我们使用关键字create来创建数据库:create database 数据库名;如图所示

出现上述字样说明创建数据库成功。若出现如下字样:

说明已经存在相同名字的数据库,我们需要更名。但是,如果不想让它报错,我们可以使用if not exists语句来避免报错。如下图所示:

这种会报出warning警告,但是不会真的创建数据库!!

若出现如下字样:

则说明在你的SQL语句中存在语法错误,应该重新检查你的SQL语句。

创建数据库的时候,还可以指定数据库的字符集,例如我们了解的ASCII,utf-8。如图所示:

 二.查看数据库

既然我们创建出了数据库,那么我们就需要查看数据库到底有没有。

使用关键字show来展示数据库:show databases;注意database后面一定要加s,如图所示:

我们会发现,这里的库不仅仅只有我们创建的,MySQL还会自带一些系统数据库。默认的MySQL是装在C盘中。

三.选中指定的数据库

一个MySQL服务器上,数据库可以有很多个,要进行操作,需要先确定要针对哪一个数据库进行。我们用use关键字:use 数据库名;后续的操作都是针对这个数据库所展开的。如图所示:

 四.删除数据库

我们使用关键字drop来删除数据库:drop databse 数据库名;如图所示:

需要特意说明的是,删除数据库,其实是非常危险的操作!!在以后的工作中,如果不小心删除了数据库,造成的损失可能非常大 ,在公司的测试环境,生产环境中,都可能有数据库,如果删除的是测试环境的数据库,你的同事可能就要喷你了,如果删除的是生产环境的数据库,这个系统的用户都会发现出了问题,事儿就大了!!不过对于我们日常的学习,删除数据库就没什么损失。


MySQL数据库的表的操作

一.创建表

我们使用create关键字来创建表:create table 表名(列名 类型,列名 类型,列名 类型......);

同样,我们若想进行表操作,必须先选中数据库,也就是use某个数据库名。如图所示:

我们需要注意的是:SQL语句不像C语言或者JAVA的类型在前,而是把类型放在后面的,例如Python,Go。同一个数据库中不能有两个相同名字的表,创建相同的表的时候,会出现如下错误提示:

表名和列名,也不能和SQL的关键字重复,例如:

如果我们实在是想用和SQL关键字相同的名字来创建表,那么我们可以给表名加上反引号,这样就可以创建了。反引号在键盘esc的下面,用英文输出。如图所示:

在建表过程中我们可以使用comment来注释,要注意这个注释只能在建表的时候使用,其他时候用不了。如图所示:

二.查看表

接下来我们来查看指定数据库下的所有表,首先我们一定要选中一个数据库。然后我们使用show+表名来查看表。如图:

三.查看表的结构

查看表的结构,也就是看表里面有啥。我们使用关键字desc来查看:desc 表名。如图:

Filed指的是所存储的变量,Type指的是所存储变量的类型,NULL指的是 是否允许为空,Key和列的约束有关,Default是默认值,这里默认为空,Extra指的是额外的描述,后续学习中可以看到。

 四.删除表

删除表,我们使用drop关键字:drop table 表名;如图所示:

我们要记住,删除表操作和删除库操作一样,都是非常危险的!!一个数据库里,有很多的表,如果我们全删了,在工作环境中是可以第一时间发现问题的,可以第一时间进行处理。但是如果只删一个表,第一时间往往发现不了,问题可能就被隐藏起来了,系统带着问题运行,大量数据可能都会出错。所以,删除一个表往往比删除所有表更危险!!

以上是数据库的表操作。

接着数据库的表操作,我们需要对数据库的表内容进行修改。


MySQL数据库的增删查改(CRUD):

一.新增.SQL使用insert关键字来进行新增操作:insert into 表名 values(列,列,列......);如图:

在SQL中,“ 和 ’  都可以表示为字符串。values后面的内容,个数和类型都要和表的结构匹配,否则无法创建成功。例如我所创建的学生表中就有两个列,所以values里也需要有两列!创建字符串的时候,我们是可以手动指定字符集的,我们未指定时,默认的字符是拉丁文,不支持中文!如果输入中文,会显示如下错误:

正确的做法是,可以删掉现在这个库,重新创建一个创建数据库,把字符串设置成utf8或者utf8mb4,就可以使用中文了,如图:

删掉重新设置,是最简单的方法。但是,一定不要在数据库建好之后再改字符集,会造成很严重的后果!

此外,insert除了可以插入完整的一行数据之外,还可以指定列插入。如图:

图中的select*from stu是展示表内容的意思,接下来会写到,这里为了展示表内容所以先用一下。我们可以发现,当我们插入一列的时候,未被指定的列是按照默认值NULL填充的。如果我们想要指定多个列,在表名后后面的括号中使用逗号,再加上想修改的列名即可:insert into 表名(列名,列名,列名......)values(值,值,值......)。如图:

还可以指定插入多行,也就是说,insert语句,以及value后面的()可以有多组,每一组对应到一行(一条记录),借助这个功能,就可以一个SQL语句插入多条数据:insert into 表名 values(值,值,值......),(值,值,值......),(值,值,值.....).....;如图:

下面看一下刚刚的反馈结果:

第一行说明的是你的数据库有几行受到了影响,第二行的从左至右分别代表记录的数据数、相同的数据数、警告数。注意:在MySQL当中,当前的一次一次插入数据的效率,是低于把这几个数据记录一起插入的效率的!原因有三点:1.是由于网络请求和响应的时间开销引起的。2.数据库服务器是把数据保存在硬盘上的。3.对于MySQL关系型数据库,每次进行一个SQL操作,内部都会开启一个事务,每次开启事务也有一定的开销。所以在以后的工作中,在面对大量的数据的时候,尽量一次操作就插入完全。说句题外话,不知道你们有没有在输入语句的时候会不会有这种困扰:每次输入完中文的时候,都要切换成英文去输入标点符号,很容易出错而且还很不方便,这里教大家一个方法。打开我们常用的输入法的设置,在里面找到”中文输入时使用英文标点“这个选项,打开此选项,就可以在输入中文的时候不用频繁切换输入法了。

 二.查询

查询是SQL中最复杂的操作。我们这里先说一些最基本的查询操作。

1.全列查询

全列查询也就是查询表里的所有列,初学阶段最常见的一个操作就是select*from表名;*这个符号我们叫做通配符,代表了所有的列。也就是说,无论表是什么样子的,里面有几列都没关系,*可以代表所有。如图:

对于我们现在的查询操作,是没有什么危险的,但是在工作中是千万不敢在公司的生产环境中去进行select*操作的。因为工作中的生产环境服务器中是存了很多很多的数据的,此处我们进行查询操作,就会遍历所有数据,把数据从硬盘上读取,再通过网卡进行发送,很容易把硬盘或者网络带宽吃满。这时候,外面很多的用户通过带宽来访问服务器的时候,就会崩溃了!!!!!所以,在某些场景中,把某个资源给用尽了,就很容易导致程序出现严重的问题!再来一句题外话:如今的硬件发展已经赶不上需求的发展了,所以很容易产生矛盾。正因为上述矛盾的存在,才有了分布式这一概念。本质上就是通过增加硬件,机器的数量,来提供更多的硬件资源。

2.指定列查询

select 列名 from 表名;如图:

通过指定列查询,相比于全列查询,查询是会精简不少的。

3.查询列为表达式

在查询的过程中,列和列之间进行一个简单的计算。我们创建了一个英语成绩表,如图:

接下来,我们想把每个人的英语成绩都加10,应该怎么做呢? 应该使用表达式, 如图所示:

这样我们就可以查询加分之后的成绩了。在这里要说明的一点是,进行表达式查询的时候,查询结果是一个临时表!这个临时表,并不是写入硬盘中的,而且临时表的类型也并不是和原始的表完全一致。所以,select操作只是查询,无论如何都不会修改硬盘上的数据!!用一张图来解释一下

4.给查询结果的列指定别名

首先我们创建一个学生成绩表,如图:

我们可以把语文,数学,英语三个科目的总和算出来并且展示出来。如图:

此处的as可以省略,但是为了大家不容易看错,还是建议大家加上。

5.查询的时候,针对列来进行去重

去重,也就是把有重复的记录给合并成一个。在刚刚的学生表中,我们再加入一个学生,他的英语成绩和某一个同学的英语成绩是一样的,如图:

我们使用distin关键词来去重,如图:

我们会发现,相同的数据合并成为了一个。同样,distinct也可以指定多个列,当指定多个列的时候,则是要求所有的列都相同,才算重复。

6.针对查询结果进行排序

对于排序,我们使用order by 关键字。我们想在刚刚的学生表中将每名学生的英语成绩排序。如图:

排序默认是升序排序,如果我们想使用降序排序,在后面加desc关键字即可,如图:

注意,这里的desc和查看表结构的desc是不一样的。扩写分别是desend和describe。平时我们写代码,还是要注意缩写的问题!下面讲一下关于排序的注意事项:1.如果SQL中没有显式的写order by,那么我们认为查询结果的顺序,是不可预期的!不能依赖自带的顺序。2.如果是要排序的列中有NULL,则NULL视为最小值。如图:

7.条件查询

条件查询,就是针对查询结果,按照一定的条件进行筛选!我们使用where关键字,根据查询的结果按行进行筛选。通过where指定一个条件,把查询到的每一行,都带入到条件中去,看条件是真还是假,把条件为真的行作为临时表的结果,条件为假的舍弃。如果想描述条件,就需要使用一些关系运算符和逻辑运算符。关系运算符如图:

逻辑运算符如图:

例如,我们查询语言不及格的同学及英语成绩:

where后的语句的执行顺序是:先把数据库中保存的数据进行查询,查询的时候每次得到一行,就带入到条件中进行判断。此时的英语成绩中没有NULL。因为NULL和任何数据进行计算都是NULL,NULL<60的结果还是NULL,当成了false。此时再加个条件来or一下就可以带上空值了。如图:

接下来查询语文成绩好于英语成绩的同学:

再比如查询总分在200分以下的同学:

注意:where后面的子句不能使用刚刚设置的列的别名来比较,如图:

这取决于MySQL内部的实现方式。MySQL进行查询操作时,是先针对每一行的记录计算条件,并按照条件筛选。满足条件的记录,才会取出对应的列,并且计算列里面的表达式。

查询语文成绩大于80,且英语成绩大于80分的同学:

如果条件中同时有and和or,先计算and然后再计算or,死记硬背容易记错,所以最好的办法是加上括号。

查询语文成绩在80,90之间的同学及语文成绩:

这种做法我们不推荐,我们推荐如下做法:

下面我们查询数学成绩是58或者59或者98或者99分的同学及其数学成绩,我们可能首先想到这种写法:

我们可以用关键字in来化简写法:

下面插入几个姓孙的人物,并查询姓孙的同学的成绩:

%表示任意字符,以孙开头的内容都可以表达出来,同样,%孙 代表以孙结尾。我们还可以使用下划线_ 来匹配任意一个字符,如图:

加入两个下划线则代表有两个任意字符:

注意,null任何数据比较最终结果还是null,会被当成false而查询不到。对于null的比较,我们使用<=>运算符。如图:

条件查询很关键也很重要,不仅仅是搭配select使用,update/delete也会搭配where子句,对应的条件的用法,也是完全相同的。select*之所以危险,就是因为不确定查询结果有多少,如果查询结果太多就会把硬盘/带宽给吃满。保证查询操作不危险的关键,就在于控制一次查询查出来的结果的数量!就是靠where子句,通过条件来针对结果集合进行限制。说到限制,查询操作中引入了一个limit,通过这个关键字来限制查询结果的数量,如图:

5代表此次查询的最大结果的数量。无论前面的条件是怎么写的,最后的结果都不会超过5条。

8.分页查询

在数据库中,针对分页查询操作的支持,主要就是通过limit来实现的。直接limit N,查到的是前N条的东西,我们搭配offset就可以指定从第几条开始进行筛选了。(offset的值从0开始计算的)。

我们也可以这么写,但是容易记混,不推荐:

上述是一些基础的查询操作,后面还会讲到一些更复杂的查询。

 三.修改

update 表名 set 列名=值 where 条件;比如我们将上述表中 孙悟空的数学成绩变更为80分:

set后面加上你要描述的哪些列,where后描述了哪些行需要修改,仍然要把每一行带入条件,条件为真的就是需要修改的,为假的就是pass。注意:修改操作就是在服务器修改硬盘数据了,修改完之后不会像临时表一样,这个是持久生效的!

修改操作,还可以使用表达式来进行修改,比如,我们把表中所有同学的语文成绩-5,前后对比图如下:

这个语句中没有写where子句,那么就是匹配所有行,把12行的NULL也匹配到了,有的行的语文成绩是空值,上面也说过,空值是没法进行算术运算的。注意不要像JAVA一样写成chinese-=5,SQL是不支持这种写法的。

update还可以去同时修改多个列,多个列之间用逗号来分隔开:

update还可以搭配order by/limit等子句来进行使用,比如,给总成绩倒数四名的同学的数学成绩设置成10分:应该先加和得到总分,然后按照总分的升序排序,然后取结果:

通过子句设置筛选结果,筛选完成之后,就可以把匹配的结果设置上对应的值了。update这里的体条件是至关重要的,务必保证筛选条件正确。update操作也是一个危险操作!

四.删除

delete from  表名 where 条件; 比如我们要删除孙悟空同学的考试成绩:

这个删除操作也是在修改数据库服务器的硬盘,也是持久化删除,删了就没了!所以,delete也是危险操作。后面的条件也和update一样,支持where/order by/limit等。

上述这些基本操作以及增删改查,就是日常开发中最常用的SQL。增删改查中最复杂的是查询,下面还会深入介绍更多操作。

MySQL数据库基本操作详解(数据库概述、基本操作、增删改查等)相关推荐

  1. R操作MySQL数据库创建表、删除表、增删改查(CRUD)

    R操作MySQL数据库创建表.删除表.增删改查(CRUD) 关系数据中的数据是按照一定范式去存储的.当我们需要非常高级和复杂的Sql查询就可以使用关系数据库的数据资产.不光java和python可以容 ...

  2. mysql删除分表键_一文看懂 MySQL 分区和分表,提高表增删改查效率

    原标题:一文看懂 MySQL 分区和分表,提高表增删改查效率 作者:冯帅,精通Oracle. MySQL. 擅长异构数据库数据同步及迁移.数据库的设计和调优,对高可用方案有深入研究. MySQL分区和 ...

  3. Python操纵Mysql数据库的三种方法,实现增删改查

    目录 这里使用的数据库是关系型数据库Mysql 一.首先,需要安装两个库 二.3种实现增删改查的方法 1.  使用原生语句进行增删改查 2. 使用表结构进行增删改查 3. 使用集成ORM类操纵数据库, ...

  4. 一、mongodb数据库系列——介绍和安装 简单使用 增删改查

    一.Mongodb的介绍和安装 学习目标 了解 非关系型数据库的优势 了解 mongodb的安装 1. mongodb的介绍 1.1 什么是mongodb mongodb 是一个功能最丰富的NoSQL ...

  5. 数据库之OrmLite的简单学习:增删改查_两个表

    参考学习网址: 1.android OrmLite 入门 - ziqiang1的专栏 - CSDN博客 http://blog.csdn.net/ziqiang1/article/details/52 ...

  6. 巨杉数据库SequoiaDB在Java开发中的增删改查CURD

    文章目录 JSON应用开发 增删改查操作 1 快速入门 1.1 环境部署 部署SequoiaDB集群环境 部署Windows开发环境 1.2 正式开始 2 CURD教程 2.1 Java开发环境搭建 ...

  7. c mysql 添加数据类型_MYSQL的常用命令和增删改查语句和数据类型

    连接命令:mysql -h[主机地址] -u[用户名] -p[用户密码] 创建数据库:create database [库名] 显示所有数据库: show databases; 打开数据库:use [ ...

  8. PHP连接数据库MySQL打造xxx管理系统,实现简单的增删改查功能

    目录 前言 概述 内容 创建数据库表 实现列表 新增用户 删除用户 编辑用户 前言 最近刚学完PHP和Mysql,历时半个多月时间完成了这样一个简单的算是人员管理系统吧,为了加深印象总结一下,还有很多 ...

  9. MySQL在DOS指令里面的使用以及增删改查的使用

    本人的第一条博客,选中我的电脑单机右键,点开管理,选中服务找到MySQL57. 启动该服务.回退至桌面,按住win+R 输入cmd打开DOS指令的窗口. 在窗口输入:   mysql -h local ...

  10. springboot集合MySQL删除_SpringBoot集成Spring JdbcTemplate并完成增删改查操作

    JdbcTemplate是Spring用来简化JDBC操作的核心类,有助于与Spring集成,并且避免了过多冗长的JDBC代码.不过在实际使用中,我们通常使用NamedParameterJdbcTem ...

最新文章

  1. 2021年春季学期-信号与系统-第八次作业参考答案-第三小题
  2. corosync+pacemaker实现高可用(HA)集群(二)
  3. 1-Qt6在线安装图文步骤
  4. JavaScript 中 obj.hasOwnProperty(prop) 方法
  5. isleapyear python_Python实战练习——打印日历教程
  6. java 及时释放内存_JMM(一):初识Java内存模型
  7. C++中的虚函数(表)实现机制以及用C语言对其进行的模拟实现
  8. 线程中如何使用对象_在 Flink 算子中使用多线程如何保证不丢数据?
  9. python文件夹中的__init__.py的作用
  10. Microsoft® Deployment Toolkit 2010之快速部署Windows 7
  11. p1198bzoj1012 最大数
  12. NAS DIY的设计和实施过程-5-Openfiler篇
  13. 全国高校安徽考区计算机,关于做好2021年上半年全国高校(安徽考区)计算机水平考试报名工作的通知...
  14. iOS--UIView和UIWindow用法
  15. python调用adb shell命令_python(或BAT脚本)自动执行adb shell以后的命令
  16. 交换机不同vlan不同网段通过核心交换机配置VLANIF通信
  17. [深度学习项目] - 时间序列预测 (2)
  18. TAHOMA:Physical Representation-based Predicate Optimization for a Visual Analytics Database,IEEE2019
  19. 星际争霸Ⅱ 神族操作记录
  20. PKUSC 2018 游记

热门文章

  1. springboot 简单发邮件 QQ邮箱
  2. golang 搭建文件服务器,golang实现简单文件服务器
  3. spark sql运行时候出现cannot resolve '`bid`' given input columns: [bid, name, iphone];
  4. android浏览网页出现binder_alloc_buf, no vma
  5. DNS 标志位简要解析
  6. java preference xml,java-将PreferenceScreen添加到linearlayout
  7. 有红、白、黑三种球若干个,求红白黑球的数量
  8. 有些服务器转服不显示,桃花爆料|传说中的转服功能,竟然真的要出了?
  9. 背包问题九讲学习小记
  10. Redis的过期键删除策略和数据逐出策略