ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

MySQL基础回顾

2020-03-02 18:06:18  阅读:312  来源: 互联网

标签:回顾 pet 数据库 基础 查询 索引 MySQL NULL SELECT


1、数据库介绍

1.1 什么是数据库

​ 数据库:保存数据的仓库。它体现在我们电脑中,就是一个文件系统。然后把数据都保存这些特殊的文件中,并且需要使用固定的语言(SQL语言)去操作文件中的数据。

技术定义: 数据库(Database)是按照数据结构来组织、存储和管理数据的建立在计算机存储设备上的仓库。

1.2 数据库介绍

​ 我们开发应用程序的时候,程序中的所有数据,最后都需要保存到专业软件中。这些专业的保存数据 的软件我们称为数据库。 我们学习数据库,并不是学习如何去开发一个数据库软件,我们学习的是如何使用数据库以及数据库中的数据记录的操作,而数据库软件是由第三方公司研发。

1.3 数据库的分类

关系型、非关系型的数据库

常见的数据库软件:

Oracle:它是Oracle公司的大型关系型数据库,它是收费的。

DB2:IBM公司的数据库,它是收费的。

SqlServer:微软数据库。收费

Sybase:Sybase公司的。 工具PowerDesign 数据库建模工具。

MySql:早期瑞典一个公司发明,后期被sun公司收购,后期被Oracle。

1.4 什么是关系型数据库

​ 在开发软件的时候,软件中的数据之间必然会有一定的关系存在,需要把这些数据保存在数据库中, 同时也要维护数据之间的关系,这时就可以直接使用上述的那些数据库。而上述的所有数据库都属于关系 型数据库。

​ 描述数据之间的关系,并保存在数据库中,同时学习如果根据这些关系查询数据库中的数据, 关系型数据:设计数据库的时候,需要使用E-R图来描述。实体关系 E-R:实体关系图。

​ 实体:可以理解成我们Java程序中的一个对象。在E-R图中使用 矩形(长方形) 表示。

​ 针对一个实体中的属性,我们称为这个实体的数据,在E-R图中使用 椭圆表示。 实体和实体之间的关系:在E-R图中使用菱形表示。

2、 mysql在linux安装篇

2.1 centOS7安装时配置动态ip

#查看端口
ip a
#编辑ifcfg-ens33文件
vi /etc/sysconfig/network-scripts/ifcfg-ens33
#保证ifcfg-ens33文件两个地方正确
BOOTPROTO=dhcp
ONBOOT=yes
#保存退出
:wq
#重启网卡
systemctl restart network
#再查看ip就分配了ip了
ip a

2.2 centOS7关于防火墙的命令

#查看防火墙状态
firewall-cmd --state
#关闭防火墙
systemctl stop firewalld.service
#禁止防火墙开机启动
systemctl disable firewalld.service

2.3 安装mysql(5.7)

#创建目录
mkdir -p /usr/local/mysql
#进入目录
cd /usr/local/mysql
#安装mysql,如果安装8.0版本,把链接改为https://repo.mysql.com//mysql80-community-release-el7-3.noarch.rpm
wget http://repo.mysql.com/mysql57-community-release-el7-8.noarch.rpm
rpm -ivh mysql57-community-release-el7-8.noarch.rpm
yum -y install mysql-server
#重启mysql
service mysqld restart
#找到默认的密码
grep "password" /var/log/mysqld.log
#登录mysql
mysql -uroot -p
#输入密码登录
#设置密码的验证强度等级
set global validate_password_policy=LOW;
#设置密码的长度为6
set global validate_password_length=6;
#修改密码
set password for root@localhost = password('123456');
#退出,然后重新登录
quit;
mysql -uroot -p
#输入密码登录
#修改远程访问
use mysql;
update user set host = '%' where user ='root';
quit
service mysqld restart
#开放3306端口
firewall-cmd --zone=public --add-port=3306/tcp --permanent
#重新加载防火墙
firewall-cmd --reload
#查看开放端口
firewall-cmd --zone=public --list-ports
#开放端口成功就可以在外部用navicat直接连接了

3、 mysql基本操作篇

3.1 基本的SQL语句

首先登录mysql,sql语句不区分大小写

pet.txt的内容:

Fluffy	Harold	cat	f	1993-02-04
Claws	Gwen	cat	m	1994-03-17
Buffy	Harold	dog	f	1989-05-13
Fang	Benny	dog	m	1990-08-27
Bowser	Diane	dog	m	1979-08-31	1995-07-29
Chirpy	Gwen	bird	f	1998-09-11
Whistler	Gwen	bird	1997-12-09
Slim	Benny	snake	m	1996-04-29
-- 查询mysql当前版本以及当前日期
SELECT VERSION(),CURRENT_DATE;
-- 可以进行简单运算
SELECT SIN(PI()/2),(4+1)*5;
-- SQL语句是以分号结尾的,sql语句写了一半,又不想执行可以在语句末尾加上 \c
-- 查看表结构
DESC 表名;
-- 查看创建表的语句
show creat table 表名;
-- 表中导入数据,可以用insert语句,也可以批量导入
-- 首先要有pet这个表
create database test;
use test;
CREATE TABLE pet (name VARCHAR(20), owner VARCHAR(20),species VARCHAR(20), sex CHAR(1), birth DATE, death DATE);
-- 创建一个pet.txt文件放在/usr/local/mysql下,写入数据,每个字段中用tab键隔开,字段没有值的记录用\N代替;
LOAD DATA LOCAL INFILE '/usr/local/mysql/pet.txt' INTO TABLE pet;
-- 查询表中的所有数据
SELECT * FROM pet;
-- 删除表中的所有数据
DELETE FROM pet;
-- 更新表中名字为Bowser的生日
UPDATE pet SET birth='1989-08-31' WHERE name='Bowser';
-- Mysql默认的字符串比较也是不分大小写的,所以Bowser和bowsER是一样的结果
-- 查找生日在1998以后的
SELECT * FROM pet WHERE birth>='1998-01-01';
-- 检索种类是狗并且性别是m的
SELECT * FROM pet WHERE species='dog' AND sex='m';
-- 查询种类是snake或者bird的
SELECT * FROM pet WHERE species='snake' OR species='bird';
-- 查询所有dog的姓名和性别
SELECT name,sex FROM pet WHERE species='dog';
--查询所有宠物的种类,不重复用关键字DISTINCT
SELECT DISTINCT species FROM pet;
-- 根据生日降序查询所有的列
SELECT * FROM pet ORDER BY birth DESC; --升序用关键字ASC,但是一般不用因为这是默认的
-- 根据species字段升序排列,根据birth字段降序排列
SELECT * FROM pet ORDER BY species ASC,birth DESC; --优先用species排序,species相同的再根据birth排序
-- 查询当前日期
SELECT CURDATE();
-- 查询所有宠物出生的年份,去除重复,YEAR()函数是对对应的日期取年,MONTH()是月,DAY()是日;
SELECT DISTINCT YEAR(birth) AS year FROM pet;
--查询所有birth不是null的宠物的年龄,AS是取别名,TIMESTAMPDIFF()函数是求时间差,IS NOT NULL表示不为null,IS NULL表示是null!
SELECT *,TIMESTAMPDIFF(YEAR,birth,CURDATE()) AS age FROM pet WHERE birth IS NOT NULL; 
-- 查询年龄最小的宠物的出生日期,年龄最小即是生日最大,MAX()函数用来取某列的最大值,MIN()用来取最小值,求某列数据之和用SUM(),查询记录数用COUNT(),查询平均数用AVG()
SELECT MAX(birth) FROM pet;
-- 查询前3条记录,如果只有一个参数,那么就表示从第一条记录开始查询几条记录
SELECT * FROM pet LIMIT 3;
-- 查第二条到第四条记录,第一个参数表示从第几条记录开始查询,第一条记录是0,第二个参数表示查询几条记录
SELECT * FROM pet LIMIT 1, 2;
-- 查询所有宠物的种类,分组查询
SELECT species FROM pet GROUP BY species;
-- 求一共有多少条记录
SELECT COUNT(*) AS count FROM pet;

3.2 SQL语言的分类

1、DDL(数据定义语言)

用来定义数据库的对象,如数据表、视图、索引等

2、DML(数据操纵语言库)

在数据库表中更新,增加和删除记录 如 update, insert, delete

3、DCL(数据控制语言)

用于设置用户权限和控制事务语句,如grant,revoke,if…else,while,begintransaction

4、DQL(数据查询语言)

用于查询数据的语句, select

4、数据库的备份与恢复

4.1 备份命令

在mysql的安装目录的bin目录下有mysqldump命令,可以完成对数据库的备份。

语法:mysqldump -u 用户名 -p密码 数据库名> 磁盘SQL文件路径

由于mysqldump命令不是sql命令,需要在dos窗口下使用。 注意:在备份数据的时候,数据库不会被删除。可以手动删除数据库。同时在恢复数据的时候,不会 自动的给我们创建数据库,仅仅只会恢复数据库中的表和表中的数据 !

如:

mysqldump ‐uroot ‐p123456 test >/root/data/test.sql

4.2 恢复命令

恢复数据库,需要手动的先创建数据库: create database heima2;

语法:mysql -u 用户名-p 导入库名< 硬盘SQL文件绝对路径

如:

# 首先要创建一个test1的数据库
# 恢复命令
mysql ‐uroot ‐p123456 test1</root/data/pet.sql

5、多表查询

5.1 笛卡尔积介绍

笛卡尔乘积是指在数学中,两个集合X和Y的笛卡尓积(Cartesian product),又称直积,表示为X * Y,第一个对象是X的成员而第二个对象是Y的所有可能有序对的其中一个成员 !

作用:笛卡尔积的数据对程序是没有意义的,我们需要将笛卡尔积的数据再次进行过滤!

对于多表查询操作,需要过滤出满足条件的数据,需要把多个表进行连接,连接之后需要加上过滤的条条件!

5.2 内联结

内连接:

语法一: select 列名 , 列名 … from 表名1,表名2 where 表名1.列名 = 表名2.列名;

语法二: select * from 表名1 inner join 表名2 on 条件

5.3 左外联结

外联结:左外联结、右外联结、全联结、自联结。

左外联结:用左边表去右边表中查询对应记录,不管是否找到,都将显示左边表中全部记录。 即:虽然右表没有左表某条记录对应的数据,也要把他查询出来。

语法:select * from 表1 left outer join 表2 on 条件

5.4 右外联结

用右边表去左边表查询对应记录,不管是否找到,右边表全部记录都将显示。 即:虽然左表没有右表某条记录对应的数据,也要把他查询出来

语法:select * from 表1 right outer join 表2 on 条件;

5.5 全外联结

左外连接和右外连接的结果合并,但是会去掉重复的记录。

select * from 表1 full outer join 表2 on 条件

但是mysql数据库不支持此语法,但是也可以通过其他方法实现该效果(union关键字)。

5.6 关联子查询

5.6.1 in和exists关键词的用法

关联子查询其他的关键字使用:

回忆:age=23 or age=24 等价于 age in (23,24)

in 表示条件应该是在多个列值中。

in:使用在where后面,经常表示是一个列表中的数据,只要被查询的数据在这个列表中存在即可。

not in:表示被查询的数据不在该列表中即可!

exists表示存在,当子查询的结果存在就会显示主查询中的所有数据!用在where关键字后面,当然也有not exits

5.6.2 union和union all的用法

UNION 语句:用于将不同表中相同列中查询的数据展示出来;(不包括重复数据)

UNION ALL 语句:用于将不同表中相同列中查询的数据展示出来;(包括重复数据)

5.6.3 case when语句

case when语句结构

CASE sex
WHEN '1' THEN '男'
WHEN '2' THEN '女'
ELSE '其他' END

--比如:
SELECT *,
CASE
WHEN salary < 5000 THEN "低等收入"
WHEN salary>= 5000 AND salary < 10000 THEN "中等收入"
WHEN salary > 10000 THEN "高等收入"
END AS level,
CASE sex
WHEN "female" THEN 1
WHEN "male" THEN 0
END AS flag
FROM employee;

6、MySQL的数据类型

6.1 MySQL支持的数据类型

(1)MySQL支持所有标准SQL数值数据类型。 这些类型包括严格数值数据类型(INTEGER、SMALLINT、DECIMAL和NUMERIC),以及近似数值数据类型 (FLOAT、REAL和DOUBLE PRECISION)。

关键字INT是INTEGER的同义词,关键字DEC是DECIMAL的同义词。

BIT数据类型保存位字段值,并且支持MyISAM、MEMORY、InnoDB和BDB表。

作为SQL标准的扩展,MySQL也支持整数类型TINYINT、MEDIUMINT和BIGINT。

(2)表示时间值的日期和时间类型为DATETIME、DATE、TIMESTAMP、TIME和YEAR。 每个时间类型有一个有效值范围和一个"零"值,当指定不合法的MySQL不能表示的值时使用"零"值。

(3)字符串类型指CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM和SET。

CHAR 和 VARCHAR 类型类似,但它们保存和检索的方式不同。它们的最大长度和是否尾部空格被保留等 方面也不同。在存储或检索过程中不进行大小写转换。

BINARY 和 VARBINARY 类似于 CHAR 和 VARCHAR,不同的是它们包含二进制字符串而不要非二进制字 符串。也就是说,它们包含字节字符串而不是字符字符串。这说明它们没有字符集,并且排序和比较基于 列值字节的数值值。

BLOB 是一个二进制大对象,可以容纳可变数量的数据。有 4 种 BLOB 类型:TINYBLOB、BLOB、 MEDIUMBLOB 和 LONGBLOB。它们区别在于可容纳存储范围不同。

有 4 种 TEXT 类型:TINYTEXT、TEXT、MEDIUMTEXT 和 LONGTEXT。对应的这 4 种 BLOB 类型,可存 储的最大长度不同,可根据实际情况选择。

6.2 MySQL 5.0 以上的版本:

1、一个汉字占多少长度与编码有关: UTF-8:一个汉字=3个字节 GBK:一个汉字=2个字节

2、varchar(n) 表示 n 个字符,无论汉字和英文,Mysql 都能存入 n 个字符,仅是实际字节长度有所区别 3、MySQL 检查长度,可用 SQL 语言来查看:

SELECT LENGTH(fieldname) FROM tablename

7、分组语句

GROUP BY 语句根据一个或多个列对结果集进行分组。 在分组的列上我们可以使用 COUNT, SUM, AVG,等函数。

注意:

​ 1、group by 可以实现一个最简单的去重查询 ;

2、分组后的条件使用 HAVING 来限定,WHERE 是对原始数据进行条件限制。几个关键字的使用顺序为 where 、group by 、having、order by ,例如: 
SELECT name ,sum(*) FROM employee_tbl WHERE id<>1 GROUP BY name HAVING sum(*)>5 ORDER
BY sum(*) DESC;

8、模糊查询

LIKE 子句中使用百分号 %字符来表示任意字符,类似于UNIX或正则表达式中的星号 *。 如果没有使用百分号 %, LIKE 子句与等号 = 的效果是一样的

你可以在 WHERE 子句中指定任何条件。

你可以在 WHERE 子句中使用LIKE子句。

你可以使用LIKE子句代替等号 。

LIKE 通常与 % 一同使用,类似于一个元字符的搜索。

你可以使用 AND 或者 OR 指定一个或多个条件。

你可以在 DELETE 或 UPDATE 命令中使用 WHERE…LIKE 子句来指定条件

注意:"%“表示任意个字符(0个或者n个),”_"示有且只有一个字符!

SELECT * FROM pet WHERE species LIKE '%d%';  --表示搜索pet表中species字段中含有d的行的所有信息

9、NULL 值处理

当提供的查询条 件字段为 NULL 时, 为了处理这种情况,MySQL提供了三大运算符:

​ IS NULL: 当列的值是 NULL,此运算符返回 true。

​ IS NOT NULL: 当列的值不为 NULL, 运算符返回 true。

​ <=>: 比较操作符(不同于=运算符),当比较的的两个值为 NULL 时返回 true。

关于 NULL 的条件比较运算是比较特殊的。你不能使用 = NULL 或 != NULL 在列中查找 NULL 值 。 在 MySQL 中,NULL 值与任何其它值的比较(即使是 NULL)永远返回 false,即 NULL = NULL 返回 false 。

MySQL 中处理 NULL 使用 IS NULL 和 IS NOT NULL 运算符

10、 获取服务器元数据

命令 描述

SELECT VERSION( ) 服务器版本信息

SELECT DATABASE( ) 当前数据库名 (或者返回空)

SELECT USER( ) 当前用户名

SHOW STATUS 服务器状态

SHOW VARIABLES 服务器配置变量

11、 ALTER命令

11.1 删除、添加或修改表字段

如下命令使用了 ALTER 命令及 DROP 子句来删除以上创建表的 i 字段:

ALTER TABLE testalter_tbl DROP i;

如果数据表中只剩余一个字段则无法使用DROP来删除字段。

MySQL 中使用 ADD 子句来向数据表中添加列,如下实例在表 testalter_tbl 中添加 i 字段,并定义数据类型:

ALTER TABLE testalter_tbl ADD i INT;

执行以上命令后,i 字段会自动添加到数据表字段的末尾 !

11.2 修改字段类型及名称

如果需要修改字段类型及名称, 你可以在ALTER命令中使用 MODIFY 或 CHANGE 子句 。

例如,把字段 c 的类型从 CHAR(1) 改为 CHAR(10),可以执行以下命令:

ALTER TABLE testalter_tbl MODIFY c CHAR(10);

11.3 修改表名

如果需要修改数据表的名称,可以在 ALTER TABLE 语句中使用 RENAME 子句来实现。

尝试以下实例将数据表 testalter_tbl 重命名为 alter_tbl:

ALTER TABLE testalter_tbl RENAME TO alter_tbl;

12、MySQL内置函数

12.1 关于字符串的内置函数

CONCAT(“str1”,“str2”,…) 把所有的字符串连接起来组成一个新的字符串;

LTRIM(“str”) 去掉字符串左边的所有空格,RTRIM()则是去掉右边的空格,TRIM()是去掉左右两边的空格!

FORMAT(x,n) 将x保留到小数点后n位,四舍五入!

LOWER(“str”) 将字符串所有字符转换为小写的格式!

REVERSE(“str”) 将字符串的顺序反过来!

SPACE(n) 返回n个空格!

SUBSTRING(“str”,i,j) 截取字符串,从下标为i的字符开始,截取j个!

UPPER(“str”) 将字符串的所有字符变为大写的

12.2 关于数字的函数

PI() 得到圆周率

RAND() 返回0到1的随机数

ROUND(x) 返回离x最近的整数

12.3 日期类型的函数

CURDATE() 返回当前日期,等同于CURRENT_DATE();

CURRENT_TIME() 返回当前时间

DATEDIFF(d1,d2) 计算日期d1,d2相隔天数

12.4 高级函数

DATABASE() 返回当前数据库名

LAST_INSERT_ID() 返回最近生成的AUTO_INCREMENT值

13、MySQL索引

MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度。

索引分单列索引和组合索引。单列索引,即一个索引只包含单个列,一个表可以有多个单列索引,但这不 是组合索引。组合索引,即一个索引包含多个列。

创建索引时,你需要确保该索引是应用在 SQL 查询语句的条件(一般作为 WHERE 子句的条件)。

实际上,索引也是一张表,该表保存了主键与索引字段,并指向实体表的记录。

上面都在说使用索引的好处,但过多的使用索引将会造成滥用。因此索引也会有它的缺点:虽然索引大大 提高了查询速度,同时却会降低更新表的速度,如对表进行INSERT、UPDATE和DELETE。因为更新表 时,MySQL不仅要保存数据,还要保存一下索引文件。 建立索引会占用磁盘空间的索引文件。

13.1 普通索引

13.1.1 创建索引

这是最基本的索引,它没有任何限制。它有以下几种创建方式 :

CREATE INDEX indexName ON mytable(username(length));

如果是CHAR,VARCHAR类型,length可以小于字段实际长度;如果是BLOB和TEXT类型,必须指定 length;

13.1.2 修改表结构,添加索引
ALTER table tableName ADD INDEX indexName(columnName)
13.1.3 创建表的时候直接指定
CREATE TABLE mytable(
ID INT NOT NULL,
username VARCHAR(16) NOT NULL,
INDEX [indexName] (username(length))
);
13.1.4 删除索引的语法
DROP INDEX [indexName] ON mytable;

13.2 唯一索引

它与前面的普通索引类似,不同的就是:索引列的值必须唯一,但允许有空值。如果是组合索引,则列值 的组合必须唯一。它有以下几种创建方式:

13.2.1 创建索引
CREATE UNIQUE INDEX indexName ON mytable(username(length))
13.2.2 修改表结构
ALTER table mytable ADD UNIQUE [indexName] (username(length))
13.2.3 创建表的时候直接指定
CREATE TABLE mytable(
ID INT NOT NULL,
username VARCHAR(16) NOT NULL,
UNIQUE [indexName] (username(length))
);

13.3 使用ALTER 命令添加和删除索引

有四种方式来添加数据表的索引:

ALTER TABLE tbl_name ADD PRIMARY KEY (column_list): 该语句添加一个主键,这意味着索引 值必须是唯一的,且不能为NULL。

ALTER TABLE tbl_name ADD UNIQUE index_name (column_list): 这条语句创建索引的值必须 是唯一的(除了NULL外,NULL可能会出现多次)。

ALTER TABLE tbl_name ADD INDEX index_name (column_list): 添加普通索引,索引值可出现 多次。 ALTER TABLE tbl_name ADD FULLTEXT index_name (column_list): 该语句指定了索引为 FULLTEXT ,用于全文索引

以下实例为在表中添加索引:

ALTER TABLE testalter_tbl ADD INDEX (c);

你还可以在 ALTER 命令中使用 DROP 子句来删除索引。尝试以下实例删除索引:

ALTER TABLE testalter_tbl DROP INDEX c;

13.4 使用 ALTER 命令添加和删除主键

主键只能作用于一个列上,添加主键索引时,你需要确保该主键默认不为空(NOT NULL)。实例如下:

ALTER TABLE testalter_tbl MODIFY itcast INT NOT NULL;
ALTER TABLE testalter_tbl ADD PRIMARY KEY (itcast);

你也可以使用 ALTER 命令删除主键:

ALTER TABLE testalter_tbl DROP PRIMARY KEY;

删除主键时只需指定PRIMARY KEY,但在删除索引时,你必须知道索引名。

13.5 显示索引信息

你可以使用 SHOW INDEX 命令来列出表中的相关的索引信息。可以通过添加 \G 来格式化输出信息。

SHOW INDEX FROM table_name; \G

14、MySQL事务

​ MySQL 事务主要用于处理操作量大,复杂度高的数据。比如说,在人员管理系统中,你删除一个人 员,你即需要删除人员的基本资料,也要删除和该人员相关的信息,如信箱,文章等等,这样,这些数据库操作语句就构成一个事务!

​ 在 MySQL 中只有使用了Innodb 数据库引擎的数据库或表才支持事务。

​ 事务处理可以用来维护数据库的完整性,保证成批的 SQL 语句要么全部执行,要么全部不执行。

​ 事务用来管理 insert,update,delete 语句 一般来说,事务是必须满足4个条件(ACID):原子性(Atomicity,或称不可分割性)、一致性 (Consistency)、隔离性(Isolation,又称独立性)、持久性(Durability)。

​ 原子性:一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,在中间某个环节 不会结束。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务 从来没有执行过一样。

​ 一致性:在事务开始之前和事务结束以后,数据库的完整性没有被破坏。这表示写入的资料必须完全 符合所有的预设规则,这包含资料的精确度、串联性以及后续数据库可以自发性地完成预定的工作。

​ 隔离性:数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并 发执行时由于交叉执行而导致数据的不一致。事务隔离分为不同级别,包括读未提交(Read uncommitted)、读提交(read committed)、可重复读(repeatable read)和串行化 (Serializable)。

​ 持久性:事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失。

14.1 事务控制语句

BEGIN或START TRANSACTION:显式地开启一个事务;

COMMIT:也可以使用COMMIT WORK,不过二者是等价的。COMMIT会提交事务,并使已对数据库 进行的所有修改成为永久性的;

ROLLBACK:有可以使用ROLLBACK WORK,不过二者是等价的。回滚会结束用户的事务,并撤销正 在进行的所有未提交的修改;

SAVEPOINT identifier:SAVEPOINT允许在事务中创建一个保存点,一个事务中可以有多个 SAVEPOINT;

RELEASE SAVEPOINT identifier:删除一个事务的保存点,当没有指定的保存点时,执行该语句会抛 出一个异常;

ROLLBACK TO identifier:把事务回滚到标记点;

SET TRANSACTION:用来设置事务的隔离级别。InnoDB存储引擎提供事务的隔离级别有READ UNCOMMITTED、READ COMMITTED、REPEATABLE READ和SERIALIZABLE。

14.2 MySQL 事务处理主要有两种方法

1、用 BEGIN, ROLLBACK, COMMIT来实现

​ BEGIN 开始一个事务

​ ROLLBACK 事务回滚

​ COMMIT 事务确认

2、直接用 SET 来改变 MySQL 的自动提交模式:

​ SET AUTOCOMMIT=0 禁止自动提交

​ SET AUTOCOMMIT=1 开启自动提交

Carme7o 发布了42 篇原创文章 · 获赞 2 · 访问量 1198 私信 关注

标签:回顾,pet,数据库,基础,查询,索引,MySQL,NULL,SELECT
来源: https://blog.csdn.net/Carme7o/article/details/104616411

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有