SQL Server的学习记录(未完)
来源:互联网 发布:红蓝3d mac播放器 编辑:程序博客网 时间:2024/05/18 22:15
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Data.SqlClient;using System.Threading;namespace sqltest{ class Program { static void Main(string[] args) { Thread writeThr = new Thread(readData); Thread readThr = new Thread(writeData1); Thread writeThr2 = new Thread(writeData2); writeThr.Start(); readThr.Start(); } private static void readData() { Thread.Sleep(20); Console.WriteLine(System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + " 开始读数据....."); using (SqlConnection con = new SqlConnection("server=(local);uid=sa;pwd=cqdx2504A;database=abc;pooling=false")) { con.Open(); string read = "select * from testCount"; SqlCommand cmd = new SqlCommand(read, con); SqlDataReader reader = cmd.ExecuteReader(); while (reader.Read()) { Console.WriteLine(reader[0].ToString()); } con.Close(); } Console.WriteLine(System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + " 数据读取完毕....."); Console.ReadKey(); } private static void writeData1() { Console.WriteLine(System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "1 开始写数据....."); using (SqlConnection con = new SqlConnection("server=(local);uid=sa;pwd=------;database=abc;pooling=false")) { for (int i = 0; i < 1000; i++) { con.Open(); String insert = "insert into testCount values ('" + 1 + "')"; SqlCommand cmd = new SqlCommand(insert, con); cmd.ExecuteReader(); con.Close(); } } Console.WriteLine(System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + " 1 插入完成....."); } private static void writeData2() { Console.WriteLine(System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + " 2 开始写数据....."); using (SqlConnection con = new SqlConnection("server=(local);uid=sa;pwd=--------;database=abc;pooling=false")) { for (int i = 0; i < 1000; i++) { con.Open(); String insert = "insert into testCount values ('" + 2 + "')"; SqlCommand cmd = new SqlCommand(insert, con); cmd.ExecuteReader(); con.Close(); } } Console.WriteLine(System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + " 2 插入完成....."); } }}
这里只是简单的记录一下我自己的想法,多个线程对同一张表进行读写时发生的情况;
注意:正常情况下大量插入一张表数据是不这样插入的,有更方便的方法,下次在论述了,这里我只写了最简单的插入,没有考虑效率什么的...
测试结果说明:
1. 线程read 和write同时操作一张表时,read延迟一秒,write持续插入,而read只读取当前时间内有的数据。
2. 两个write线程同时发生,插入相互之间无影响,数据交替插入。插入数据为两次插入总合。
当发起读操作的时候,数据库正在进行写操作,那么读操作获取到的数据就可能不是最新的,这对于数据库来讲是正确的结论,因为数据库通常认为你要读取的数据是发起SQL查找时的时间点的数据,如果在读取过程中数据发生修改,及时还没有读到修改数据的行,也不应该将修改后的数据返回给客户端,这在数据库中会存在一个时间戳或者版本号的概念来保证对应的数据。
未完待续,继续查看更新时跟插入读取有什么影响。
0 0
- SQL Server的学习记录(未完)
- sql server学习(未完待续)
- SQL Server 2005的几个新功能(未完)
- sql server学习记录
- SQL 临时表 记录 未完
- bug记录:Mybatis的sql传空值报错(未完待续)
- SQL Server学习记录之convert和cast的用法
- ASP MVC 学习系列——03 Sql Server的Windows authentication(疑问未完全解决)
- sql server 2005学习记录-个人学习
- sql server存储过程学习记录
- SQL Server学习记录之存储过程
- SQL Server学习记录之日期操作
- SQL Server学习记录之函数
- SQL Server学习记录之事务处理
- SQL Server学习记录之数学函数
- SQL Server学习记录之字符串函数
- SQL Server学习记录之语句优化
- SQL Server学习记录之作业
- linux 命令
- poj1470Closest Common Ancestors(lca)
- linux jstat 监控 java GC
- 类型的转换和多分支语句(函数之间数据的传递)小练习
- ConcurrentHashMap原理分析
- SQL Server的学习记录(未完)
- 启动虚拟机报错VMware Workstation cannot connect to the virtual machine
- Java(输入/输出流的划分)
- 08 BaseAdapter 和ListView总结
- 【华为OJ】进制转换
- Android apk如何防止反编译和如何快速有效的反编译别人的Apk
- 为什么要将连续特征离散化
- SQLite——简单使用
- 167. Two Sum II - Input array is sorted [medium] (Python)