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 私信 关注