`
文章列表
简述   关系型数据库有四个显著的特征,即安全性、完整性、并发性和监测性。数据库的安全性就是要保证数据库中数据的安全,防止未授权用户随意修改数据库中的数据,确保数据的安全。在大多数数据库管理系统中,主 ...
一般事务(DML)即数据修改(增、删、改)的事务事务会将所有在事务中被修改的数据行加上锁(行级锁),来阻止其它人(会话)同时对这些数据的修改操作。当事务被提交或回滚后,这些数据才会被释放锁。 举个例子:当A操作一条数据N1后,暂未提交事务 ,此时B又上来操作同一条数据N1,这时的情况是:1、所有除A以外的人看不到被A所修改后的数据2、B会处于等待状态,直到A提交或回滚了针对这条数据的修改(这也就是行级锁的概念)3、当A提交事务后,所有人可以看到被A修改后的数据,看不到B修改后的数据。但B能看到自己修改后的数据(与A一样,因为B还未提交事务)。4、当B提交事务后,所有人可以看到被B修改后的数据 ...
  事务隔离级别:一个事务对数据库的修改与并行的另一个事务的隔离程度。 两个并发事务同时访问数据库表相同的行时,可能存在以下三个问题: 1、幻想读:事务T1读取一条指定where条件的语句,返回结果集。此时事务T2插入一行新记录,恰好满足T1的where条件。然后T1使用相同的条件再次查询,结果集中可以看到T2插入的记录,这条新纪录就是幻想。 2、不可重复读取:事务T1读取一行记录,紧接着事务T2修改了T1刚刚读取的记录,然后T1再次查询,发现与第一次读取的记录不同,这称为不可重复读。 3、脏读:事务T1更新了一行记录,还未提交所做的修改,这个T2读取了更新后的数据,然后T1执行 ...
脏读(Drity Read):某个事务已更新一份数据,另一个事务在此时读取了同一份数据,由于某些原因,前一个RollBack了操作,则后一个事务所读取的数据就会是不正确的。 不可重复读(Non-repeatable read):在一个事务的两次查询之中数据不一致,这可能是两次查询过程中间插入了一个事务更新的原有的数据。 幻读(Phantom Read):在一个事务的两次查询中数据笔数不一致,例如有一个事务查询了几列(Row)数据,而另一个事务却在此时插入了新的几列数据,先前的事务在接下来的查询中,就会发现有几列数据是它先前所没有的。 在MySQL中,实现了这四种隔离级别,分别有可能产生问 ...
使用gtest、或者cppunit之类的框架编写单元测试代码,一个最常见的问题是对类私有成员的测试与验证。理想情况下,我们希望在测试中,类中所有的数据与方法都是可以访问的;而在产品代码中,只暴露实现定义好的接口。 gtest官方文档中,也提到了对私有成员的处理,方法不外乎两种:一是使用friend关键字,骗取信任得以通行;二是重构采用Pimpl模式,公共类中只暴露接口,而实现类中暴露所有细节(public),测试时包含实现类即可。 但这两个方法都试了一下,觉不太方便。 使用friend关键字gtest提供了一个FRIEND_TEST的宏,用来将一个test声明为产品类的友元。其缺点是显 ...
gcov是和gcc结合使用的测试代码覆盖率的一个工具(profiler),可用于发现代码的瓶颈。可以做到(使用gcov最好不要优化编译):    1.每一行代码运行的次数    2.那些代码执行了    3.没一节代码所用的时间    gcov会创建 ...
代码覆盖率——gcov lcov的使用 2008-07-25 15:57 一、关于gcov工具gcov伴随gcc 发布。gcc编译加入-fprofile-arcs -ftest-coverage 参数生成二进制程序,执行测试用例生成代码覆盖率信息。1、如何使用gcov用GCC编译的时候加上-fprofile-arcs -ftest ...
  gcov是一个可用于C/C++的代码覆盖工具,是gcc的内建工具。下面介绍一下如何利用gcov来收集代码覆盖信息。想要用gcov收集代码覆盖信息,需要在gcc编译代码的时候加上这2个选项 “-fprofile-arcs -ftest-coverage”,把这个简单的程序编译一下 gcc -fprofile-arcs -ftest-coverage hello.c -o hello 编译后会得到一个可执行文件hello和hello.gcno文件,当用gcc编译文件的时候,如果带有“-ftest-coverage”参数,就会生成这个.gcno文件,它包含了程序块和行号等信 ...
gcov是Linux下GCC自带的一个C/C++代码覆盖率分析工具 使用方法:在gcc或者g++后面添加参数 -fprofile-arcs -ftest-coverage 注意:-fprofile-arcs -ftest-coverage必须同时在编译器和链接器上设置,(makefile里面可以加在 CFLAGS 和 LDFLAGS上),如果连接的时候出现undefined reference to `__gcov_init' 错误,则还要加上-lgocv 编译成功后运行编译好的程序,然后退出程序。程序会在当前目录下生成*.gcda文件。 然后使用 gcov *.c 或者gcov ...
Select …forupdate语句是我们经常使用手工加锁语句。通常情况下,select语句是不会对数据加锁,妨碍影响其他的DML和DDL操作。同时,在多版本一致读机制的支持下,select语句也不会被其他类型语句所阻碍。   借助for update子句,我们可以在应用程序的层面手工实现数据加锁保护操作。本篇我们就来介绍一下这个子句的用法和功能。   下面是采自Oracle官方文档《SQLLanguage Reference》中关于for update子句的说明:(请双击点开图片查看)    

数据库锁

1 前言 数据库大并发操作要考虑死锁和锁的性能问题。看到网上大多语焉不详(尤其更新锁),所以这里做个简明解释,为下面描述方便,这里用T1代表一个数据库执行请求,T2代表另一个请求,也可以理解为T1为一个线程,T2 为另一个线程。T3,T4以此类推。下面以SQL Server(2005)为例。 2 锁的种类 共享锁(Shared lock)。 例1: ---------------------------------------- T1: select * from table (请想象它需要执行1个小时之久,后面的sql语句请都这么想象) T2: ...
如何写一个异常处理类是一个不太容易的事情,最近刚好接触了一些不错的代码,看到了一些技巧,这里和大家分享一下。 一个相对完善的异常处理类(以及附加的一些东西)应该能够处理下面的一些功能: 1) 能够方便的定 ...
Oracle 创建表空间和用户   一、在Windows系统下, 请先点击“开始”,然后点“运行”,输入cmd并点击“确定”,打开命令行窗口输入以下命令:   sqlplus /nolog   回车后,将出现提示符 SQL>   这时输入conn / as sysdba   一般即可登录,如果失败的话,可以试一下用conn sys/sys用户的密码 as sysdba来重试一下   接下来,我们看看您当前的数据库文件一般都是放在哪里的:   select name from v$datafile;   windows下可能看到的结果如下:   SQL> ...
"(0x80040E37): [DB2/NT64] SQL0204N "<username>.DUAL" is an undefined name. SQLSTATE=42704" when click "Help - System Information" Technote (troubleshooting) Problem(Abstract) User click "Help - System Information". Use

commit rollback

从SQL语言的分类谈COMMIT和ROLLBACK的用法 从功能上划分,SQL语言可以分为DDL,DML和DCL三大类。     1. DDL(Data Definition Language)     数据定义语言,用于定义和管理 SQL 数据库中的所有对象的语言 ;    CREATE---创建表    ALTER--- ...
Global site tag (gtag.js) - Google Analytics