返回顶部
首页 > 资讯 > 数据库 >MySQL-1(12000字详解)
  • 642
分享到

MySQL-1(12000字详解)

mysql数据库 2023-10-10 13:10:39 642人浏览 泡泡鱼
摘要

一:数据库的引入 数据库在我们以后工作中是一个非常常用的知识,数据库用来存储数据,但是有些同学可能就会疑惑了,存储数据用文件就可以了,为什么还要弄个数据库呢? 文件保存数据有以下几个缺点: 文件的安全

一:数据库的引入

数据库在我们以后工作中是一个非常常用的知识,数据库用来存储数据,但是有些同学可能就会疑惑了,存储数据用文件就可以了,为什么还要弄个数据库呢?

文件保存数据有以下几个缺点:

  • 文件的安全性问题
  • 文件不利于数据查询和管理
  • 文件不利于存储海量数据
  • 文件在程序中控制不方便

数据库存储介质:

  • 磁盘
  • 内存

为了解决上述问题,专家们设计出更加利于管理数据的软件——数据库,它能更有效的管理数据。数据库可以提供远程服务,即通过远程连接来使用数据库,因此也称为数据库服务器

数据可以存储在内存和外存两种介质中。这两种存储介质在性能、容量和可靠性等方面有着不同的特点和限制。

  1. 内存存储(主存):

    • 特点:内存是计算机的主要工作区域,数据可以被快速读取和写入。它是临时存储数据的地方,当计算机关机或断电时,内存中的数据将丢失。
    • 优点:内存的读写速度非常快,可以迅速访问和操作数据。
    • 缺点:内存的容量较小,一般为几十GB至几百GB,因此无法长期存储大量的数据。此外,内存中的数据在断电或重新启动后会丢失。
  2. 外存存储(辅助存储):

    • 特点:外存储器通常是硬盘、固态硬盘(SSD)或网络存储等,它们用于长期存储数据。外存的读写速度相对较慢。
    • 优点:外存储器的容量通常较大,可以存储大量的数据并且数据不会因为断电而丢失。
    • 缺点:相对于内存来说,外存储器的读写速度较慢,读写数据需要一定的时间。

二:如何启动Mysql数据库

首先我们打开运行
在这里插入图片描述

接着搜索services.msc
在这里插入图片描述

找到mysql,并右键启动

在这里插入图片描述

接着打开cmd

在这里插入图片描述
输入命令:
mysql -u root -p

注意:没有分号

在这里插入图片描述

接着输入密码

在这里插入图片描述
这就成功开启了

在这里插入图片描述
接着就可以使用了

三:数据库基础

3.1 数据库操作

3.1.1显示所有数据库

我们可以在cmd中通过

  • show databases;

这个,命令来显示mysql中所有的数据库(是有s的),如图所示:

在这里插入图片描述

注意:"5 rows in set"是指查询结果集中有5行数据。"0.01 sec"表示查询所花费的时间,以秒为单位。这个信息告诉你查询返回了5行数据,并且查询的执行时间是0.01秒。

通过这个命令我们就可以知道我们目前有5个库,其中infORMation_schemamysqlperformance_schema是MySQL本身就存在的三个库。它们是系统默认创建的,用于存储和管理数据库的元数据信息、权限信息和性能统计数据。

studentstudentinfosystem是我自己创建的数据库,不是MySQL系统默认存在的。

3.2创建一个数据库

在cmd中,我们可以通过这个命令创建一个mysql数据库:

  • create database 数据库名;

注意:mysql是不区分大小写的,所以:

  • CREATE DATABASE 数据库名;

这个命令也可以使用

数据库的命名和java变量命名一样,但是如果你就是非要用关键字作为数据库的名字,那么你可以用反引号把数据库名字引起来
并且创建数据库的时候,不能和已有的数据库名字重复

使用结果如图所示:
在这里插入图片描述
接着我们再显示一下数据库,查看一下现存的数据库有哪些:
在这里插入图片描述
可以看出我们已经成功创建了一个ice数据库

下面还有其他形式的创建方式:

如果系统没有 db_test2 的数据库,则创建一个名叫 db_test2 的数据库,如果有则不创建

CREATE DATABASE IF NOT EXISTS db_test2;

如果系统没有 db_test 的数据库,则创建一个使用utf8mb4字符集的 db_test 数据库,如果有则不创建

 CREATE DATABASE IF NOT EXISTS db_test CHARACTER SET utf8mb4;

我们可以把 character set 合并为 charset

对于不同的字符集,表示一个汉字所需要的字节数一般不同,比如在GBK下,一个汉字的表示需要2个字节,二在UTF8下,一个字节的表示需要3个字节,如果不指定字符集的话,会使用默认的字符集(拉丁文),很可能插入中文失败,我们一般使用UTF8字符集

3.3选中数据库

既然我们现在已经会创建了数据库了,那么我们该如何去使用一个数据库呢?

在cmd中,我们通过这个命令来选中数据库:

  • use 数据库名;

在mysql数据库中,要想对这个数据库进行操作,你需要先选中这个数据库,选中这个数据库后,才能进行后续的操作

我们可以通过这个命令来选中不同的数据库,如图所示:
在这里插入图片描述

在MySQL中,当你切换到一个不同的数据库时,会显示"Database changed"的提示。这意味着你已经成功切换到了指定的数据库,可以开始执行与该数据库相关的操作了。

3.4 删除数据库

在mysql中,如果我们对已经不需要的数据库进行删除,那么我们该如何删除这个数据库呢?在mysql中,我们通过这个命令删除数据库:

  • drop database 数据库名;

如图所示:

在这里插入图片描述
注意:删库的操作是非常危险的,请谨慎使用,

3.2 mysql常用数据类型:

因为SQL比java更古老一点,所以有些类型可能会没有存在的必要

3.2.1 数值类型:

分为整型和浮点型:

数据类型大小对应java类型
BIT[ (M) ]M指定位数,默认为1常用Boolean对应BIT,此时默认是1位,即只能存0和1
TINYINT1字节Byte
SMALLINT2字节Short
INT4字节Integer
BIGINT8字节Long
FLOAT(M, D)4字节Float
DOUBLE(M,D)8字节Double
DECIMAL(M,D)M/D最大值+2BigDecimal
NUMERIC(M,D)M/D最大值+2BigDecimal

在java中,float和double存储浮点数会存在误差,decimal采用类似于字符串的存储方式保存,所以decimal对于浮点数的存储没有误差,但是decimal存储空间大,计算速度慢

对于上述的数值类型我们可以指定为无符号类型,但是不建议使用,无符号类型有很大的缺陷

在 MySQL 中,DECIMAL(M,D) 和 NUMERIC(M,D) 是用于存储固定精度的十进制数的数据类型。它们在定义上是相同的,具有相同的用途和行为。

这里是它们的异同:

  1. 别名:DECIMAL 和 NUMERIC 是互相可替代的别名。MySQL 允许使用它们来表示相同的数据类型。

  2. M 和 D 的含义:在 DECIMAL(M,D) 和 NUMERIC(M,D) 中,M 和 D 分别表示总位数(即精度)和小数位数(即标度)。

  • 总位数(M):表示该数字可以包含的总位数(包括整数和小数位)。
  • 小数位数(D):表示该数字可以包含的小数位数。

举例来说,DECIMAL(5,2) 可以存储最大为 5 位数的数字,其中有 2 位为小数位。例如,123.45 就可以存储在 DECIMAL(5,2) 数据类型中。

  1. 存储空间:DECIMAL 和 NUMERIC 的存储空间取决于指定的 M 和 D 值。它们的存储是根据需要动态调整的,以适应存储在列中的实际数据。

DECIMAL(M,D) 和 NUMERIC(M,D) 本质上是相同的,都用于存储固定精度的十进制数。它们的区别仅在于名称。

3.2.2 字符串类型

数据类型大小说明对应java类型
VARCHAR (SIZE)0-65,535可变长度字符串String
TEXT0-65,535长文本数据String
MEDIUMTEXT0-16 777 215中等长度文本数据String
BLOB0-65,535二进制形式的长文本数据byte[]

varchar中的size指定的是最大长度,单位是字符
eg:varchar(10)表示最大存储10个字,并且这种存储是动态存储的

3.2.3 日期类型

数据类型大小说明对应java类型
DATETIME8字节范围从1000到9999年,不会进行时区的检索及转换。java.util.Date、java.sql.Timestamp
TIMESTAMP4字节范围从1970到2038年,自动检索当前时区并进行转换。java.util.Date、java.sql.Timestamp

时间戳:以1970年1月1日0时0分为基础,计算当前时刻和基准时候的 秒数/毫秒 之差

3.3 表的操作

学习表的操作之前,我们需要了解一下什么是表,简单来说,就是表存在于数据库中,数据库中有多个表,这些表之间相互独立且彼此隔离。

可以用一个简单的图来示例它们之间的关系:
在这里插入图片描述

在对表进行任何操作前,都要先选中这个表所在的数据库

3.3.1 描述表

在mysql中,我们可以通过这个命令来查看表的结构:

  • desc 表名;

如图所示:
在这里插入图片描述

3.3.2 创建表

在mysql中,我们通过这个命令来创建一个表:

CREATE TABLE table_name (field1 datatype,field2 datatype,field3 datatype);

下面通过一个示例讲解:

create table stu_test ( id int, name varchar(20) comment '姓名', passWord varchar(50) comment '密码', age int, sex varchar(1), birthday timestamp, amout decimal(13,2), resume text);

在mysql中,使用 comment关键字来添加注释,注释的内容需要用单引号引起来,并且comment只能在创建表的时候使用,我们还可以在SQL中使用“- -空格+描述”来表示注释说明,我们更推荐用 - -空格作为注释

下面我再来讲解一下上面的命令:

这是一个在 MySQL 数据库中创建名为 “stu_test” 的表的示例代码。

  • id int: 这是一个整数型字段,用于存储学生的 ID。

  • name varchar(20) comment '姓名': 这是一个最大长度为 20 的字符串型字段,用于存储学生的姓名。注释 ‘姓名’ 是对该字段的描述。

  • password varchar(50) comment '密码': 这是一个最大长度为 50 的字符串型字段,用于存储学生的密码。注释 ‘密码’ 是对该字段的描述。

  • age int: 这是一个整数型字段,用于存储学生的年龄。

  • sex varchar(1): 这是一个最大长度为 1 的字符串型字段,用于存储学生的性别。

  • birthday timestamp: 这是一个日期时间型字段,用于存储学生的生日。它的数据类型为 TIMESTAMP,可以存储日期和时间。

  • amout decimal(13,2): 这是一个数字型字段,用于存储学生的金额。它的数据类型为 DECIMAL(13,2),表示可以存储最大 13 位数,其中 2 位为小数部分。

  • resume text: 这是一个文本型字段,用于存储学生的简历。它的数据类型为 TEXT,可以存储较大的文本数据。

通过这个示例代码,我们可以在 MySQL 数据库中创建一个名为 “stu_test” 的表,并定义包含上述字段的表结构。

下面是对这个表的描述:
在这里插入图片描述

3.3.3显示所有表

我们如果要先查看一个数据库中有哪些表的话,我们可以使用这个命令进行查看:

  • SHOW TABLES;

如图所示:
在这里插入图片描述

3.3.4 删除表

对于一个表的删除,我们可以使用下面的这个命令

--  删除 stu_test 表drop table stu_test;-- 如果存在 stu_test 表,则删除 stu_test 表drop table if exists stu_test;

请注意,删表和删库的操作都是很危险的,删除操作是不可逆的,所以在执行该命令之前,要确保你真的想要删除该表

3.4 表的增删查改(CRUD)

CRUD 即增加(Create)、查询(Retrieve)、更新(Update)、删除(Delete)四个单词的首字母缩写。

3.4.1 增加表中的数据

首先我们先创建一个表

DROP TABLE IF EXISTS student;CREATE TABLE student ( id INT, sn INT comment '学号', name VARCHAR(20) comment '姓名', qq_mail VARCHAR(20) comment 'QQ邮箱');

接着我们就可以在这个表中增加数据了:

-- 插入两条记录,value_list 数量必须和定义表的列的数量及顺序一致INSERT INTO student VALUES (100, 10000, '唐三藏', NULL);INSERT INTO student VALUES (101, 10001, '孙悟空', '11111');

这是两个 MySQL 的 单行数据全列插入语句,用于向名为 student 的表中插入数据。每个 INSERT 语句插入了一行数据。

第一个 INSERT 语句插入了以下数据:

  • 学生编号: 100
  • 学生学号: 10000
  • 学生姓名: 唐三藏
  • 学生密码: NULL(空值)

第二个 INSERT 语句插入了以下数据:

  • 学生编号: 101
  • 学生学号: 10001
  • 学生姓名: 孙悟空
  • 学生密码: ‘11111’

当然,我们还可以把这两个语句合并成一个语句:

INSERT INTO student VALUES (100, 10000, '唐三藏', NULL), (101, 10001, '孙悟空', '11111');

这就是多行数据 + 全列插入

我们可以将 insert into 合并为 into

这样就将两条 SQL 插入语句合并为一条使用,这样我们就同时把这两个数据新增到student这个表中了,对于一次新增n个数据和n次,一次新增一个数据来说,一次新增n个数据的效率会更高

3.4.1.1 多行数据 + 指定列插入
-- 插入两条记录,value_list 数量必须和指定列数量及顺序一致INSERT INTO student (id, sn, name) VALUES(102, 20001, '曹孟德'),(103, 20002, '孙仲谋');

这条插入语句的意思是往 student 表中插入两条记录,分别是 id: 102, sn: 20001, name: ‘曹孟德’,以及 id: 103, sn: 20002, name: ‘孙仲谋’。

我们还可以只指定 id 和 name两列进行插入

3.4.2 在表中查询数据

首先我们创建一个表,并在表中新增一些数据:

-- 创建考试成绩表DROP TABLE IF EXISTS exam_result;CREATE TABLE exam_result (id INT,name VARCHAR(20),chinese DECIMAL(3,1),math DECIMAL(3,1),english DECIMAL(3,1));-- 插入测试数据INSERT INTO exam_result (id,name, chinese, math, english) VALUES(1,'唐三藏', 67, 98, 56),(2,'孙悟空', 87.5, 78, 77),(3,'猪悟能', 88, 98.5, 90),(4,'曹孟德', 82, 84, 67),(5,'刘玄德', 55.5, 85, 45),(6,'孙权', 70, 73, 78.5),(7,'宋公明', 75, 65, 30);
3.4.2.1 全列查询
-- 通常情况下不建议使用 * 进行全列查询,因为-- 1. 查询的列越多,意味着需要传输的数据量越大;-- 2. 可能会影响到索引的使用。(索引待后面课程讲解)SELECT * FROM exam_result;

SELECT * FROM exam_result; 是一条 SQL 查询语句,用于从 exam_result 表中检索所有的数据记录。* 是通配符,表示选择所有的列。而 FROM exam_result 表示从名为 exam_result 的表中进行数据检索。

如图所示:
在这里插入图片描述

3.4.2.2 指定列查询
-- 指定列的顺序不需要按定义表的顺序来SELECT id, name, english FROM exam_result;

通过这个命令,我们就可以看想要看见的列
在这里插入图片描述

3.4.2.3查询字段为表达式

下面是示例语句

-- 表达式不包含字段SELECT id, name, 10 FROM exam_result;-- 表达式包含一个字段SELECT id, name, english + 10 FROM exam_result;-- 表达式包含多个字段SELECT id, name, chinese + math + english FROM exam_result;

下面我们对这三个语句进行解释:

  • SELECT id, name, 10 FROM exam_result;

这是一个简单的 SQL 查询语句,用于从 exam_result 表中选择 idname10 这三个列的数据。这个查询会返回 exam_result 表中每一行的 idname 列的值,并且 10 这个常量值会被作为第三列返回,因为在查询中没有指定该列的别名。

如图所示:
在这里插入图片描述

  • SELECT id, name, english + 10 FROM exam_result;

这个 SQL 查询语句是用来从 exam_result 表中选择 idnameenglish 列的值,并且对 english 列的值加上 10

换句话说,这个查询将返回 idnameenglish 列的值,而 english 列的值将在原有值的基础上增加 10。注意,english中的数据并没有发生改变

如图所示:

在这里插入图片描述

  • SELECT id, name, chinese + math + english FROM exam_result;

这个 SQL 查询语句的意思是从 exam_result 表中选择 idnamechinese + math + english 的总分,并显示在结果集中。通常情况下,语句中的 + 符号用于执行数值的加法操作,所以它将会对 chinesemathenglish 列的值进行相加,然后将结果作为一个新的列显示在结果集中。

如图所示:

在这里插入图片描述

3.4.2.4 别名

在mysql中,我们可以对字段进行重命名,在mysql中也叫别名,字段是,下面是一个示例语句:

字段 as 别名

这是别名的的一般形式,将字段重命名为别名

SELECT id, name, chinese + math + english AS 总分 FROM exam_result;-- as可以省略,所以也可以写成SELECT id, name, chinese + math + english 总分 FROM exam_result;

虽然as可以省略,但是并不建议省略as,因为省略了as,语句的可读性会差一点,

这两个个 SQL 查询语句是从 “exam_result” 表中选择 “id”、“name” 和 "chinese + math + english " 列,并给 “chinese + math + english” 列的总和起了一个别名 “总分”。

它的作用是获取"exam_result"表中每个学生的id、name和语文、数学和英语成绩的总和。结果集将包含这三个列,并在最后还会包含一个名为 “总分” 的列,显示每个学生的三科成绩总和。

如图所示:
在这里插入图片描述

如果你需要再对id重命名的话,你可以:

SELECT id AS aftid, name, chinese + math + english AS 总分FROM exam_result;
3.4.2.5 去重

在mysql中,我们使用DISTINCT(distinct)关键字对某列数据进行去重,示例语句如下:

SELECT DISTINCT math FROM exam_result;

这个 SQL 查询语句的意思是从 “exam_result” 表中选择不重复的数学成绩(“math” 列)。它会返回该列中所有不重复的数学成绩值。

注意:distinct保留第一个出现的值,去除掉第一个重复出现的值

3.4.2.6 排序

在mysql中,我们通过ORDER BY进行排序(采用的是并归排序),下面是示例语句:

-- 查询同学姓名和 qq_mail,按 qq_mail 排序显示-- ASC 为升序(从小到大)-- DESC 为降序(从大到小)-- 默认为 ASCSELECT name, qq_mail FROM student ORDER BY qq_mail;SELECT name, qq_mail FROM student  ORDER BY qq_mail DESC;

通过这两个查询语句,我们可以获取 “student” 表中 “name” 和 “qq_mail” 列的数据,并按照 “qq_mail” 列的升序或降序进行排序。

注意:NULL 数据排序,视为比任何值都小,升序出现在最上面,降序出现在最下面

我们还可以使用表达式及别名排序:

-- 查询同学及总分,由高到低SELECT name, chinese + english + math FROM exam_result ORDER BY chinese + english + math DESC;-- 等价于SELECT name, chinese + english + math as total FROM exam_result ORDER BY total DESC;

我们还可以对多个字段进行排序,排序优先级随书写顺序:

-- 查询同学各门成绩,依次按 数学降序,英语升序,语文升序的方式显示SELECT name, math, english, chinese FROM exam_result ORDER BY math DESC, english, chinese;

如果math的值相同了,那么再按照英语的排序规则(升序还是降序)再根据值进行排序,如果英语的值也一样,那么按照语文的值再进行比较

3.4.2.7 条件查询

比较运算符:

运算符说明
>, >=, <, <=大于,大于等于,小于,小于等于
=等于,NULL 不安全,例如 NULL = NULL 的结果是 NULL
<=>等于,NULL 安全,例如 NULL <=> NULL 的结果是 TRUE(1)
!=, <>不等于
BETWEEN a0 AND a1范围匹配,[a0, a1],如果 a0 <= value <= a1,返回 TRUE(1)
IN (option, …)如果是 option 中的任意一个,返回 TRUE(1)
IS NULL是 NULL
IS NOT NULL不是 NULL
LIKE模糊匹配。% 表示任意多个(包括 0 个)任意字符;_ 表示任意一个字符

下面说说like的使用方法:

  1. 匹配开头和结尾的模式:

    • 查找以"abc"开头的记录:SELECT * FROM 表名 WHERE 列名 LIKE 'abc%'
    • 查找以"xyz"结尾的记录:SELECT * FROM 表名 WHERE 列名 LIKE '%xyz'
  2. 匹配任意单个字符的模式:

    • 查找第一个字母为任意字符,第二个字母为"o"的记录:SELECT * FROM 表名 WHERE 列名 LIKE '_o%'
  3. 匹配多个字符的模式:

    • 查找包含"def"的记录:SELECT * FROM 表名 WHERE 列名 LIKE '%def%'
    • 查找以"a"开头,且长度为4个字符的记录:SELECT * FROM 表名 WHERE 列名 LIKE 'a___'
  4. 匹配特定字符集的模式:

    • 查找以"a"、“b” 或 “c” 开头的记录:SELECT * FROM 表名 WHERE 列名 LIKE '[abc]%'
    • 查找以"a"、“b” 或 “c” 结尾的记录:SELECT * FROM 表名 WHERE 列名 LIKE '%[abc]'
  5. 使用转义字符的模式:

    • 查找以"%“或”_"字符开头的记录:SELECT * FROM 表名 WHERE 列名 LIKE '\%%' ESCAPE '\\'

总结

  • %:代表0个或者n个字符
  • _ :代表任意1个字符

请注意,LIKE运算符是区分大小写的,如果需要进行不区分大小写的匹配,可以使用LOWER()或UPPER()函数将查询条件和列值转换为小写或大写。

下面是关于比较运算符一些要注意的地方:

  • null和其他数值进行运算,结果还是null
  • null结果在条件中的话,那就相当于false了

比如null == null 的结果还是null 而不是true

条件运算符:

运算符说明
AND多个条件必须都为 TRUE(1),结果才是 TRUE(1)
OR任意一个条件为 TRUE(1), 结果为 TRUE(1)
NOT条件为 TRUE(1),结果为 FALSE(0)

我们通过where子句和条件表达式,就可以完成条件查询了,eg:

select * from eaxm_result where english < 60;

通过这个我们就可以查询到在eaxm_result这个表中,英语分数小于60的记录了。

注意:

  1. WHERE条件可以使用表达式,但不能使用别名。
  2. AND的优先级高于OR,在同时使用时,需要使用小括号()包裹优先执行的部分

以下是一些搭配where和条件表达式使用的语句:

-- 查询英语不及格的同学及英语成绩 ( < 60 )SELECT name, english FROM exam_result WHERE english < 60;-- 查询语文成绩好于英语成绩的同学SELECT name, chinese, english FROM exam_result WHERE chinese > english;-- 查询总分在 200 分以下的同学SELECT name, chinese + math + english 总分 FROM exam_result WHERE chinese + math + english < 200;-- 查询语文成绩大于80分,且英语成绩大于80分的同学SELECT * FROM exam_result WHERE chinese > 80 and english > 80;-- 查询语文成绩大于80分,或英语成绩大于80分的同学SELECT * FROM exam_result WHERE chinese > 80 or english > 80;-- 注意加括号,and的优先级比or高SELECT * FROM exam_result WHERE (chinese > 80 or math>70) and english > 70;-- 查询语文成绩在 [80, 90] 分的同学及语文成绩SELECT name, chinese FROM exam_result WHERE chinese BETWEEN 80 AND 90;-- 使用 AND 也可以实现SELECT name, chinese FROM exam_result WHERE chinese >= 80 AND chinese <= 90;-- 查询数学成绩是 58 或者 59 或者 98 或者 99 分的同学及数学成绩SELECT name, math FROM exam_result WHERE math IN (58, 59, 98, 99);-- 使用 OR 也可以实现SELECT name, math FROM exam_result WHERE math = 58 OR math = 59 OR math = 98 OR math = 99;-- % 匹配任意多个(包括 0 个)字符SELECT name FROM exam_result WHERE name LIKE '孙%';-- 匹配到孙悟空、孙权-- _ 匹配严格的一个任意字符SELECT name FROM exam_result WHERE name LIKE '孙_';-- 匹配到孙权-- 查询 qq_mail 已知的同学姓名SELECT name, qq_mail FROM student WHERE qq_mail IS NOT NULL;-- 查询 qq_mail 未知的同学姓名SELECT name, qq_mail FROM student WHERE qq_mail IS NULL;
3.4.2.8 分页查询

语法:

-- 起始下标为 0-- 从 0 开始,筛选 n 条结果SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT n;-- 从 s 开始,筛选 n 条结果SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT s, n;-- 从 s 开始,筛选 n 条结果,比第二种用法更明确,建议使用SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT n OFFSET s;

案例:按 id 进行分页,每页 3 条记录,分别显示 第 1、2、3 页

-- 第 1 页SELECT id, name, math, english, chinese FROM exam_result ORDER BY id LIMIT 3 OFFSET 0;-- 第 2 页SELECT id, name, math, english, chinese FROM exam_result ORDER BY id LIMIT 3 OFFSET 3;-- 第 3 页,如果结果不足 3 个,不会有影响SELECT id, name, math, english, chinese FROM exam_result ORDER BY id LIMIT 3 OFFSET 6;

3.4.3 修改表中的数据

语法:

UPDATE table_name SET column = expr [, column = expr ...][WHERE ...] [ORDER BY ...] [LIMIT ...]

案例:

-- 将孙悟空同学的数学成绩变更为 80 分UPDATE exam_result SET math = 80 WHERE name = '孙悟空';-- 将曹孟德同学的数学成绩变更为 60 分,语文成绩变更为 70 分UPDATE exam_result SET math = 60, chinese = 70 WHERE name = '曹孟德';-- 将总成绩倒数前三的 3 位同学的数学成绩加上 30 分UPDATE exam_result SET math = math + 30 ORDER BY chinese + math + english LIMIT 3;-- 将所有同学的语文成绩更新为原来的 2 倍UPDATE exam_result SET chinese = chinese * 2;

在修改中,如果不写where条件,那么修改就是针对所有行进行的

3.4.4 删除表中的数据

语法:

DELETE FROM  table_name [WHERE ...] [ORDER BY ...] [LIMIT ...]

案例:

-- 删除孙悟空同学的考试成绩DELETE FROM exam_result WHERE name = '孙悟空';

注意:在mysql中,如果delete后面不跟where,也没有limit,那么删除的是整张表的数据,这和删表无异,表中的数据都没了,只不过这张表还在而已

四:重点内容总结

新增:

-- 单行插入insert into(字段1, ..., 字段N) values (value1, ..., value N);-- 多行插入insert into(字段1, ..., 字段N) values(value1, ...),(value2, ...),(value3, ...);

查询:

-- 全列查询select * from-- 指定列查询select 字段1,字段2... from-- 查询表达式字段select 字段1+100,字段2+字段3 from-- 别名select 字段1 别名1, 字段2 别名2 from-- 去重DISTINCTselect distinct 字段 from-- 排序ORDER BYselect * fromorder by 排序字段-- 条件查询WHERE:-- (1)比较运算符 (2)BETWEEN ... AND ... (3)IN (4)IS NULL (5)LIKE (6)AND (7)OR (8)NOTselect * fromwhere 条件

修改:

updateset 字段1=value1, 字段2=value2... where 条件

删除:

delete fromwhere 条件

来源地址:https://blog.csdn.net/weixin_73232539/article/details/133543530

您可能感兴趣的文档:

--结束END--

本文标题: MySQL-1(12000字详解)

本文链接: https://lsjlt.com/news/427325.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • MySQL-1(12000字详解)
    一:数据库的引入 数据库在我们以后工作中是一个非常常用的知识,数据库用来存储数据,但是有些同学可能就会疑惑了,存储数据用文件就可以了,为什么还要弄个数据库呢? 文件保存数据有以下几个缺点: 文件的安全...
    99+
    2023-10-10
    mysql 数据库
  • MySQL中的@i:=@i+1用法详解
    在MySQL中,@i:=@i+1是一个非常有用的表达式,用于在查询中生成一个递增的序列号。它可以帮助我们对结果进行编号,或者在需要连续的数字序列时提供便利。 我们先来了解一下MySQL中的用户变量。用户变量是一个用户定义的变量,其以@开头。...
    99+
    2023-09-09
    mysql 数据库 sql
  • 详解python中[-1]、[:-1]、[::-1]、[n::-1]使用方法
    [m : ] 代表列表中的第m+1项到最后一项 [ : n] 代表列表中的第一项到第n项 [-1] 代表去到最后一项 [:-1]代表除了最后一个都获取到 [::-...
    99+
    2024-04-02
  • MySQL-2(14000字详解)
    一: 数据库约束 在 MySQL 中,约束是用于限制数据库表中数据的规则或条件。它们是为了保证数据的完整性和一致性。MySQL 提供了多种约束类型,包括 NOT NULL、UNIQUE、DEFAULT...
    99+
    2023-10-12
    mysql 数据库
  • MySQL-3(9000字详解)
    一:索引 索引是一种特殊的文件,包含着对数据表里所有记录的引用指针。可以对表中的一列或多列创建索引,并指定索引的类型,各类索引有各自的数据结构实现。 1.1索引的意义 索引的意义:加快查找速度,但需要...
    99+
    2023-10-18
    mysql 数据库
  • mysql 基础(1)字段类型
    互联网工程师(id:phpstcn),我们一起学习,一起进步...
    99+
    2018-11-27
    mysql 基础(1)字段类型
  • redis 详解(1)特性
    redis 是什么 开源的基于键值的存储服务系统,支持多种数据结构,高性能、功能丰富 redis 特性 速度快(10w OPS) 数据存储内存中 C 语言编写 单线程模型 持久化 redis 所有数据保存在内存中,对数据更新将异步...
    99+
    2016-08-15
    redis 详解(1)特性
  • JDBC 技术详解1
    jdbc是数据库中十分重要的一项技术,是我们在做项目最常用的一类接口实现类, 这里就个朋友们简单详细的聊一下。 首先我们应该知道什么是jdbc JDBC(JavaDataBaseConnectivity)j...
    99+
    2024-04-02
  • MySQL优化(1):字段的设计
    Web项目中,当Java或者Go等语言速度提升到瓶颈的时候,我们需要关心MySQL的优化 可以优化的方面有很多:设计表、负载均衡、读写分离、SQL语句优化等   (1)IP地址设计 例如我们需要存储IP地址:192.168.1.1...
    99+
    2021-10-18
    MySQL优化(1):字段的设计
  • mysql 将字段值+1或自增
    一、解决方式: SET @var = 1; UPDATE jes_menu_info SET MENU_SORT = (@var := @var + 1) WHERE ss_id='ACC'; 二、解读用户变量,在客户端链...
    99+
    2023-09-13
    mysql
  • 如何详解MySQL中LAST_INSERT_ID()函数的用法?(1)
    LAST_INSERT_ID()函数的解释 LAST_INSERT_ID()函数是MySQL中的一个非常有用的函数,它用于获取最后一次插入操作中自动生成的主键值(通常是自增类型)。 在许多数据库应用程序中,插入新数据后需要获取刚插入记录的自...
    99+
    2023-10-10
    mysql 数据库
  • 【MySQL】EXPLAIN 语句 各字段 详解
    EXPLAIN 语句 概貌 在连接查询的执行计划中: 每个表都会对应一条记录,这些记录的 id 列的值是相同的; 在包含子查询的执行计划中 :每个 select关键字都会对应一个唯...
    99+
    2023-10-27
    mysql 数据库
  • mysql字符集与校对集详解
    设置数据存储编码格式 1)utf8 2)utf8mb4 (支持Emoji 表情(Emoji 是一种特殊的 Unicode 编码,常见于 ios 和 android 手机上)) 校对集 collate 每种字符集都对应一些校对集,校对集会...
    99+
    2017-01-23
    mysql字符集与校对集详解
  • Android RecyclerView线性布局详解(1)
    RecyclerView是Android 5.0新增的控件,在android-support-v7下面。官方文档对RecycleView介绍很简洁到位,如下: A flexib...
    99+
    2022-06-06
    布局 recyclerview Android
  • C#中的LINQ to Objects详解(1)
    目录一、概述二、 Linq to Objects中的延迟计算1. Linq延迟计算的注意点2. 整理Linq to Objects中运算符延迟计算特性1、具有延迟计算的运算符2、立即...
    99+
    2024-04-02
  • 详解C++之类和对象(1)
    目录C语言和C++的一大区别struct和class的区别总结c++类的由来(或者说为什么要增加类):我们知道c语言是面向过程的语言,c++是即面向过程又是面向过程的语言。那么这两个...
    99+
    2024-04-02
  • MyBatis中不建议使用where 1=1原因详解
    目录前言错误的改造方式正确的改进方式不传任何参数的请求传递 1 个参数的请求传递 2 个参数的请求用法解析总结前言 最近接手了一个老项目,“愉悦的心情”自然无...
    99+
    2024-04-02
  • MySQL中ESCAPE关键字的用法详解
    MySQL转义 转义即表示转义字符原来的语义,一个转义字符的目的是开始一个字符序列,使得转义字符开头的该字符序列具有不同于该字符序列单独出现时的语义。 MySQL中,转义字符以“\”开头,编程中常见的转义字符,在M...
    99+
    2022-05-30
    MySQL ESCAPE关键字 MySQL ESCAPE
  • MySQL中JSON字段数据类型详解
    目录前言创建jsON值搜索JSON类型数据在 JSON 和非 JSON 值之间转换JSON 值的汇总总结前言JSON 类型是从 mysql 5.7 版本开始支持的功能,MySQL 支持由RFC 7159定义的本机JSON数...
    99+
    2022-06-14
    mysql的json数据类型 数据库json类型 数据库json字段
  • mysql sql字符串截取函数详解
    mysql字符串截取函数主要有 left()、right()、substring()、substring_index() 一、left()从左开始截取字符串 用法:left...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作