MySQL基础篇

一.MySQL概述

1.1 数据库相关概念

数据库:存储数据的仓库,数据是有组织的进行存储

数据库管理系统:操纵和管理数据库的大型软件

SQL:操作关系型数据库的编程语言,定义了一套操作 关系型数据库统一标准

而目前主流的关系型数据库管理系统的市场占有率排名如下:

        不论我们使用的是上面的哪一个关系型数据库,最终在操作时,都是使用SQL语言来进行统一操作, 因为我们前面讲到SQL语言,是操作关系型数据库的 统一标准 。所以即使我们现在学习的是MySQL, 假如我们以后到了公司,使用的是别的关系型数据库,如:Oracle、DB2、SQLServer,也完全不用 担心,因为操作的方式都是一致的。

1.2 MySQL数据库

官网: https://www.mysql.com/

1.2.1 版本

MySQL官方提供了两种不同的版本:

社区版本(MySQL Community Server) 免费, MySQL不提供任何技术支持

商业版本(MySQL Enterprise Edition) 收费,可以使用30天,官方提供技术支持

本教程采用的社区版本

1.2.2 下载

下载地址:https://downloads.mysql.com/archives/installer/

1.2.3 安装

要想使用MySQL,我们首先先得将MySQL安装好,我们可以根据下面的步骤,一步一步的完成MySQL的 安装。

第一步:双击从官方下载的安装包文件

第二步:根据安装提示进行安装

第三步:配置

安装好MySQL之后,还需要配置环境变量,这样才可以在任何目录下连接MySQL。

在系统的环境变量中找到 Path 系统变量, 点击 "编辑"

选择 "新建" , 将MySQL Server的安装目录下的bin目录添加到环境变量

1.2.4 启动和停止MySQL服务 

打开命令提示符窗口输入以下命令来开启或关闭服务

开启服务:net start mysql

关闭服务:net stop mysql

1.2.5 客户端连接

方式一:使用MySQL提供的客户端命令行工具

方式二:使用系统自带的命令行工具执行指令

[ ]内为可选参数,如果需要连接远程的MySQL,需要加上这两个参数来指定远程主机IP、端口,如果 连接本地的MySQL,则无需指定这两个参数。 

注意: 使用这种方式进行连接时,需要安装完毕后配置PATH环境变量。

1.1.6 数据模型

1.关系型数据库

概念:建立在关系模型基础上,由多张相互连接的二维表组成的数据库。

二维表:而所谓二维表,指的是由行和列组成的表,如下图(就类似于Excel表格数据,有表头、有列、有行, 还可以通过一列关联另外一个表格中的某一列数据)。我们之前提到的MySQL、Oracle、DB2、 SQLServer这些都是属于关系型数据库,里面都是基于二维表存储数据的。简单说,基于二维表存储 数据的数据库就成为关系型数据库,不是基于二维表存储数据的数据库,就是非关系型数据库。

特点:

A. 使用表存储数据,格式统一,便于维护。

B. 使用SQL语言操作,标准统一,使用方便。

2.数据模型

MySQL是关系型数据库,是基于二维表进行数据存储的,具体的结构图下:

我们可以通过MySQL客户端连接数据库管理系统DBMS,然后通过DBMS操作数据库。

可以使用SQL语句,通过数据库管理系统操作数据库,以及操作数据库中的表结构及数据。

一个数据库服务器中可以创建多个数据库,一个数据库中也可以包含多张表,而一张表中又可以包 含多行记录。

二.MySQL的字段类型

MySQL 字段类型可以简单分为三大类:

数值类型:

  • 整型:TINYINT、SMALLINT、MEDIUMINT、INT 和 BIGINT

  • 浮点型:FLOAT 和 DOUBLE

  • 定点型:DECIMAL

字符串类型:

  • CHAR、VARCHAR、TINYTEXT、TEXT、MEDIUMTEXT、LONGTEXT、TINYBLOB、BLOB、MEDIUMBLOB 和 LONGBLOB 等。最常用的是 CHAR 和 VARCHAR。

日期时间类型:

  • YEAR、TIME、DATE、DATETIME 和 TIMESTAMP。

2.1 数值类型

DECIMAL是用于存储精确小数值的数据类型。相比于FLOAT和DOUBLE等浮点数类型,DECIMAL能够确保小数点后的位数精确度不丢失,适用于金融、计算税费、精确度要求较高的场景。在MySQL中,DECIMAL通常指定两个参数:第一个参数指定数字的最大长度,第二个参数指定小数点后的位数。

2.2 字符串类型

char 与 varchar 都可以描述字符串,char是定长字符串,指定长度多长,就占用多少个字符,和 字段值的长度无关 。而varchar是变长字符串,指定的长度为最大占用长度 。相对来说,char的性能会更高些。 

2.3 日期时间类型

三.SQL

全称 Structured Query Language,结构化查询语言。操作关系型数据库的编程语言,定义了 一套操作关系型数据库统一标准 。

3.1 SQL通用语法

在学习具体的SQL语句之前,先来了解一下SQL语言的同于语法。

1.SQL语句可以单行或多行书写,以分号结尾。

2.SQL语句可以使用空格或者缩进来增强语句的可读性。

3.MySQL数据库的SQL语句不区分大小写,关键字建议使用大写。

4.注释:

单行注释:-- 注释内容  或  # 注释内容

多行注释:/* 注释内容 */

3.2 SQL 分类

SQL语句,根据其功能,主要分为四类:DDL、DML、DQL、DCL。

3.3 DDL

Data Definition Language,数据定义语言,用来定义数据库对象(数据库,表,字段) 。

3.3.1 数据库操作

1.查询所有数据库

show databases ;

2.查询当前数据库

select database() ;

3.创建数据库

create database [ if not exists ] 数据库名 [ default charset 字符集 ] [ collate 排序 规则 ] ;

4.删除数据库

drop database [ if exists ] 数据库名 ;

5.切换数据库

use 数据库名 ;

3.3.2 表操作

1.表操作-查询创建

查询当前数据库所有表:show tables;

查看指定表结构:desc 表名;

查询指定表的建表语句:show create table 表名;

创建表结构

CREATE TABLE 表名(

                字段1 字段1类型 [ COMMENT 字段1注释 ],

                字段2 字段2类型 [COMMENT 字段2注释 ],

                字段3 字段3类型 [COMMENT 字段3注释 ],

                ......

                字段n 字段n类型 [COMMENT 字段n注释 ]

) [ COMMENT 表注释 ] ;

3.表操作-修改

添加字段

ALTER TABLE 表名 ADD 字段名 类型 (长度) [ COMMENT 注释 ] [ 约束 ];

修改数据类型

ALTER TABLE 表名 MODIFY 字段名 新数据类型 (长度);

修改字段名和字段类型

ALTER TABLE 表名 CHANGE 旧字段名 新字段名 类型 (长度) [ COMMENT 注释 ] [ 约束 ];

删除字段

 ALTER TABLE 表名 DROP 字段名;

修改表名

ALTER TABLE 表名 RENAME TO 新表名;

4.表操作-删除

删除表

DROP TABLE [ IF EXISTS ] 表名;

删除指定表, 并重新创建表

TRUNCATE TABLE 表名;

注意: 在删除表的时候,表中的全部数据也都会被删除。

3.4 图形化界面工具

上述,我们已经讲解了通过DDL语句,如何操作数据库、操作表、操作表中的字段,而通过DDL语句执行在命令行进行操作,主要存在以下两点问题:

  • 会影响开发效率 

  • 使用起来,并不直观,并不方便 

所以呢,我们在日常的开发中,会借助于MySQL的图形化界面,来简化开发,提高开发效率。而目前 mysql主流的图形化界面工具,有下图所示的几种。而本文章中,选择最后一种DataGrip,这种图形化界面工具,功能更加强大,界面提示更加友好, 是我们使用MySQL的不二之选。接下来,我们来介绍一下DataGrip该如何安装、使用。

1.安装

第一步:去官网下载好安装包,双击开始安装

第二步:点击next,一步一步的完成安装

2.使用

第一步:创建项目

第一次使用的时候,会首先让你创建一个项目才能进去。输入一个项目名称,进入即可

第二步:添加数据源

参考图示, 一步步操作即可

配置以及驱动jar包下载完毕之后,就可以点击 "Test Connection" 就可以测试,是否可以连接 MySQL,如果出现 "Successed",就表名连接成功了 。

第三步:展示所有数据库

连接上了MySQL服务之后,并未展示出所有的数据库,此时,我们需要设置,展示所有的数据库,具体 操作如下:

第四步:创建数据库

注意: 以下两种方式都可以创建数据库:

A. create database db01;

B. create schema db01; 

第五步:创建表

在指定的数据库上面右键,选择new --> Table

第六步:修改表结构

在需要修改的表上,右键选择 "Modify Table..."

如果想增加字段,直接点击+号,录入字段信息,然后点击Execute即可。

如果想删除字段,直接点击-号,就可以删除字段,然后点击Execute即可。

如果想修改字段,双击对应的字段,修改字段信息,然后点击Execute即可。

如果要修改表名,或表的注释,直接在输入框修改,然后点击Execute即可。

第七步:在DataGrip中执行SQL语句

在指定的数据库上,右键,选择 New --> Query Console

然后就可以在打开的Query Console控制台,并在控制台中编写SQL,执行SQL。 

3.5 DML

DML英文全称是Data Manipulation Language(数据操作语言),用来对数据库中表的数据记录进行增、删、改操作。

3.5.1 添加数据

1.给指定字段添加数据

INSERT INTO 表名 (字段名1, 字段名2, ...) VALUES (值1, 值2, ...);

插入数据完成之后,我们有两种方式,查询数据库的数据:

2.给全部字段添加数据

INSERT INTO 表名 VALUES (值1, 值2, ...);

3.批量添加数据

INSERT INTO 表名 (字段名1, 字段名2, ...) VALUES (值1, 值2, ...), (值1, 值2, ...), (值
1, 值2, ...) ;
INSERT INTO 表名 VALUES (值1, 值2, ...), (值1, 值2, ...), (值1, 值2, ...) ;

注意事项:

插入数据时,指定的字段顺序需要与值的顺序是一一对应的。

字符串和日期型数据应该包含在引号中。

插入的数据大小,应该在字段的规定范围内。

3.5.2 修改数据

修改数据的具体语法为:

UPDATE 表名 SET 字段名1 = 值1 , 字段名2 = 值2 , .... [ WHERE 条件 ] ;

3.5.3 删除数据

删除数据的具体语法为:

DELETE FROM 表名 [ WHERE 条件 ] ;

3.6 DQL

DQL英文全称是Data Query Language(数据查询语言),数据查询语言,用来查询数据库中表的记 录。

3.6.1 基本语法

DQL 查询语句,语法结构如下:

SELECT
    字段列表
FROM
    表名列表
WHERE
    条件列表
GROUP BY
    分组字段列表
HAVING
    分组后条件列表
ORDER BY
    排序字段列表
LIMIT
    分页参数

我们在讲解这部分内容的时候,会将上面的完整语法进行拆分,分为以下几个部分:

基本查询(不带任何条件)

条件查询(WHERE)

聚合函数(count、max、min、avg、sum)

分组查询(group by)

排序查询(order by)

分页查询(limit)

3.6.2 基础查询

在基本查询的DQL语句中,不带任何的查询条件,查询的语法如下:

1.查询多个字段

SELECT 字段1, 字段2, 字段3 ... FROM 表名 ;
SELECT * FROM 表名 ;

注意 : * 号代表查询所有字段,在实际开发中尽量少用(不直观、影响效率)。

2.字段设置别名

SELECT 字段1 [ AS 别名1 ] , 字段2 [ AS 别名2 ] ... FROM 表名;
SELECT 字段1 [ 别名1 ] , 字段2 [ 别名2 ] ... FROM 表名;

3.去除重复记录

SELECT DISTINCT 字段列表 FROM 表名;

3.6.3 条件查询

1.语法

SELECT 字段列表 FROM 表名 WHERE 条件列表 ;

2.条件

常用的比较运算符如下:

常用的逻辑运算符如下:

3.6.4 聚合函数 

1.介绍

将一列数据作为一个整体,进行纵向计算 。

2.常见的聚合函数

3.语法 

SELECT 聚合函数(字段列表) FROM 表名 ;

 注意 : NULL值是不参与所有聚合函数运算的。

3.6.5 分组查询

1.语法

SELECT 字段列表 FROM 表名 [ WHERE 条件 ] GROUP BY 分组字段名 [ HAVING 分组 后过滤条件 ];

2.where与having区别

执行时机不同:where是分组之前进行过滤,不满足where条件,不参与分组;而having是分组 之后对结果进行过滤。

判断条件不同:where不能对聚合函数进行判断,而having可以。

注意事项:

分组之后,查询的字段一般为聚合函数和分组字段,查询其他字段无任何意义。

执行顺序: where > 聚合函数 > having 。

支持多字段分组, 具体语法为 : group by columnA,columnB

3.6.6 排序查询

1.语法

SELECT 字段列表 FROM 表名 ORDER BY 字段1 排序方式1 , 字段2 排序方式2 ;

2.排序方式

ASC : 升序(默认值)

DESC: 降序

注意事项:

如果是升序, 可以不指定排序方式ASC ;

如果是多字段排序,当第一个字段值相同时,才会根据第二个字段进行排序 ;

3.6.7 分页查询

1.语法

SELECT 字段列表 FROM 表名 LIMIT 起始索引, 查询记录数 ;

注意事项:

起始索引从0开始,起始索引 = (查询页码 - 1)* 每页显示记录数。

分页查询是数据库的方言,不同的数据库有不同的实现,MySQL中是LIMIT。

如果查询的是第一页数据,起始索引可以省略,直接简写为 limit 10。

3.6.8 执行顺序

在讲解DQL语句的具体语法之前,我们已经讲解了DQL语句的完整语法,及编写顺序,接下来,我们要 来说明的是DQL语句在执行时的执行顺序,也就是先执行那一部分,后执行那一部分。

验证:

查询年龄大于15的员工姓名、年龄,并根据年龄进行升序排序。

select name , age from emp where age > 15 order by age asc;

在查询时,我们给emp表起一个别名 e,然后在select 及 where中使用该别名。

select e.name , e.age from emp e where e.age > 15 order by age asc;

执行上述SQL语句后,我们看到依然可以正常的查询到结果,此时就说明: from 先执行, 然后 where 和 select 执行。那 where 和 select 到底哪个先执行呢?

此时,此时我们可以给select后面的字段起别名,然后在 where 中使用这个别名,然后看看是否可 以执行成功。

select e.name ename , e.age eage from emp e where eage > 15 order by age asc

执行上述SQL报错了

由此我们可以得出结论: from 先执行,然后执行 where , 再执行select 。

接下来,我们再执行如下SQL语句,查看执行效果:

select e.name ename , e.age eage from emp e where e.age > 15 order by eage asc;

结果执行成功。 那么也就验证了: order by 是在select 语句之后执行的。

综上所述,我们可以看到DQL语句的执行顺序为: from ... where ... group by ... having ... select ... order by ... limit ...

3.7 DCL

DCL英文全称是Data Control Language(数据控制语言),用来管理数据库用户、控制数据库的访 问权限。

3.7.1 管理用户

1.查询用户 

select * from mysql.user;

2.创建用户

CREATE USER '用户名'@'主机名' IDENTIFIED BY '密码';

3.修改用户密码

ALTER USER '用户名'@'主机名' IDENTIFIED WITH mysql_native_password BY '新密码' ;

4.删除用户

DROP USER '用户名'@'主机名' 

注意事项:

在MySQL中需要通过用户名@主机名的方式,来唯一标识一个用户。

主机名可以使用 % 通配。

这类SQL开发人员操作的比较少,主要是DBA( Database Administrator 数据库 管理员)使用。

3.7.2 权限控制

MySQL中定义了很多种权限,但是常用的就以下几种:

上述只是简单罗列了常见的几种权限描述,其他权限描述及含义,可以直接参考官方文档MySQL :: MySQL 8.0 Reference Manual :: 6.2.2 Privileges Provided by MySQL

1.查询权限

SHOW GRANTS FOR '用户名'@'主机名' ;

2.授予权限

GRANT 权限列表 ON 数据库名.表名 TO '用户名'@'主机名';

3.撤销权限

REVOKE 权限列表 ON 数据库名.表名 FROM '用户名'@'主机名';

注意事项:

多个权限之间,使用逗号分隔

授权时, 数据库名和表名可以使用 * 进行通配,代表所有。

四.函数

函数 是指一段可以直接被另一段程序调用的程序或代码。 也就意味着,这一段程序或代码在MySQL中 已经给我们提供了,我们要做的就是在合适的业务场景调用对应的函数完成对应的业务需求即可。

MySQL中的函数主要分为以下四类: 字符串函数、数值函数、日期函数、流程函数

4.1 字符串函数

MySQL中内置了很多字符串函数,常用的几个如下:

4.2 数值函数

常见的数值函数如下:

4.3 日期函数

常见的日期函数如下:

4.4 流程函数

流程函数也是很常用的一类函数,可以在SQL语句中实现条件筛选,从而提高语句的效率。

五.约束

5.1 概述

概念:约束是作用于表中字段上的规则,用于限制存储在表中的数据。

目的:保证数据库中数据的正确、有效性和完整性。

分类:

注意:约束是作用于表中字段上的,可以在创建表/修改表的时候添加约束。

5.2 外键约束

5.2.1 什么是外键约束

外键约束是用来让两张表的数据之间建立连接,从而保证数据的一致性和完整性。

5.2.2 语法

1.添加外键

CREATE TABLE 表名(
字段名 数据类型,
...
[CONSTRAINT] [外键名称] FOREIGN KEY (外键字段名) REFERENCES 主表 (主表列名)
);
ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY (外键字段名)
REFERENCES 主表 (主表列名) ;

2.删除外键

ALTER TABLE 表名 DROP FOREIGN KEY 外键名称;

5.2.3 删除/更新行为

添加了外键之后,再删除父表数据时产生的约束行为,我们就称为删除/更新行为。具体的删除/更新行 为有以下几种:

具体语法为:

ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY (外键字段) REFERENCES
主表名 (主表字段名) ON UPDATE CASCADE ON DELETE CASCADE;

六.多表查询

6.1 多表关系

项目开发中,在进行数据库表结构设计时,会根据业务需求及业务模块之间的关系,分析并设计表结 构,由于业务之间相互关联,所以各个表结构之间也存在着各种联系,基本上分为三种:

一对多(多对一) 、多对多 、一对一

6.1.1 一对多

案例: 部门 与 员工的关系

关系: 一个部门对应多个员工,一个员工对应一个部门

实现: 在多的一方建立外键,指向一的一方的主键

6.1.2 多对多 

案例: 学生 与 课程的关系

关系: 一个学生可以选修多门课程,一门课程也可以供多个学生选择

实现: 建立第三张中间表,中间表至少包含两个外键,分别关联两方主键

6.1.3 一对一

案例: 用户 与 用户详情的关系

关系: 一对一关系,多用于单表拆分,将一张表的基础字段放在一张表中,其他详情字段放在另 一张表中,以提升操作效率

实现: 在任意一方加入外键,关联另外一方的主键,并且设置外键为唯一的(UNIQUE) 

6.2 多表查询概述

6.2.1 什么是多表查询

多表查询就是指从多张表中查询数据。

6.2.2 分类

连接查询

        内连接:相当于查询A、B交集部分数据

        外连接:

                左外连接:查询左表所有数据,以及两张表交集部分数据

                右外连接:查询右表所有数据,以及两张表交集部分数据

        自连接:当前表与自身的连接查询,自连接必须使用表别名

子查询

6.3 内连接

内连接查询的是两张表交集部分的数 据。(也就是绿色部分的数据)

内连接的语法分为两种: 隐式内连接、显式内连接。先来学习一下具体的语法结构。

1.隐式内连接

SELECT 字段列表 FROM 表1 , 表2 WHERE 条件 ... ;

2.显式内连接

SELECT 字段列表 FROM 表1 [ INNER ] JOIN 表2 ON 连接条件 ... ;

6.4 外连接

外连接分为两种,分别是:左外连接 和 右外连接。具体的语法结构为:

1.左外连接

SELECT 字段列表 FROM 表1 LEFT [ OUTER ] JOIN 表2 ON 条件 ... ;

2.右外连接

SELECT 字段列表 FROM 表1 RIGHT [ OUTER ] JOIN 表2 ON 条件 ... ;

注意事项: 左外连接和右外连接是可以相互替换的,只需要调整在连接查询时SQL中,表结构的先后顺 序就可以了。而我们在日常开发使用时,更偏向于左外连接。

6.5 自连接

6.5.1 自连接查询

而对于自连接查询,可以是内连接查询,也可以是外连接查询。

1.自连接的查询语法:

SELECT 字段列表 FROM 表A 别名A JOIN 表A 别名B ON 条件 ... ;

注意事项: 在自连接查询中,必须要为表起别名,要不然我们不清楚所指定的条件、返回的字段,到底 是哪一张表的字段。

5.5.2 联合查询

对于union查询,就是把多次查询的结果合并起来,形成一个新的查询结果集。

SELECT 字段列表 FROM 表A ...
UNION [ ALL ]
SELECT 字段列表 FROM 表B ....;

对于联合查询的多张表的列数必须保持一致,字段类型也需要保持一致。

union all 会将全部的数据直接合并在一起,union 会对合并之后的数据去重。

6.6 子查询

6.6.1 概述

1.概念

SQL语句中嵌套SELECT语句,称为嵌套查询,又称子查询。

SELECT * FROM t1 WHERE column1 = ( SELECT column1 FROM t2 );

2.分类

根据子查询结果不同,分为:

A. 标量子查询(子查询结果为单个值)

B. 列子查询(子查询结果为一列)

C. 行子查询(子查询结果为一行)

D. 表子查询(子查询结果为多行多列)

根据子查询位置,分为:

A. WHERE之后

B. FROM之后

C. SELECT之后

6.6.2 标量子查询

子查询返回的结果是单个值(数字、字符串、日期等),最简单的形式,这种子查询称为标量子查询。

常用的操作符:= <> > >= < <=

6.6.3 列子查询

子查询返回的结果是一列(可以是多行),这种子查询称为列子查询。

常用的操作符:

6.6.4 行子查询

子查询返回的结果是一行(可以是多列),这种子查询称为行子查询。

常用的操作符:= 、<> 、IN 、NOT IN

6.6.5 表子查询

子查询返回的结果是多行多列,这种子查询称为表子查询。

常用的操作符:IN

七. 事务

7.1 事务简介

事务 是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系 统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败。

注意: 默认MySQL的事务是自动提交的,也就是说,当执行完一条DML语句时,MySQL会立即隐 式的提交事务。

7.2 事务四大特性

下述就是事务的四大特性,简称为ACID

  • 原子性(Atomicity):事务是不可分割的最小操作单元,要么全部成功,要么全部失败。

  • 一致性(Consistency):事务完成时,必须使所有的数据都保持一致状态。

  • 隔离性(Isolation):数据库系统提供的隔离机制,保证事务在不受外部并发操作影响的独立 环境下运行。

  • 持久性(Durability):事务一旦提交或回滚,它对数据库中的数据的改变就是永久的。

7.3 并发事务问题

1.赃读:一个事务读到另外一个事务还没有提交的数据。

比如B读取到了A未提交的数据。

2.不可重复读:一个事务先后读取同一条记录,但两次读取的数据不同,称之为不可重复读。

事务A两次读取同一条记录,但是读取到的数据却是不一样的。

不可重复读和脏读的区别是,脏读是某一事务读取了另外一个事务未提交的数据,不可重复读是读取了其他事务提交的数据

3. 幻读:一个事务按照条件查询数据时,没有对应的数据行,但是在插入数据时,又发现这行数据 已经存在,好像出现了 "幻影"。

在上面这幅图中,事务A首先查询id=1的这行数据,发现表中没有这行数据,此时,事务B插入了一条id=1的数据到表中,紧接着,事务A想要插入id=1的数据到表中,发现插入失败,此时就出现了幻读的现象。

不可重复读和幻读两者的区别是,不可重复读的重点在于update和delete,幻读的重点在于insert

7.4 事务隔离级别

为了解决并发事务所引发的问题,在数据库中引入了事务隔离级别。主要有以下几种:

  • 读未提交(read uncommitted): 一个事务还没有提交时,它做的变更就能被别的事务看到。
  • 读提交(read committed): 一个事物提交之后,它做的变更才会被其他事务看到。
  • 可重复读(repeatable read): 一个事物执行过程中看到的数据,总是跟这个事务在启动时看到的数据是一致的。未提交变更对其他事务也是不可见的。
  • 串行化(serializable): 对于同一行记录,写会加“写锁”,读会加“读锁”,当出现锁冲突时,后访问的事务需要等前一个事务执行完成,才能继续执行。

1.查看事务隔离级别

SELECT @@TRANSACTION_ISOLATION;

 2.设置事务隔离级别

session代表当前会话中有效,global代表全局有效

SET [ SESSION | GLOBAL ] TRANSACTION ISOLATION LEVEL { READ UNCOMMITTED |
READ COMMITTED | REPEATABLE READ | SERIALIZABLE }

注意:事务隔离级别越高,数据越安全,但是性能越低。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

真滴book理喻

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值