数据库属性信息
使用DB Tools List Columns VI返回的字段类型并不是在DBMS中定义的类型,而是被映射为LabVIEW数据库连接工具包支持的六种数据类型中的一种。 在返回的数据表不止一个时,可以使用循环读取每个数据表中各字段的属性信息。
获取数据库及数据表的信息
建立连接, 使用DB Tools List Tables和DB Tools List Columns VI返回数据库中包含的表、数据表中所包含的所有数据字段的属性信息,包括字段名、字段使用数据类型、数据的范围等。 
某个确切数据库的属性需要与数据库对象联系在一起。 LabVIEW中除了支持数据库连接对象、命令对象和记录集对象三种常用ADO之外,还支持命令-记录集,它用于将关系非常密切的ADO记录集和命令集捆绑在一起处理。 LabVIEW数据库连接工具支持的数据库对象及描述。
对象 | 数据类型及创建方式 | 描述 |
---|
连接(connection) |  | 通过对此对象的引用,设置或获取与数据库连接相关的参数信息 | 命令集(command set) |  | 使用该对象执行SQL命令或存储过程返回的参数;通过该对象的引用,设置或获取命令相关的参数信息;数据库连接成功后,使用DB Tools Create Parameterized Query VI创建该对象;使用完该对象后,应使用DB Tools Free Object VI释放资源。 | 记录集 |  | 使用该对象操作数据;通过该对象的引用,设置或获取与记录集相关的参数信息;数据库连接成功后,使用DB Tools Execute query VI创建该对象;使用完该对象后,使用DB Tools Free Object VI释放资源 | 命令记录集(command - recordset ) |  | 当共同使用记录集和命令集时使用该对象;通过该对象引用,既可以设计记录集参数,也可以设置命令集参数;使用完该对象后,使用DB Tools Free Object VI释放资源 |
处理数据库事务
数据库事务是指一系列被当成一个逻辑单元执行的操作。这些操作要么就被执行,要么不被执行,是不可分割的整体。
LabVIEW中,DB Tools Database Transaction VI 用于控制数据库事务的执行。 包括开启、提交、撤销。 默认情况下,MySQL是自动提交事务,每次执行一个 SQL 语句时,如果执行成功,就会向数据库自动提交,而不能回滚。如果某一组操作需要在一个事务中,那么需要使用start transaction,一旦rollback或commit就结束当次事务,之后的操作又自动提交。 DDL语句是不能回滚的,并且部分的DDL语句会造成隐式的提交,因此最好事务中不要涉及DDL语句。

数据库事务常与这个锁机制结合使用,以防事务执行时其他用户也对数据库进行操作,破坏数据的完整性。 并发访问的问题
问题类型 | 说明 |
---|
脏读 | 事务A往测试表新增了一条数据,而事务B查询测试表时,读到事务A新增了却还未提交的数据。如果事务A回滚,那么事务B读到的数据就是脏数据。 | 不可复读 | 事务1读取了数据A,事务2更新(update)了数据A,并且事务2进行了提交(commit),接着事务1又读取了数据A,此时事务1两次读到的值不一致。两次读取,中间更新 | 虚读 | 事务1读取了数据的几行内容,接着事务2插入或删除(insert/delete)了一些数据,并且事务2进行了提交(commit),最后事务1又进行了读取,发现多了(少了)一些内容两次读取,中间插入(或删除) | 回滚丢失 | 事务1和事务2同时访问一个数据,事务1先提交,事务2回滚操作,导致事务1的修改丢失 | 覆盖丢失 | 事务1和事务2同时访问一个数据,事务1先提交,事务2后提交,导致事务1的修改被覆盖 |
常用数据隔离级别
级别 | 隔离方式 | 脏读 | 不可复读 | 虚读 | 回滚丢失 | 覆盖丢失 | 说明 |
---|
1 | 混乱 | - | - | - | - | - | 不启用,事务处理处于混乱状态 | 2 | 读未提交 | T | T | T | T | F | 可以读取已经被其他事务修改但未提交的数据;只给数据修改启用锁,读取数据不用 | 3 | 读已提交 | F | T | T | T | F | 只能读取已经由其他事务修改且提交的数据;读操作完成后,无须等待它所在的事务结束就解锁数据,写操作则需等它在的事务结束后才解锁数据 | 4 | 可重复读 | F | F | T | F | F | 只能读取已由其他事务修改且提交的数据;其他事务不能在当前事务中的读取操作完成前修改数据;非修改数据的操作完成后,无须等待它所在的事务结束就立即解锁数据,而写操作要等它在的事务结束后才解锁数据 | 5 | 序列化 | F | F | F | F | F | 只能读取已由其他事务修改且提交的数据;其他事务不能在当前事务中的读取操作完成前修改数据;其他事务不能在当前事务操作结束前在数据表中插入或删除数据记录;所有读写均需要等它所在事务结束后才解锁 |
T为允许,F为不允许,-为不适用 mysql的默认隔离级别:可重复读 在LabVIEW中,可以通过DB Tools Database Transaction VI指定事务所采用的隔离级别。 
使用文件保存数据
DB Tools Save Recordset To File将数据库记录及数据记录的结构和属性保存至XML或ADTG格式文件中 ADTG是微软的一种二进制文件格式,文件相对较小,用ADTG保存数据的速度比用XML保存快。 保存  读取 
|