MySQL数据库基础-全网最详细

https://blog.csdn.net/daemon329/article/details/106170743

十一、DQL语言

=======================================================================

DQL(Data Query Language数据查询语言)

  • 查询数据库数据,如select语句

  • 简单的单表查询或者夺标的复杂查询和嵌套查询

  • 是数据库语言中最核心,最重要的语言

  • 使用的频率最高的语言

1、select完整语法


SELECT [ALL | DISTINCT]

{* | table.* | [table.field1[as alias1][,table.field2[as alias2]][,…]}

FROM table_name [as table_alias]

[left | right | inner join table_name2] – 联合查询

[WHERE …] – 指定满足结果的条件

[GROUP BY …] – 指定结果按照那些字段来分组

[HAVING] – 过滤分组必须满足的次要条件

[ORDER BY …] – 指定查询记录按照一个或者多个条件排序

[LIMIT {[offset,]row_count | row_countOFFSET offset}]; – 指定查询记录从哪条到哪条

注意: []代表可选,{}代表必选

2、指定查询字段


– 查询所有的学生信息(速度慢不推荐使用)

SELECT * FROM student;

– 查询指定列(学号,姓名)

SELECT studentno,studentname FROM student;

使用AS 子句作为别名

作用:

  • 可以给数据列取一个新的别名

  • 可以给表取一个新的别名

  • 可以把计算后的结果用一个别名代替

– 为列取一个别名

SELECT studentno AS 学号, studentname AS 姓名 FROM student;

– 为表取一个别名

SELECT studentno AS 学号, studentname AS 姓名 FROM student AS s;

– 使用AS为查询的结果取一个名字 CONCAT()函数字符串拼接,在studentname数据前面拼接 姓名:

SELECT CONCAT(‘姓名:’, studentname) AS 新姓名 FROM student;

DISTINCT 关键字的使用

作用:

  • 去掉SELECT查询的记录中重复的记录

– 查看哪些同学参加了考试(学号) 去除重复项

– 查询成绩表

SELECT * FROM result;

– 查询成绩表中的学号,及查询哪些同学参加了考试(有成绩的学生)

SELECT studentno FROM result;

– 根据学号去重

SELECT DISTINCT studentno FROM result;

使用表达式的列

数据库中的表达式:一般由文本、列值、null、函数和操作符组成

应用场景:

  • SELECT语句中返回结果列中使用

  • SELECT语句中ORDER BY ,HAVING等子句使用

  • DML语句中的where条件语句中使用的表达式

– selcet查询中可以使用表达式

SELECT @@auto_increment_increment; – 查询自增步长

SELECT VERSION(); – 查询版本号

SELECT 88*3-1 AS 计算结果; – 表达式

– 学员考试成绩集体提分一分查看

SELECT studentno,studentresult+1 AS ‘分数加1’ FROM result;

3、where条件语句


作用:

  • 用于检索数据表中符合条件的记录

搜索的条件可以由一个或者多个逻辑表达式组成,结果一般为真或假

逻辑操作符

| 运算符号 | 作用 |

| :-- | :-- |

| NOT 或 ! | 逻辑非 |

| AND | 逻辑与 |

| OR | 逻辑或 |

| XOR | 逻辑异或 |

– 指定字段全表

SELECT Studentno,StudentResult FROM result;

– 查询成绩在95-100之间的 ADN 也可以写成 &&

SELECT studentno,studentresult

FROM result

WHERE studentresult >=95 AND studentresult <=100;

– 模糊查询(对应的词:精确查询)

SELECT studentno,studentresult

FROM result

WHERE studentresult BETWEEN 95 AND 100;

– 除了888号同学,要其他同学的成绩

SELECT studentno,studentresult

FROM result

WHERE studentno != 888

– 除了888号同学,要其他同学的成绩 使用not

SELECT studentno,studentresult

FROM result

WHERE NOT studentno = 888

算术运算符

| 运算符 | 作用 |

| :-- | :-- |

| + | 加法 |

| - | 减法 |

| * | 乘法 |

| / 或 DIV | 除法 |

| % 或 MOD | 取余 |

比较操作符

| | | |

| :-- | :-- | :-- |

| 符号 | 描述 | 备注 |

| = | 等于 | |

| <>, != | 不等于 | |

| > | 大于 | |

| < | 小于 | |

| <= | 小于等于 | |

| >= | 大于等于 | |

| BETWEEN | 在两值之间 | >=min&&<=max |

| NOT BETWEEN | 不在两值之间 | |

| IN | 在集合中 | |

| NOT IN | 不在集合中 | |

| <=> | 严格比较两个NULL值是否相等 | 两个操作码均为NULL时,其所得值为1;而当一个操作码为NULL时,其所得值为0 |

| LIKE | 模糊匹配 | |

| REGEXP 或 RLIKE | 正则式匹配 | |

| IS NULL | 为空 | |

| IS NOT NULL | 不为空 | |

注意:

  • 数值类型之间才能使用算术运算符

  • 相同的数据类型之间才能比较

– 模糊查询 between and \ like \ in \ null

– LIKE

– like结合使用的通配符 : % (代表0到任意个字符) _ (一个字符)

– 查询姓李的同学的学号及姓名

SELECT studentno, studentname FROM student

WHERE studentname LIKE ‘李%’;

– 查询姓李的同学,后面只有一个字的 _ (一个字符)

SELECT studentno,studentname FROM student

WHERE studentname LIKE ‘李_’;

– 查询姓李的同学,后面只有两个字的 _ (一个字符)

SELECT studentno,studentname FROM student

WHERE studentname LIKE ‘李__’;

– 查询姓名中含有 捌 字的

SELECT studentno,studentname FROM student

WHERE studentname LIKE ‘%捌%’;

– 查询姓名中含有特殊字符的需要使用转义符号 ‘’

– 自定义转义符关键字: ESCAPE ‘:’

– IN

– 查询学号为1000,1001,1002的学生姓名

SELECT studentno,studentname FROM student

WHERE studentno IN (1000,1001,1002);

– 查询地址在深圳,长沙,娄底的学生

SELECT studentno,studentname,address FROM student

WHERE address IN (‘深圳’,‘长沙’,‘娄底’);

– NULL

– 查询出生日期没有填写的同学

– 不能直接写=NULL , 这是代表错误的 , 用 is null

SELECT studentname FROM student

WHERE BornDate IS NULL;

– 查询出生日期填写的同学

SELECT studentname FROM student

WHERE BornDate IS NOT NULL;

– 查询没有写家庭住址的同学(空字符串不等于null)

SELECT studentname FROM student

WHERE Address=‘’ OR Address IS NULL;

4、连接查询


| 操作符名称 | 描述 |

| — | — |

| INNER JOIN | 如果表中至少一个匹配,则返回 |

| LEFT JOIN | 返回左表的所有行,右表匹配行 |

| RIGHT JOIN | 返回右表的所有行,左表匹配行 |

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LQR1TnC2-1622729395022)(C:\Users\Leon Plious\Desktop\u=813688978,869557195&fm=15&gp=0.jpg)]

/*

连接查询

如需要多张数据表的数据进行查询,则可通过连接运算符实现多个查询

内连接 inner join

查询两个表中的结果集中的交集

外连接 outer join

左外连接 left join

(以左表作为基准,右边表来一一匹配,匹配不上的,返回左表的记录,右表以NULL填充)

右外连接 right join

(以右表作为基准,左边表来一一匹配,匹配不上的,返回右表的记录,左表以NULL填充)

等值连接和非等值连接

自连接

*/

– 查询参加了考试的同学信息(学号,学生姓名,科目编号,分数)

SELECT * FROM student;

SELECT * FROM result;

/*思路:

(1):分析需求,确定查询的列来源于两个类,student result,连接查询

(2):确定使用哪种连接查询?(内连接)

*/

SELECT s.studentno, studentname, subjectno, studentresult

FROM student s

INNER JOIN result r

ON s.studentno = r.studentno;

– 右连接实现

SELECT s.studentno, studentname, subjectno, studentresult

FROM student s

RIGHT JOIN result r

ON s.studentno = r.studentno;

– 左连接(注意左表为student,没有成绩的学生信息也会被查出)

SELECT s.studentno, studentname, subjectno, studentresult

FROM student s

LEFT JOIN result r

ON s.studentno = r.studentno;

– 等值连接

SELECT s.studentno, studentname, subjectno, studentresult

FROM student s, result r

WHERE s.studentno = r.studentno;

– 查一下缺考的同学(左连接应用场景)

SELECT s.studentno, studentname, subjectno, studentresult

FROM student s

LEFT JOIN result r

ON s.studentno = r.studentno

WHERE studentresult IS NULL;

– 查询参加了考试的同学信息(学号,学生姓名,科目名,分数)

SELECT s.studentno, studentname, subjectno, subjectname, studentresult

FROM student s

INNER JOIN result r

ON s.studentno = r.studentnos

INNER JOIN subject sub

ON sub.subjectno = r.subjectno

自连接

/*

自连接

数据表与自身进行连接

需求:从一个包含栏目ID , 栏目名称和父栏目ID的表中

查询父栏目名称和其他子栏目名称

*/

– 创建一个表

CREATE TABLE category (

categoryid INT(10) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT ‘主题id’,

pid INT(10) NOT NULL COMMENT ‘父id’,

categoryName VARCHAR(50) NOT NULL COMMENT ‘主题名字’,

PRIMARY KEY (categoryid)

) ENGINE=INNODB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8

– 插入数据

INSERT INTO category (categoryid, pid, categoryName)

VALUES(‘2’,‘1’,‘信息技术’),

(‘3’,‘1’,‘软件开发’),

(‘4’,‘3’,‘数据库’),

(‘5’,‘1’,‘美术设计’),

(‘6’,‘3’,‘web开发’),

(‘7’,‘5’,‘ps技术’),

(‘8’,‘2’,‘办公信息’);

– 编写SQL语句,将栏目的父子关系呈现出来 (父栏目名称,子栏目名称)

– 核心思想:把一张表看成两张一模一样的表,然后将这两张表连接查询(自连接)

SELECT a.categoryName AS ‘父栏目’, b.categoryName AS ‘子栏目’

FROM category AS a, category AS b

WHERE a.categoryid = b.pid

5、排序和分页


– 排序

/**

语法 : ORDER BY

ORDER BY 语句用于根据指定的列对结果集进行排序。

ORDER BY 语句默认按照ASC升序对记录进行排序。

如果您希望按照降序对记录进行排序,可以使用 DESC 关键字。

*/

– 查询 数据库结构-1 的所有考试结果(学号 学生姓名 科目名称 成绩)

– 按成绩降序排序

SELECT s.sudentno, studentname, subjectname, sudentresult

FROM student s

INNER JOIN result r

ON r.sudentno = s.sudentno

INNER JOIN subject sub

ON sub.subjectno = r.subjectno

WHERE subjectname = ’ 数据库结构-1’

ORDER BY sudentresult DESC;

– 分页

/**

SELECT * FROM table LIMIT [offset,] rows | rows OFFSET offset

pageNo pageSize

LIMIT (pageNo - 1)*pageSize, pageSize

*/

– 查询 数据库结构-1 的所有考试结果(学号 学生姓名 科目名称 成绩)

– 按成绩降序排序

– 每页显示100条数据

SELECT s.sudentno, studentname, subjectname, sudentresult

FROM student s

INNER JOIN result r

ON r.sudentno = s.sudentno

INNER JOIN subject sub

ON sub.subjectno = r.subjectno

WHERE subjectname = ’ 数据库结构-1’

ORDER BY sudentresult DESC

LIMIT 0, 100;

6、子查询


/*============== 子查询 ================

什么是子查询?

在查询语句中的WHERE条件子句中,又嵌套了另一个查询语句

嵌套查询可由多个子查询组成,求解的方式是由里及外;

子查询返回的结果一般都是集合,故而建议使用IN关键字;

*/

– 查询 数据库结构-1 的所有考试结果(学号,科目编号,成绩),并且成绩降序排列

SELECT studentno, subjectno, studentresult

FROM result

WHERE subjectno=(

SELECT subjectno FROM subjct

WHERE subjectname = ‘数据库结构-1’

) ORDER BY studentresult DESC;

– 查询课程为 高等数学-2 且分数不小于80分的学生的学号和姓名

SELECT studentno, studentname

FROM student

WHERE studentno IN(

SELECT studentno

FROM result

WHERE studentresult >=80 AND subjectno = (

SELECT subjectno

FROM subjct

WHERE subjectname = ‘高等数学-2’

)

)

十二、MySQL函数

=========================================================================

1、数据函数


/* 取绝对值 */

SELECT ABS(-10);

/* 向上取整 */

SELECT CEILING(9.1);

/* 向下取整 */

SELECT FLOOR(9.9);

/* 返回一个0-1之间的随机数 0.7898709874505838 */

SELECT RAND();

/* 符号函数 正数返回1、负数返回-1、0返回0*/

SELECT SIGN(-1)

2、字符串函数


/* 返回字符串的长度 */

SELECT CHAR_LENGTH(‘成功绝不是偶然’)

/* 字符串拼接 */

SELECT CONCAT(‘李’,‘子’,‘捌’)

/* 字符串插入 注意第一个参数是开始替换的位置索引从1开始,不是0开始, 第二个参数是替换的长度*/

SELECT INSERT(‘我是李子捌我热爱三国’,7,2,‘非常热爱’);

/* 转大写 */

SELECT UPPER(‘liziba’);

/* 转小写 */

SELECT LOWER(‘LIZIBA’);

/* 从左边截取 */

SELECT LEFT(‘李子捌热爱编程’,3);

/* 从右边截取 */

SELECT RIGHT(‘李子捌热爱编程’,4);

/* 替换指定字符串 */

SELECT REPLACE(‘李子捌说李子捌热爱编程’,‘李子捌’,‘借力好风’);

/* 字符串截取 第一个参数为起始索引,第二个参数为字符串长度*/

SELECT SUBSTR(‘李子捌说李子捌热爱编程’,5, 7);

3、日期和时间函数


/* 获取当前日期 2021-01-01*/

SELECT CURRENT_DATE();

/* 获取当前日期 2021-01-01*/

SELECT CURDATE();

/* 获取当前日期 + 时间 2021-01-01 13:04:48 */

SELECT NOW();

/* 获取当前日期 + 时间 2021-01-01 13:05:48*/

SELECT LOCALTIME();

/* 获取当前日期 + 时间 2021-01-01 13:05:53*/

SELECT SYSDATE();

/* 获取年、月、日、时、分、秒 */

SELECT YEAR(NOW())

SELECT MONTH(NOW())

SELECT DAY(NOW())

SELECT HOUR(NOW())

SELECT MINUTE(NOW())

SELECT SECOND(NOW())

4、系统信息函数


/* 获取版本号 8.0.15*/

SELECT VERSION();

/* 用户 root@localhost*/

SELECT USER();

5、MD5加密


– 创建测试表

CREATE TABLE md5 (

id int(10) unsigned zerofill NOT NULL AUTO_INCREMENT,

name varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,

pwd varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,

PRIMARY KEY (id)

) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8;

– 插入测试数据(无md5加密)

INSERT INTO md5 (name, pwd) VALUES(‘liziba’, ‘123456’),(‘xieli’, ‘123456’),(‘newnow’, ‘123456’);

– 插入测试数据(有md5加密)

INSERT INTO md5 (name, pwd) VALUES(‘liziba’, MD5(‘123456’)),(‘xieli’, MD5(‘123456’)),(‘newnow’, MD5(‘123456’));

– MySQL md5加密采用MD5()函数实现

MD5(‘STR’);

– 查询用户登录信息

SELECT * FROM md5 WHERE name = ‘liziba’ AND pwd = MD5(‘123456’);

6、 总结


– MySQL内置函数

– 数值函数

abs(x) – 绝对值 abs(-10.9) = 10

format(x, d) – 格式化千分位数值 format(1234567.456, 2) = 1,234,567.46

ceil(x) – 向上取整 ceil(10.1) = 11

floor(x) – 向下取整 floor (10.1) = 10

round(x) – 四舍五入去整

mod(m, n) – m%n m mod n 求余 10%3=1

pi() – 获得圆周率

pow(m, n) – m^n

sqrt(x) – 算术平方根

rand() – 随机数

truncate(x, d) – 截取d位小数

– 时间日期函数

now(), current_timestamp(); – 当前日期时间

current_date(); – 当前日期

current_time(); – 当前时间

date(‘yyyy-mm-dd hh:ii:ss’); – 获取日期部分

time(‘yyyy-mm-dd hh:ii:ss’); – 获取时间部分

date_format(‘yyyy-mm-dd hh:ii:ss’, ‘%d %y %a %d %m %b %j’); – 格式化时间

unix_timestamp(); – 获得unix时间戳

from_unixtime(); – 从时间戳获得时间

– 字符串函数

length(string) – string长度,字节

char_length(string) – string的字符个数

substring(str, position [,length]) – 从str的position开始,取length个字符

replace(str ,search_str ,replace_str) – 在str中用replace_str替换search_str

instr(string ,substring) – 返回substring首次在string中出现的位置

concat(string [,…]) – 连接字串

charset(str) – 返回字串字符集

lcase(string) – 转换成小写

left(string, length) – 从string2中的左边起取length个字符

load_file(file_name) – 从文件读取内容

locate(substring, string [,start_position]) – 同instr,但可指定开始位置

lpad(string, length, pad) – 重复用pad加在string开头,直到字串长度为length

ltrim(string) – 去除前端空格

repeat(string, count) – 重复count次

rpad(string, length, pad) --在str后用pad补充,直到长度为length

rtrim(string) – 去除后端空格

strcmp(string1 ,string2) – 逐字符比较两字串大小

– 聚合函数

count()

sum();

max();

min();

avg();

group_concat()

– 其他常用函数

md5();

default();

十三、事务

====================================================================

1、事务简介


数据库事务( transaction)是访问并可能操作各种数据项的一个数据库操作序列,这些操作要么全部执行,要么全部不执行,是一个不可分割的工作单位。事务由事务开始与事务结束之间执行的全部数据库操作组成。

——《百度百科》

2、事务的ACID特性


1、原子性(Atomic)

一个事务被视为一个不可分割的最小工作单元,这个事务里的所有操作要么全部成功执行,要么全都不执行,不能只执行其中的一部分操作。实现事务的原子性,要支持回滚操作,在某个操作失败后,回滚到事务执行之前的状态。

回滚是一个抽象概念,大多数数据库在实现事务时是在事务操作的数据快照上进行,并不修改实际的数据,发生错误时并不提交。

2 、 一致性(Consistency)

一致性是指事务使得系统从一个一致性的状态转换到另一个一致性的状态。在实际的工程项目中事务可以有不同程度的一致性:

强一致性:读操作可以立即读到提交的更新数据。

弱一致性:提交的更新操作,不一定立即会被读操作读到,这种情况存在不一致窗口,指的是读操作要延迟一定时间才能读到最新值。

最终一致性:弱一致性的特例。事务更新一份数据,最终一致性保证在没有其他事务更新同样的值的话,最终所有的事务都会读到之前事务更新的最新值。如果没有错误发生,不一致窗口的大小依赖于通信延迟、系统负载等。

其他一致性变体还有:

单调一致性:如果一个进程已经读到一个值,那么后续不会读到更早的值。

会话一致性:保证客户端和服务器交互的会话过程中,读操作可以读到更新操作后的最新值。

3、隔离性(Isolation)

一个事务所做的修改在最终提交以前对其他事务是不可见的。

4、持久性(Durability)

一旦事务提交,则所做的修改会永久保存在数据库中。

3、四种隔离级别


1、Read Uncommitted(未提交读)

最低隔离级别。事务可以读取到未提交的数据,也即脏读(Dirty read)。存在脏读、不可重复读、幻读的问题。实际应用中一般很少使用这个隔离级别。

2、Read Committed(提交读)

大多数数据库系统默认的隔离级别(mysql不是)。只有在事务提交后,其更新结果才会被其他事务看见。该级别也叫 不可重复读(nonrepeatable read),两次执行同样的查询语句可能得到不同的结果。可以解决脏读问题,存在不可重复读、幻读的问题。

不可重复读发生的一个场景:事务A需要多次读取同一个数据,当再次读取该数据的时候 另一个事务B修改了该数据,导致事务A读到的该数据 与 上一次读到的数据不一致。(侧重在数据被修改了update)

3、Repeated Read(可重复读)

mysql默认的事务隔离级别。在同一个事务中多次读取同样记录的结果总是一致的。可以解决脏读、不可重复读,存在幻读(Phantom read)问题。幻读指的是当某个事务在读取某个范围内的记录时,会产生幻行(Phantom Rows)。

幻读发生的一个场景:select检测某数据是否存在,当不存在时插入数据,但在执行insert 语句插入数据时发现此记录已经存在了,不能再插入,此时即发生了幻读。

另一个场景:事务A执行 select语句1 返回 5条记录,再次执行 select语句1 时返回了 6条 记录,也即与上次返回的结果集不一致。(侧重在插入了新数据insert)

InnoDB引擎通过使用 NK锁(Next-Key Locks)解决幻读问题。

4、Serialization(可串行化)

事务串行化执行,隔离级别最高,牺牲了系统的并发性。解决脏读、不可重复读、幻读,可保证事务安全。通过强制事务串行执行避免了幻读问题,它在读取的每一行数据上都加锁,会导致大量的超时和锁争用问题。实际应用中很少使用这个隔离级别。

注意:

不可重复读的重点于在修改 – 同样的检索条件读取数据,再次读取出来时发现值不一致

幻读的重点在于新增或者删除 – 同样的条件,第1次和第2次读出来的记录数量不一样

4、事务的基本语法


– 由于MySQL默认是开启自动提交所以在使用事务的时候我们要先关闭自动提交 SET AUTOCOMMIT = 0;

– 关闭和开启自动提交模式

SET AUTOCOMMIT = 0; – 关闭

SET AUTOCOMMIT = 1; – 开启(MySQL默认是开启自动提交)

– 开始一个事务

START TRANSACTION;

– 事务提交

COMMIT;

– 事务回滚

ROLLBACK;

– 事务结束后设置MySQL数据的自动提交

SET AUTOCOMMIT = 1;-- 开启(MySQL默认是开启自动提交)

– 保存点

– 使用保存点,可以在回滚操作时只回滚到该保存点即可,而非事务的开头。

SAVEPOINT 保存点名称 --设置一个事务的保存点

ROLLBACK TO SAVEPOINT 保存点名称 – 回滚到保存点

RELEASE SAVEPOINT 保存点名称 – 删除保存点

– 测试题

/*

李子捌在线买一款价格为500元商品,网上银行转账.

李子捌的银行卡余额为2000,然后给商家李子柒支付500.

总结

机会是留给有准备的人,大家在求职之前应该要明确自己的态度,熟悉求职流程,做好充分的准备,把一些可预见的事情做好。

对于应届毕业生来说,校招更适合你们,因为绝大部分都不会有工作经验,企业也不会有工作经验的需求。同时,你也不需要伪造高大上的实战经验,以此让自己的简历能够脱颖而出,反倒会让面试官有所怀疑。

你在大学时期应该明确自己的发展方向,如果你在大一就确定你以后想成为Java工程师,那就不要花太多的时间去学习其他的技术语言,高数之类的,不如好好想着如何夯实Java基础。下图涵盖了应届生乃至转行过来的小白要学习的Java内容:

请转发本文支持一下

事务A执行 select语句1 返回 5条记录,再次执行 select语句1 时返回了 6条 记录,也即与上次返回的结果集不一致。(侧重在插入了新数据insert)

InnoDB引擎通过使用 NK锁(Next-Key Locks)解决幻读问题。

4、Serialization(可串行化)

事务串行化执行,隔离级别最高,牺牲了系统的并发性。解决脏读、不可重复读、幻读,可保证事务安全。通过强制事务串行执行避免了幻读问题,它在读取的每一行数据上都加锁,会导致大量的超时和锁争用问题。实际应用中很少使用这个隔离级别。

注意:

不可重复读的重点于在修改 – 同样的检索条件读取数据,再次读取出来时发现值不一致

幻读的重点在于新增或者删除 – 同样的条件,第1次和第2次读出来的记录数量不一样

4、事务的基本语法


– 由于MySQL默认是开启自动提交所以在使用事务的时候我们要先关闭自动提交 SET AUTOCOMMIT = 0;

– 关闭和开启自动提交模式

SET AUTOCOMMIT = 0; – 关闭

SET AUTOCOMMIT = 1; – 开启(MySQL默认是开启自动提交)

– 开始一个事务

START TRANSACTION;

– 事务提交

COMMIT;

– 事务回滚

ROLLBACK;

– 事务结束后设置MySQL数据的自动提交

SET AUTOCOMMIT = 1;-- 开启(MySQL默认是开启自动提交)

– 保存点

– 使用保存点,可以在回滚操作时只回滚到该保存点即可,而非事务的开头。

SAVEPOINT 保存点名称 --设置一个事务的保存点

ROLLBACK TO SAVEPOINT 保存点名称 – 回滚到保存点

RELEASE SAVEPOINT 保存点名称 – 删除保存点

– 测试题

/*

李子捌在线买一款价格为500元商品,网上银行转账.

李子捌的银行卡余额为2000,然后给商家李子柒支付500.

总结

机会是留给有准备的人,大家在求职之前应该要明确自己的态度,熟悉求职流程,做好充分的准备,把一些可预见的事情做好。

对于应届毕业生来说,校招更适合你们,因为绝大部分都不会有工作经验,企业也不会有工作经验的需求。同时,你也不需要伪造高大上的实战经验,以此让自己的简历能够脱颖而出,反倒会让面试官有所怀疑。

你在大学时期应该明确自己的发展方向,如果你在大一就确定你以后想成为Java工程师,那就不要花太多的时间去学习其他的技术语言,高数之类的,不如好好想着如何夯实Java基础。下图涵盖了应届生乃至转行过来的小白要学习的Java内容:

请转发本文支持一下

[外链图片转存中…(img-97gCq8mA-1714426330676)]

[外链图片转存中…(img-DdyZ2QGt-1714426330677)]

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值