数据库事务

SQL控制事务之commit命令用法详解

本秂侑毒 提交于 2020-02-13 22:36:14
COMMIT 命令用于把 事务 所做的修改保存到数据库,它把上一个 COMMIT 或 ROLLBACK 命令之后的全部事务都保存到数据库。 这个命令的语法是: commit [work]; 关键字 COMMIT 是语法中惟一不可缺少的部分,其后是用于终止语句的字符或命令,具体内容取决于不同的实现。关键字 WORK 是个选项,其惟一作用是让命令对用户更加友好。 在下面这个范例里,我们首先从表 PRODUCT_TMP 里的全部数据开始: select * from products_tmp; prod_id prod_desc cost 12345 witches costume 29.99 222 false paraffin teeth 1.1 13 plastic pumpkin 7.75 90 lighted lanterns 14.5 4 rows selected. 接下来,删除表里所有低于 14.00 的产品。 delete from products_tmp where cost<14; 2 rows deleted. 使用一个 COMMIT 语句把修改保存到数据库,完成这个 事务 。 COMMIT; commit complete. 警告:对于数据库的大规模数据加载或撤消来说,应该多使用 COMMIT 语句;然而,过多的 COMMIT

事务日志已满,原因为“ACTIVE_TRANSACTION”

拟墨画扇 提交于 2020-02-13 11:59:06
汇总篇: http://www.cnblogs.com/dunitian/p/4822808.html#tsql 异常处理汇总-数据库系列 http://www.cnblogs.com/dunitian/p/4522990.html 我这种情况应该算是情况之一吧 先贴图: 看看磁盘:。。。 把事务模式改成“简单”,然后收缩一下日记和数据文件 命令可以参考这篇文章: http://www.cnblogs.com/dunitian/p/6047709.html 可以了, 如果需要后期恢复之类的,建议不要把事务模式改成简单,直接收缩,然后扩盘或者移个磁盘吧 完事之后,恢复事务模式为原来的即可 我的解决方案:迁移下位置呗: 先分离,再附加 exec sp_detach_db BigData_TestInfo_PartialData go exec sp_attach_db BigData_TestInfo_PartialData,N'D:\SQL Server 2016\BigData_TestInfo_AnyData.mdf',N'G:\SQLData\BigData_TestInfo_PartialData_log.ldf' go 来源: https://www.cnblogs.com/dunitian/p/6255584.html

SQLSERVER 2008 R2 事务日志已满

你。 提交于 2020-02-13 11:57:41
方法一: USE [master] GO ALTER DATABASE DNName SET RECOVERY SIMPLE WITH NO_WAIT GO ALTER DATABASE DNName SET RECOVERY SIMPLE --简单模式 GO USE DNName GO DBCC SHRINKFILE (N'DNName_Log' , 11, TRUNCATEONLY) GO USE [master] GO ALTER DATABASE DNName SET RECOVERY FULL WITH NO_WAIT GO ALTER DATABASE DNName SET RECOVERY FULL --还原为完全模式 GO 方法二: 报错:数据库 .... 的事务日志已满。若要查明无法重用日志中的空间的原因,请参阅 sys.databases 中的 log_reuse_wait_desc 列 处理办法: --将数据库设为简单模式。日志文件自动断开。 alter database dbname set recovery simple --查看日志文件状况 use dbname dbcc shrinkfile('logname') --like XXXX_log --恢复数据库模式 alter database dbname set recovery full 方法三:

数据库中的事务

房东的猫 提交于 2020-02-12 14:56:26
一. 数据库中事务的概述 数据库事务(Database Transaction)是是指作为单个逻辑工作单元执行的一系列操作,要么完全地执行,要么完全地不执行。 事务处理可以确保除非事务性单元内的所有操作都成功完成,否则不会永久更新面向数据的资源。通过将一组相关操作组合为一个要么全部成功要么全部失败的单元,可以简化错误恢复并使应用程序更加可靠。一个逻辑工作单元要成为事务,必须满足所谓的ACID(原子性、一致性、隔离性和持久性)属性。事务是数据库运行中的逻辑工作单位,由DBMS中的事务管理子系统负责事务的处理。也可以理解为用户定义的一个数据库操作序列,这些操作序列要么全部执行,要么都不执行,是一个不和分割的工作单位。在数据库中事务可以是一条SQL语句,也可以是多条SQL语句。 二. 数据库中事务的特性 原子性(Atomicity):原子性是指事务包含所有的操作要么都成功,要么都回滚,因此事务的操作成功就必须要完全应用到数据库,如果操作失败则不能对数据库有任何影响。 一致性(Consistency):一致性是指事务必须是数据库从一个一致性状态变换到另一个一致性状态,也就是说一个事务执行之前和执行之后都必须处于一致性状态。如有两个银行账户A和B,两个账户总共有6000,在这种情况下,无论账户A与B之间如何进行转账,两个账户的总额一直是6000,这就体现了数据库事务的一致性。 隔离性

innodb解决幻读

只愿长相守 提交于 2020-02-12 12:45:15
1. 结论 首先说结论,在RR的隔离级别下,Innodb使用MVVC和next-key locks解决幻读,MVVC解决的是普通读(快照读)的幻读,next-key locks解决的是当前读情况下的幻读。 2. 幻读是什么 事务A,先执行: update table set name=“hh” where id>3; 结果为: OK row xx 表名成功影响多少行数据 事务B,后执行,并且提交: insert into table values(11, uu); commit; 事务A,然后再select一下: select * from table where id>3 结果集为: … 11,uu … 事务A懵了,我特么不是id>3全部更新了吗 这次是已提交事务B对事务A产生的影响,这个影响叫做“幻读”。 幻读和不可重复读的区别是,前者是一个范围,后者是本身 3. 怎么解决的? 3.1. 当前读 所谓当前读,指的是加锁的select(S或者X), update, delete等语句。在RR的事务隔离级别下,数据库会使用next-key locks来锁住本条记录以及索引区间。 拿上面那个例子来说,在RR的情况下,假设使用的是当前读,加锁了的读 select * from table where id>3 锁住的就是id=3这条记录以及id>3这个区间范围,锁住索引记录之间的范围

mysql数据库技术1——基本的增删查改的sql语句

爱⌒轻易说出口 提交于 2020-02-12 12:39:02
1、数据库语言的分类 DDL:数据库定义语言 data Definition language 用于创建、修改、和删除数据库内的数据结构,如: 1:创建和删除数据库(CREATE DATABASE || DROP DATABASE); 2:创建、修改、重命名、删除表(CREATE TABLE || ALTER TABLE|| RENAME TABLE||DROP TABLE,TRUNCATE TABLE); 3:创建和删除索引(CREATEINDEX || DROP INDEX) DML:数据操控语言 data Manipulation language 修改数据库中的数据,包括插入(INSERT)、更新(UPDATE)和删除(DELETE) DCL:数据控制语言 (管理用户权限)data Control language 用于对数据库的访问,主要包括创建用户、给用户授权、对用户撤销授权、查询用户授权和删除用户等 ,如:1.创建用户(create user)2:给用户授予访问权限(GRANT);3:取消用户访问权限(REMOKE),4删除用户(drop user)。 DQL:数据查询语言 data Query language 从数据库中的一个或多个表中查询数据(SELECT) 下面一一来介绍这四种类型的语言 2、DDL:数据库定义语言 data Definition

缓存技术-Redis

时光毁灭记忆、已成空白 提交于 2020-02-12 12:29:58
1. Redis的了解 1.1 NoSQL 答:NoSQL(Not Only SQL),泛指非关系型的数据库,目的是解决高并发、高拓展和大数据储存问题。细分为:键值型(Redis),列存储(HBase),文档型(MongoDB),图形(Neo4j)。 1.2 Redis 答:Redis(Remote Dictionary Server远程字典服务)是一款 高性能、高并发 的key-value型分布式内存数据库,基于内存运行且支持 持久化 的NoSQL数据库。常被用于缓存和消息队列。 高性能:用户第一次访问数据后,数据存储在缓存中,之后再访问直接从缓存中获得,相当于直接操作内存。数据库数据改变后,同步改变缓存数据。 高并发:直接操作缓存能承受的请求远大于直接访问数据库,将部分数据放在33 redis中,让用户请求直接到缓存中寻找,不用访问数据库。 1.3 Redis和map区别 答:缓存分为本地缓存和分布式缓存。map是本地缓存,优点是轻量快速,缺点是多实例情况下,每个实例都有一个缓存。Redis是分布式缓存,多实例情况下,每个实例共用一个缓存,具有一致性,缺点是架构复杂。 1.4 Redis和memcached区别 答:主要是四点: Redis有更丰富的类型,memcached只支持String类型; Redis支持数据持久化,将内存数据保存到磁盘,memcached全部存在内存;

mysql、oracle分库分表方案之sharding-jdbc使用(非demo示例)

风流意气都作罢 提交于 2020-02-12 06:25:21
选择开源核心组件的一个非常重要的考虑通常是社区活跃性,一旦项目团队无法进行自己后续维护和扩展的情况下更是如此。 至于为什么选择sharding-jdbc而不是Mycat,可以参考知乎讨论帖子https://www.zhihu.com/question/64709787。 还可以参考https://blog.csdn.net/u013898617/article/details/79615427。 关于分库分表和读写分离、主从 一般来说,需要分库分表的系统是流量比较大的,而且比较容易出现峰值的比如说打折/活动的时候;其次,当单机扛不住业务流量的时候,分库分表一定不是第一选择,在分库分表之前,应该先保证垂直拆分完成了,子系统内都是高内聚的,其次基于Master-Slave的读写分离或者模糊查询很多的,可能NoSQL比如elastic就引流去很大一部分了。当读写分离也做完了,主库只剩下关键业务逻辑之后,流量还是很高,这个时候才开始考虑分库分表。因为相对于读写分离、垂直拆分,分库分表对开发和运维的要求多得多,如果确定业务一两年内不会剧增的,盲目引入只会导致成本高昂(尤其是各种SQL限制)。 其次,分库分表会增加N倍的数据库服务器,一般来说是4的倍数,如果某个应用说要做分库分表,又只有两台机器,那完全就是凑热闹。 读写分离和分库分表应该来说是前后的两件事比较合理

java十年技术栈[总结复习用]

让人想犯罪 __ 提交于 2020-02-12 05:09:23
以下摘自http://www.tvtv223.com/so/8/default/8.html#36-数据库的分库分表mycat java技术栈 参考了众多资料,这里就不再详细列举了,可以自行去搜索 1 java基础: 1.1 算法 1.1 排序算法:直接插入排序、希尔排序、冒泡排序、快速排序、直接选择排序、堆排序、归并排序、基数排序 1.2 二叉查找树、红黑树、B树、B+树、LSM树(分别有对应的应用,数据库、HBase) 1.3 BitSet解决数据重复和是否存在等问题 1.2 基本 2.1 字符串常量池的迁移 2.2 字符串KMP算法 2.3 equals和hashcode 2.4 泛型、异常、反射 2.5 string的hash算法 2.6 hash冲突的解决办法:拉链法 2.7 foreach循环的原理 2.8 static、final、transient等关键字的作用 2.9 volatile关键字的底层实现原理 2.10 Collections.sort方法使用的是哪种排序方法 2.11 Future接口,常见的线程池中的FutureTask实现等 2.12 string的intern方法的内部细节,jdk1.6和jdk1.7的变化以及内部cpp代码StringTable的实现 1.3 设计模式 单例模式 工厂模式 装饰者模式 观察者设计模式

java技术栈

為{幸葍}努か 提交于 2020-02-12 04:52:07
java技术栈 参考了众多资料,这里就不再详细列举了,可以自行去搜索 1 java基础: 1.1 算法 1.1 排序算法:直接插入排序、希尔排序、冒泡排序、快速排序、直接选择排序、堆排序、归并排序、基数排序 1.2 二叉查找树、红黑树、B树、B+树、LSM树(分别有对应的应用,数据库、HBase) 1.3 BitSet解决数据重复和是否存在等问题 1.2 基本 2.1 字符串常量池的迁移 2.2 字符串KMP算法 2.3 equals和hashcode 2.4 泛型、异常、反射 2.5 string的hash算法 2.6 hash冲突的解决办法:拉链法 2.7 foreach循环的原理 2.8 static、final、transient等关键字的作用 2.9 volatile关键字的底层实现原理 2.10 Collections.sort方法使用的是哪种排序方法 2.11 Future接口,常见的线程池中的FutureTask实现等 2.12 string的intern方法的内部细节,jdk1.6和jdk1.7的变化以及内部cpp代码StringTable的实现 1.3 设计模式 单例模式 工厂模式 装饰者模式 观察者设计模式 ThreadLocal设计模式 。 1.4 正则表达式 4.1 捕获组和非捕获组 4.2 贪婪,勉强,独占模式 1.5 java内存模型以及垃圾回收算法