mysql 查询事务信息_mysql 查询+事务

DQL排序查询

/*

默认升序排序

desc -- 降序排序

asc -- 升序排序

*/

select * from emp order by sal;1

2

3

4

5

6

7

DQL聚合函数

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

语法格式: select 聚合函数(字段名) from 表名 [where 条件]

/*

- count() 统计个数

- sum() 求和

- max()求最大值

- min()求最小值

- avg()求平均数

*/

select avg(sal) as '平均薪资' from emp where deptno = 20;1

2

3

4

5

6

7

8

DQL分组查询

/*

分组查询 使用group by 子句 语法格式: select 分组字段/聚合函数 from 表名 group by 分组字段 */

//查询平局薪资大于2000的部门

select deptno, avg(sal) from emp where deptno is not null group by deptno having avg(sal) > 2000;1

2

3

4

5

6

7

8

limit关键字

通过limit关键字去指定要查询数据的条数,行数

select 字段 from 表名 limit offset,length;

`offset: 起始行数,默认从0开始计数

length: 返回的行数(要查寻几条数据)

约束

约束名

约束关键字

主键

primary key

唯一

unique

非空

not null

外键

foreign key

主键约束 primary key

特点

不可重复 唯一 非空

作用

用来表示数据库中的每一条记录

/*

*约束是指对数据进行一定的限制,来保证数据的完整性、有效性、正确性

**/

//主键约束--第一种写法

create table student(

sid int(4) primary key,

sname varchar(20)

);

//主键约束--第二种写法

create table student(

sid int(4),

sname varchar(20),

primary key(sid) //--指定sid为主键约束

);

//主键约束--第二种写法

create table student(

sid int(4),

sname varchar(20) );

/*通过DDL语句添加主键约束*/

alter table student add primary key(sid);

/*通过DDL语句删除主键*/

alter table student drop primary key;1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

/**

* 主键自增

* 关键字: auto_increment 主键的自动增长 ,字段类型必须是整数类型

*/

create table student(

sid int(4) primary key auto_increment,

sname varchar(20) ) auto_increment=100; //自定义自增的起始位置,不写默认从1开始1

2

3

4

5

6

7

8

delete 和 truncate对自增长得影响

delete 删除表中的所有数据,将表中的数据逐条删除

truncate 删除表中的所有数据,是将整个表删除,然后在创建一个结构相同表

/*delete 删除所有数据*/

delete from student; //删除对自增是没有影响的

/*truncate 删除所有数据*/

truncate table student;1

2

3

4

非空约束 not null

/*添加非空约束*/

create table student(

sid int(4) primary key auto_increment,

sname varchar(20) not null//sname这列数据不可以为null

) ;1

2

3

4

5

唯一约束 unique

/*表中的某一列不可以重复(对null值,不做唯一判断)*/

create table student(

sid int(4) primary key auto_increment,

sname varchar(20) unique

) ;1

2

3

4

5

6

主键约束: 唯一并且不可以为null

唯一约束: 唯一但是可以为null

默认值:字段名 字段类型 default 默认值

MySQL事务操作

事务,是一个有一条或者多条sql语句组成的整体,事务中的操作,要么全部成功,要么全部失败。

手动提交事务

功能

语句

开启事务

start transaction; 或者begin

提交事务

commit

回滚事务

rollback

start transaction

这个语句显示的标记一个事务的起始点

commit

表示提交事务, 即提交事务的所有操作,具体的说,就是讲事务中所有对数据库的更新都写到磁盘上的物理数据库中,事务正常结束。

rollback

表示撤销事务,即在事务运行的过程中发生了某种故障,事务不能继续进行,系统将事务中对数据库所有已完成的操作全部撤销,回滚到事务开始时的状态。

事务的自动提交

/**

*查看事务是否手动提交 (平常默认就是自动提交)

*如果 autocommit 为on 则表示自动提交

*/

show variables like 'autocommit'; /*修改为手动提交*/

set @@autocommit = off;1

2

3

4

5

6

7

8

9

事务的四大特性

特性

含义

原子性

每个事务都是一个整体,不可以在拆分,事务中所有的SQL语句要么都执行成功,要么都失败。

一致性

事务在执行前数据库的状态与执行后数据库的状态保持一致。如:转账前两人的总金额是10000, 转账后两人的总金额还是10000

隔离性

事务与事务之间不应该相互影响,执行时保持隔离的状态

持久性

一但事务执行成功,对数据库的修改是永久的 ,就算关机,数据也是要保存下来的

事务的隔离级别

数据并发访问

一个数据库可能拥有多个访问客服端,这些客服端都可以并发方式访问数据库。数据库的相同事务可能被多个事务同时访问,如果不采取隔离措施,就会导致各种问题,破坏事务的完整性。

并发访问会产生的问题

事务在操作时的理想状态:所有事务之间保持隔离,互不影响。因为并发操作,多个用户同时访问同一个数据,可能引起并发访问的问题。

并发访问的问题

说明

脏读

一个事务读取到了另一个事务中尚未提交的数据

不可重复读

一事务中两次读取的数据内容不一致,要求的是在一个事务中多次读取时数据是一致的。这一般是update操作时引发的问题

幻读

一个事务中,某一次的 select 操作所得到的结果所表征的数据状态,无法支撑后序的业务操作。查询得到的数据状态不准确,导致幻读

四种隔离级别

read uncommitted--------读未提交

可以防止哪些问题: 无

read committed--------读已提交(Oracle 默认隔离级别)

可以防止哪些问题: 脏读

repeatable read-------可重复读(MySQL 默认隔离级别)

可以防止哪些问题: 脏读,不可重复读

serializable ------- 串行化

可以防止哪些问题: 脏读,不可重复读,幻读

注意: 隔离级别从小到大,安全性是越来越高,但是效率是越来越低的,根据不同的情况来选择不同的隔离级别

隔离级别的相关命令

/*

*查看隔离级别--mysql中默认显示为 repeatable-read

**/

select @@tx_isolation; /*

*设置隔离级别--新开链接才能查看隔离级别成功设置

**/

set global transaction isolation level 隔离级别1

2

3

4

5

6

7

8

9

解决脏读的问题

脏读是非常危险的,比如张三向李四购买商品,张三开启事务后向李四转账500块钱,然后李四查询这个钱已经到账了就把货物交给了张三,张三收到货后回滚事务,李四再查时这500块钱没了。

- 解决方案:

一般来说,这应该是隔离级别较低,比如read uncommitted级别,这时将级

别提高到read committed及以上就好了1

2

3

4

解决不可重复读的问题

不可重复读就相当于我第一次查询时手机上短信显示为1000元,然后我给卡里边充了500,然后在电脑屏幕端显示1500元,在我不知道已经充了钱的情况下我不知道该选择哪条短信。

- 解决方案: 和脏读差不多,将全局的隔离级别提高到repeatable read 及以上 就好了1

2

3

解决幻读的问题

幻读还是一样,将隔离级别提到最高就好了,当然也可深入了解

4bc58145aecf1b2ee57445b9940ce0bc.png

文章来源: blog.csdn.net,作者:x-sheck,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/weixin_46767635/article/details/110111231

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQL XA事务是一种分布式事务处理方式,它允许多个独立的事务同时访问多个据库,并将它们作为一个全局事务进行处理,从而保证了据的一致性和完整性。 在MySQL 5.7中,XA事务的实现基于两个重要的组件:XA接口和InnoDB存储引擎。XA接口提供了一组标准API,使得应用程序可以以统一的方式与分布式事务协调器进行通信,而InnoDB存储引擎则提供了具体的XA事务实现。 要使用MySQL XA事务,需要确保以下几点: 1. 据库支持XA协议,如MySQL 5.7及以上版本。 2. 据库引擎支持XA事务,如InnoDB存储引擎。 3. 应用程序使用XA接口与协调器进行通信。 4. 执行XA事务据库必须在同一个XA事务中注册。 在使用MySQL XA事务时,需要对事务进行以下基本操作: 1. 准备(prepare):在分布式事务中,每个据库都会先执行准备操作,以确保所有据库都可以成功执行事务。 2. 提交(commit):当所有据库都准备好时,可以执行提交操作,将分布式事务提交到所有据库。 3. 回滚(rollback):如果任意一个据库无法完成准备或提交操作,则需要执行回滚操作,以确保所有据库都回到事务开始前的状态。 总的来说,MySQL XA事务是一种非常强大的分布式事务处理方式,可以实现多个独立的事务同时访问多个据库,并将它们作为一个全局事务进行处理,从而保证了据的一致性和完整性。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值