SQLServer连接中的四个最常见错误
SQL Server连接中的四个最常见错误:
一."SQL Server 不存在或访问被拒绝"
这个是最复杂的,错误发生的原因比较多,需要检查的方面也比较多.
一般说来,有以下几种可能性:
1,SQL Server名称或IP地址拼写有误
2,服务器端网络配置有误
3,客户端网络配置有误
要解决这个问题,我们一般要遵循以下的步骤来一步步找出导致错误的原因.
============= 首先,检查网络物理连接=============
ping <服务器IP地址/服务器名称>
如果ping <服务器IP地址> 不成功,说明物理连接有问题,这时候要检查硬件设备,如网卡,HUB,路由器等.
还有一种可能是由于客户端和服务器之间安装有防火墙软件造成的,比如ISA Server.防火墙软件可能会屏蔽对ping,telnet 等的响应
因此在检查连接问题的时候,我们要先把防火墙软件暂时关闭,或者打开所有被封闭的端口.
如果ping <服务器IP地址> 成功而,ping <服务器名称> 失败
则说明名字解析有问题,这时候要检查DNS 服务是否正常.
有时候客户端和服务器不在同一个局域网里面,这时候很可能无法直接使用服务器名称来标识该服务器,这时候我们可以使用HOSTS文件来进行名字解析,
具体的方法是:
1.使用记事本打开HOSTS文件(一般情况下位于C:\WINNT\system32\drivers\etc).
添加一条IP地址与服务器名称的对应记录,如:
172.168.10.24 myserver
2.或在SQL Server 的客户端网络实用工具里面进行配置,后面会有详细说明.
============= 其次,使用telnet 命令检查SQL Server服务器工作状态
=============
telnet <服务器IP地址> 1433
如果命令执行成功,可以看到屏幕一闪之后光标在左上角不停闪动,这说明SQL Server 服务器工作正常,并且正在监听1433端口的TCP/IP 连接
如果命令返回"无法打开连接"的错误信息,则说明服务器端没有启动SQL Server
服务,
也可能服务器端没启用TCP/IP 协议,或者服务器端没有在SQL Server 默认的端口1433上监听.
=============接着,我们要到服务器上检查服务器端的网络配置,检查是否启用了命名管道.是否启用了TCP/IP 协议等等=============
可以利用SQL Server 自带的服务器网络使用工具来进行检查.
点击:程序-- Microsoft SQL Server -- 服务器网络使用工具
打开该工具后,在"常规"中可以看到服务器启用了哪些协议.
一般而言,我们启用命名管道以及TCP/IP 协议.
点中TCP/IP 协议,选择"属性",我们可以来检查SQK Server 服务默认端口的设置
一般而言,我们使用SQL Server 默认的1433端口.如果选中"隐藏服务器",则意味着客户端无法通过枚举服务器来看到这台服务器,起到了保护的作用,但不影响连接.
============= 接下来我们要到客户端检查客户端的网络配置============= 我们同样可以利用SQL Server 自带的客户端网络使用工具来进行检查,
所不同的是这次是在客户端来运行这个工具.
点击:程序-- Microsoft SQL Server -- 客户端网络使用工具
打开该工具后,在"常规"项中,可以看到客户端启用了哪些协议.
一般而言,我们同样需要启用命名管道以及TCP/IP 协议.
点击TCP/IP 协议,选择"属性",可以检查客户端默认连接端口的设置,该端口必须与服务器一致.
单击"别名"选项卡,还可以为服务器配置别名.服务器的别名是用来连接的名称,
连接参数中的服务器是真正的服务器名称,两者可以相同或不同.别名的设置与使用HOSTS文件有相似之处.
步骤:
一看ping 服务器IP能否ping通。
这个实际上是看和远程sql server 2000服务器的物理连接是否存在。如果不行,请检查网络,查看配置,当然得确保远程sql server 2000服务器的IP拼写正确。
二在Dos或命令行下输入telnet 服务器IP 端口,看能否连通。
如telnet 202.114.100.100 1433
通常端口值是1433,因为1433是sql server 2000的对于Tcp/IP的默认侦听端口。如果有问题,通常这一步会出问题。通常的提示是“……无法打开连接,连接失败"。
如果这一步有问题,应该检查以下选项。
1 检查远程服务器是否启动了sql server 2000服务。如果没有,则启动。
2 检查服务器端有没启用Tcp/IP协议,因为远程连接(通过因特网)需要靠这个协议。检查方法是,在服务器上打开开始菜单->程序->Microsoft SQL Server->服务器网络实用工具,看启用的协议里是否有tcp/ip协议,如果没有,则启用它。
3 检查服务器的tcp/ip端口是否配置为1433端口。仍然在服务器网络实用工具里查看启用协议里面的tcp/ip的属性,确保默认端口为1433,并且隐藏服务器复选框没有勾上。
事实上,如果默认端口被修改,也是可以的,但是在客户端做telnet测试时,写服务器端口号时必须与服务器配置的端口号保持一致。如果隐藏服务器复选框被勾选,则意味着客户端无法通过枚举服务器来看到这台服务器,起到了保护的作用,但不影响连接,但是Tcp/ip协议的默认端口将被隐式修改为2433,在客户端连接时必须作相应的改变。
4 如果服务器端操作系统打过sp2补丁,则要对windows防火墙作一定的配置,要对它开放1433端口,通常在测试时可以直接关掉windows防火墙(其他的防火墙也关掉最好)。
5 检查服务器是否在1433端口侦听。如果服务器没有在tcp连接的1433端口侦听,则是连接不上的。检查方法是在服务器的dos或命令行下面输入
netstat -a -n 或者是netstat -an,在结果列表里看是否有类似tcp 127.0.0.1 1433 listening 的项。如果没有,则通常需要给sql server 2000打上至少sp3的补丁。其实在服务器端启动查询分析器,输入select @@version 执行后可以看到版本号,版本号在
8.0.2039以下的都需要打补丁。
如果以上都没问题,这时你再做telnet 服务器ip 1433 测试,将会看到屏幕一闪之后光标在左上角不停闪动。恭喜你,你马上可以开始在企业管理器或查询分析器连接了。
三检查客户端设置
程序->Microsoft SQL Server -> 客户端网络使用工具。像在服务器网络实用工具里一样,确保客户端tcp/ip协议启用,并且默认端口为1433(或其他端口,与服务器端保持一致就行)。
四在企业管理器里或查询那分析器连接测试
企业管理器->右键SQlserver组->新建sqlserver注册->下一步->写入远程IP->下一步->选Sqlserver登陆->下一步->写入登陆名与密码(sa,password)->下一步->下一步->完成查询分析器->文件->连接->写入远程IP->写入登录名和密码(sa,password)->确定通常建议在查询分析器里做,因为默认情况下,通过企业管理器注册另外一台SQL Server的超时设置是4秒,而查询分析器是15秒。
修改默认连接超时的方法:
企业管理器->工具->选项->在弹出的"SQL Server企业管理器属性"窗口中,点击"高级"选项卡->连接设置->在登录超时(秒)后面的框里输入一个较大的数字
查询分析器->工具->选项->连接->在登录超时(秒)后面的框里输入一个较大的数字
通常就可以连通了,如果提示错误,则进入下一步。
五错误产生的原因通常是由于SQL Server使用了"仅Windows"的身份验证方式,因此用户无法使用SQL Server的登录帐户(如sa )进行连接。解决方法如下所示:
1 在服务器端使用企业管理器,并且选择"使用Windows 身份验证"连接上SQL Server。
2 展开"SQL Server组",鼠标右键点击SQL Server服务器的名称,选择"属性",再选择"安全性"选项卡。
3 在"身份验证"下,选择"SQL Server和Windows "。
4 重新启动SQL Server服务。(在dos或命令行下面net stop mssqlserver停止服务,net start mssqlserver启动服务,也是一种快捷的方法)。
附注:在连接本地服务器时,通常使用的是命名管道协议(在服务器网络实用工具里可以看到启用的协议有这个),默认端口是445,因此在本地能连通是不能说明什么问题的,连接远程服务器是完全不同的协议)
一、SQL Server不存在或访问被拒绝
分析:此问题最为复杂,由于错误发生的原因比较多,所以需要检查很多方面。
一般情况下,有几种可能性:
1.SQL Server名称或IP地址拼写有误。
2.服务器端网络配置有误。
3.客户端网络配置有误。
要解决此问题,我们一般要遵循以下的步骤来一步步找出导致错误的原因。
首先,检查网络物理连接
ping <服务器IP地址/服务器名称>
假如ping<服务器IP地址>不成功,说明物理连接有问题,这时候要检查硬件设备,如网
卡,HUB,路由器等.。
另外还有一种可能是由于客户端和服务器之间安装有防火墙软件造成的,比如ISA
Server。
防火墙软件可能会屏蔽对ping,telnet等的响应,因此在检查连接问题的时候,我们要先把防火墙软件暂时关闭,或者打开所有被封闭的端口。
如果ping<服务器IP地址>成功而,ping<服务器名称>失败则说明名字解析有问题,这时
候要检查DNS服务是否正常。
有时候客户端和服务器不在同一个局域网里面,这时候很可能无法直接使用服务器名称来标识该服务器,这时候我们可以使用HOSTS文件来进行名字解析, 具体的方法是:
1.使用记事本打开HOSTS文件(一般情况下位于C:\WINNT\system32\drivers\etc)。
添加一条IP地址与服务器名称的对应记录,如:
172.168.10.24 myserver
2.或在SQL Server的客户端网络实用工具里面进行配置,后面会有详细说明。
其次,使用telnet命令检查SQL Server服务器工作状态
telnet <服务器IP地址> 1433
如果命令执行成功,可以看到屏幕一闪之后光标在左上角不停闪动,这说明SQL Server 服务器工作正常,并且正在监听1433端口的 TCP/IP 连接。
如果命令返回"无法打开连接"的错误信息,则说明服务器端没有启动SQL Server服务, 也可能服务器端没启用 TCP/IP 协议,或者服务器端没有在SQL Server默认的端口1433上
监听。
接着,我们要到服务器上检查服务器端的网络配置, 检查是否启用了命名管道.是否启
用了TCP/IP协议等等
可以利用 SQL Server 自带的服务器网络使用工具来进行检查。
点击:程序—Microsoft SQL Server—服务器网络使用工具。
打开该工具后,在“常规”中可以看到服务器启用了哪些协议。
一般而言,我们启用命名管道以及 TCP/IP 协议.
点中 TCP/IP 协议,选择"属性",我们可以来检查 SQK Server 服务默认端口的设置.一般而言,我们使用 SQL Server默认的1433端口.如果选中"隐藏服务器",则意味着客户端无法通过枚举服务器来看到这台服务器,起到了保护的作用,但不影响连接。
接下来我们要到客户端检查客户端的网络配置
我们同样可以利用 SQL Server 自带的客户端网络使用工具来进行检查, 所不同的是
这次是在客户端来运行这个工具.
点击:程序—Microsoft SQL Server—客户端网络使用工具。
打开该工具后,在"常规"项中,可以看到客户端启用了哪些协议。
一般而言,我们同样需要启用命名管道以及TCP/IP 协议。
点击TCP/IP协议,选择"属性",可以检查客户端默认连接端口的设置,该端口必须与服
务器一致。
单击"别名"选项卡,还可以为服务器配置别名.服务器的别名是用来连接的名称,连接参数中的服务器是真正的服务器名称,两者可以相同或不同.别名的设置与使用HOSTS文件有
相似之处。
通过以上几个方面的检查,基本上可以排除第一种错误。
二、无法连接到服务器,用户xxx登陆失败
该错误产生的原因是由于SQL Server使用了"仅 Windows"的身份验证方式,
因此用户无法使用SQL Server的登录帐户(如sa)进行连接,解决方法如下所示:
1.在服务器端使用企业管理器,并且选择"使用Windows身份验证"连接上SQL Server
在企业管理器中
—右键你的服务器实例(就是那个有绿色图标的)
—编辑SQL Server注册属性
—选择"使用windows身份验证"
2.展开"SQL Server组",鼠标右键点击SQL Server服务器的名称,选择"属性",再选择"
安全性"选项卡。
3.在"身份验证"下,选择"SQL Server和 Windows "。
4.重新启动SQL Server服务。
在以上解决方法中,如果在第1步中使用"使用Windows 身份验证"连接SQL Server失败, 那就通过修改注册表来解决此问题:
1.点击"开始"—"运行",输入regedit,回车进入注册表编辑器。
2.依次展开注册表项,浏览到以下注册表键:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\MSSQLServer]
3.在屏幕右方找到名称"LoginMode",双击编辑双字节值。
4.将原值从1改为2,点击"确定"。
5.关闭注册表编辑器。
6.重新启动SQL Server服务。
此时,用户可以成功地使用sa在企业管理器中新建SQL Server注册,
但是仍然无法使用Windows身份验证模式来连接SQL Server。
这是因为在SQL Server中有两个缺省的登录帐户:
BUILTIN\Administrators
<机器名>\Administrator 被删除。
要恢复这两个帐户,可以使用以下的方法:
1.打开企业管理器,展开服务器组,然后展开服务器
2.展开"安全性",右击"登录",然后单击"新建登录"
3.在"名称"框中,输入 BUILTIN\Administrators
4.在"服务器角色"选项卡中,选择"System Administrators"
5.点击"确定"退出
6.使用同样方法添加 <机器名>\Administrator 登录。
详细说明:
以下注册表键:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\MSSQLServer\LoginMode的值决定了SQL Server将采取何种身份验证模式.
1.表示使用"Windows 身份验证"模式
2.表示使用混合模式(Windows 身份验证和 SQL Server 身份验证)。
三、提示连接超时
如果遇到第三个错误,一般而言表示客户端已经找到了这台服务器,并且可以进行连接,不过是由于连接的时间大于允许的时间而导致出错。
这种情况一般会发生在当用户在Internet上运行企业管理器来注册另外一台同样在Internet上的服务器, 并且是慢速连接时,有可能会导致以上的超时错误.有些情况下,由
于局域网的网络问题,也会导致这样的错误。
要解决这样的错误,可以修改客户端的连接超时设置. 默认情况下,通过企业管理器注册另外一台SQL Server的超时设置是4秒, 而查询分析器是15秒(这也是为什么在企业管
理器里发生错误的可能性比较大的原因).
具体步骤为:
企业管理器中的设置:
1.在企业管理器中,选择菜单上的"工具",再选择"选项"
2.在弹出的"SQL Server企业管理器属性"窗口中,点击"高级"选项卡
3.在"连接设置"下的"登录超时(秒)"右边的框中输入一个比较大的数字,如20.
查询分析器中的设置:
工具—选项—连接—将登录超时设置为一个较大的数字
四、大部分机都用Tcp/ip才能成功,有时你会发现用Named Pipes才可以?
这是由于在WINDOWS 2000以后的操作系统中,MS为解决SQL SERVER的安全问题将TCP/IP配置为SQL Server的默认连接协议,你可以在CLIENT NETWORK UTILITY中看到TCP/IP
和NAME PIPE 的顺序。
也可以在:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\Client\SuperSocketNetLib] "ProtocolOrder"=hex(7):74,00,63,00,70,00,00,00,00,00
此处可以看到默认的协议。
问:怎么在程序中更改Named Pipes,Tcp/ip其sql语句怎么写?
答:可以在以上提到的注册表的相对位置来修改,示例如下:
·CLIENT端:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\Client\SuperSocketNetLib] "ProtocolOrder"=hex(7):74,00,63,00,70,00,00,00,00,00
·SERVER端:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\MSSQLServer\SuperSocketNetLi
b]
"ProtocolOrder"=hex(7):74,00,63,00,70,00,00,00,00,00
SQL Server的安全管理策略
杨敬波1,孙海龙2
(1.烟台教育学院计算机与信息科学系山东烟台264001;
2.南京航空航天大学江苏南京210016)
摘要:讨论把SQLServer应用于校园网或企事业单位中数据管理需要考虑
的其他安全因素。
关键词:关系数据库管理系统;SQLServer;代理服务器;防火墙;亚安全
Safety Management Strategy of SQLServer
YANG Jingbo1,SUN Hailong2
(1.Department of Computer and Information Science,YantaiCollege of Education,Yantai,
264001,China;
2.Nanjing University of Aeronautics and Astronautics,Nanjing,210061,China)
Abstract:This article discuss more safety factors that we need think about uhen we apply SQL Server to our campus net or enterprise intranet.
Keywords: RDBMS; SQL Server; proxy server; firewall; semi-secure
SQL Server是一种基于C/S模式的数据库管理系统。SQL Server在两种安全级别上验证用户:登录身份验证和对数据库用户帐户和角色的许可权限。身份验证过程能够识别登录帐户的用户,并且能够验证用户是否可以与SQL Server 进行连接。如果用户通过身份验证,那么他就能够连接到SQL Server中。如果用户希望访问服务器中数据库,那么他就必须具备相关的许可权限。为了访问服务器中的数据库,数据库管理员需要为用户和角色指定特定的许可权限,许可权限控制用户在SQL Server数据库中所能进行的操作。
校园网或企事业单位内部的数据安全在企业分布式运算架构中有许多设定及管理方式。比如可以将安全性管理嵌入到应用程序当中进行处理,也可以利用中间层来管理安全性,还可以直接利用数据库的安全管理功能对数据进行保护,这是保护数据最直接的方式,无需复杂的学习过程。
在把SQLServer应用于校园网或企事业单位内部时,局域网往往与Internet 相连,可能会受到来自Internet上的诸如黑客的攻击或病毒的入侵,使局域网中的操作系统遭到破坏,或使应用程序、数据遭到破坏,因此除上述安全管理方式之外,用户还必须考虑一些附加的安全问题。为了给多用户或计算机提供安全配置方案,可以考虑使用组策略;为了保护企业内部网络不受到未授权外部访问,可以考虑使用代理服务器、防火墙和路由器等;为了保护数据包不受到非法读取,可以利用在线加密工具对数据进行加密处理。笔者在校园网的建设和管理中积累了一定的经验,仅以Windows 2000为例说明实现以上技术的方法。
1 利用组策略保证SQLServer的安全性
在Windows 2000操作系统中,用户可以利用组策略来定义用户和计算机的配置,使其满足一定的分组要求。用户可以利用组策略来配置多种选项,其中包括:基于注册表的策略、安全选项、软件安装。用户能够进行安全配置的选项主
要包括:
(1)帐户策略帐户策略是一种Windows 2000域中的计算机安全配置,主要包括:密码策略、锁定策略、Kerberos策略。
(2)受限组通过利用受限组,系统管理员能够对一些安全敏感组(如Enterprise Administrators组或Payroll组)强制实施安全策略。
(3)软件策略用户能够利用组策略定义自动应用于用户和计算机的默认配置。这些配置能够确定某些安全选项,并且能够控制特定用户组使用的软件种
类。
2 利用代理服务器、防火墙和路由器保证SQLServer的安全性
如果用户将SQLServer连接到Internet,那么还需要考虑其他一些安全问题。您应当确保只有授权用户才能访问数据库服务器,并且他们只能访问业务处
理过程所需的资源。
2.1 通过Microsoft Proxy Server连接到SQLServerServer
通过MicrosoftProxy Server,用户也可以连接到SQL Server。MicrosoftProxy Server是一种独立的应用程序,他能够使得进出Internet的访问活动更加安全,并且阻止未授权用户连接到用户私有网络中。通过控制全部的许可权限以及对监听端口的访问,Proxy Server可以保证敏感数据的安全性。
2.2 防火墙安全
防火墙是保护系统免受用户攻击的最有效的方法之一。通过授权给Windows 用户,或者禁止数据通过TCP/IP端口传送,防火墙能够控制2个方向上的访问。
此外,防火墙还能够分析用户网络与Internet之间的全部通信流量。
通过利用Proxy Server的防火墙安全特性,用户可以控制进出Proxy Server 的信息流。Proxy Server支持输入和输出报文过滤,他可以动态地确定哪些数据包能够被传送到内部网络或应用层代理服务器中。这种方法使得两个方向上暴露的端口数目最少,并且高度保证了用户网络的安全性。
Web站点通常使用端口80,为了便于Internet用户能够访问您的Web站点,您需要启用该端口。如果网站只利用ASP和其他服务器方脚本机制访问SQLServer中的数据,并且将返回结果以HTML形式返回给客户端,那么您就不
必启用其他端口。
许多基于Web的应用程序都使用2个防火墙。第一个防火墙将Web服务器与Internet相隔离,并且只允许通过端口80访问Web服务器,Web服务器位于称为边界网络的亚安全(semi-secure)区域;为了访问SQLServer数据库,用户还必须通过边界网络和企业网络之间的第二个防火墙。Internet号码分配机构(IANA)为SQLServer分配的套接字号为1433,用户可以通过设置注册表键来更改他。当配置利用TCP/IP协议访问SQLServer的时候,用户需要使数据通过端口1433进行传送。当启动SQLServer命名实例的时候,该实例将自动分配一个端口,但如果用户希望命名实例使用代理服务,那么就应当覆盖上述配置,并且利用SQLServer网络实用工具为命名实例分配某个固定端口。如果需要通过COM+进行通信,那么还必须启用端口135;同时,还需要启用COM+协议与客户
端协商连通性过程中的可用端口范围。
2.3 路由器
通过利用内置于Windows 2000服务器中的路由特性,服务器可以担当路由器的任务。路由器(或网关)是一种在网络间转发IP数据包的设备,通过将路由器与防火墙结合利用,可以对数据进出用户网络的方式进行配置。
3 利用在线加密保护数据安全性
在通过网络或Internet传送数据包的时候,如果数据包受到拦截访问,那么用户必须保证其他用户不能读取这些数据包中的信息。
(1)IPSec协议
为了保护网络通信中的数据安全性,Windows 2000融合了IPSec协议。IPSec 协议是一套Internet安全标准的统称,这些标准使用加密安全服务来提供。
①可信度。
②身份验证。
③数据完整性。
对于每个域或每台本地计算机,用户可以通过定义规则和筛选集合的方式来配置具体的IPSec安全策略,这些规则和筛选用对与指定IPSec客户之间的安全
通信进行控制。
(2)安全套接字层
SQLServer2000支持使用安全套接字层(SSL)对客户计算机和SQLServer
实例间的所有网络通讯进行加密。
SSL加密仅适用于运行于获得公共证书颁发机构(CA)证书的计算机上的SQLServer 2000实例。在共享敏感信息之前,服务器证书必须允许客户证书确定服务器的身份。客户证书包含请求服务器访问的客户端的专有信息。证书中的信息主要用于数据加密,这使得只有服务器和客户端能够破解加密的数据信息。
利用SQLServer网络实用工具,用户可以对所有已启用的服务器协议进行SSL加密。用户只能对所有已启用的服务器协议同时启用或禁止SSL加密,而不
能针对特定协议指定SSL加密。
SQLServer查询今天-昨天-本周-本月的记录
在统计的时候,经常会使用SQL查询今天、昨天、本月、本周的记录,我将这些常用的sql语句写在这里。 SQL查询今天的记录: datediff(day,[Datetime],getdate())=0 把Datetime换为你的相应字段; SQL查询昨天的记录: datediff(day,[Datetime],getdate())=1 把Datetime换为你的相应字段,getdate()-Datetime即为时间差。 本月记录: SELECT * FROM 表WHERE datediff(month,[dateadd],getdate())=0 本周记录: SELECT * FROM 表WHERE datediff(week,[dateadd],getdate())=0 本日记录: SELECT * FROM 表WHERE datediff(day,[dateadd],getdate())=0 GetDate函数的使用方法 函数参数/功能 GetDate( ) 返回系统目前的日期与时间 DateDiff (interval,date1,date2) 以interval 指定的方式,返回date2 与date1两个日期之间的差值date2-date1 DateAdd (interval,number,date) 以interval指定的方式,加上number之后的日期 DatePart (interval,date) 返回日期date中,interval指定部分所对应的整数值 DateName (interval,date) 返回日期date中,interval指定部分所对应的字符串名称 更多信息请查看IT技术专栏
同步两个数据库中两个表的示例
同步两个数据库中两个表的示例 测试环境及同步要求: 有数据库服务器srv1和srv2,两台电脑能互相访问,有数据 srv1.库名..author有字段:id,name,phone, srv2.库名..author有字段:id,name,telphone,adress 要求: srv1.库名..author增加记录则srv2.库名..author记录增加 srv1.库名..author的phone字段更新,则srv2.库名..author对应字段telphone更新~--*/ --大致的处理步骤 --1.在srv1 上创建连接服务器,以便在srv1 中操作srv2,实现同步 exec sp_addlinkedserver 'srv2','','SQLOLEDB','srv2的sql实例名或ip' exec sp_addlinkedsrvlogin 'srv2','false',null,'用户名','密码' go --2.在srv1 和srv2 这两台电脑中,启动msdtc(分布式事务处理服务),并且设置为自动启动 我的电脑--控制面板--管理工具--服务--右键Distributed Transaction Coordinator--属性--启动--并将启动类型设置为自动启动 go --3.实现同步处理 --a.在srv1..author中创建触发器,实现数据即时同步 --新增同步 create trigger tr_insert_author on author for insert as set xact_abort on --如果执行Transact-SQL 语句产生运行时错误,则整个事务将终止并回滚。 insert srv2.库名.dbo.author(id,name,telphone) select id, name, telphone from inserted go --修改同步 create trigger tr_update_author on author for update as set xact_abort on
实验SqlServer的基本操作
§3.1实验一Sql Server2005的基本操作(2学时) 3.1.1 实验目的 1.熟悉SQL Server2005企业版的安装过程。 2.了解企业管理器的功能,掌握企业管理器的操作方法。 3.掌握数据库服务器的注册、配置、连接等操作。 3.1.2 实验内容和步骤 上机前先阅读本实验的详细内容,简要了解SQL SERVER2005,并完成以下操作: 1. SQL Server2005的安装 参考详细内容进行安装,在安装过程中记录安装的选择,并且对所作的选择进行思考,为何要进行这样的配置,对今后运行数据库系统会有什么影响。 2.启动和停止服务 3.启动SQL Server Management Studio 4.查看数据库属性,了解数据文件、事务日志、权限 注意事项: 1.安装时选择混合方式登录; 2.赋予sa密码。
实验一Sql Server2005的基本操作(详解) 一、安装 下面以Windows xp平台为例,介绍如何安装SQL Server 2005个人开发版。 1.根据安装机器软硬件的要求,选择一个合适的版本,以下以开发版为例 2.将SQL Server 2005 DVD 插入DVD驱动器。如果DVD驱动器的自动运行功能无法启动安装程序无法启动安装程序,请导航到DVD的根目录然后启动splash.hta。 3.在自动运行的对话框中,单击“运行SQL Server 安装向导”。 4.在“最终用户许可协议”页上,阅读许可协议,再选中相应的复选框以接受许可条款和条件。接受许可协议后即可激活“下一步”按钮。若要继续,请单击“下一步”若要结束安装程序,请单击“取消”。如下图: 5.在“SQL Server 组件更新”页上,安装程序将安装SQL Server 2005 的必需软件。有关组件要求的详细信息,请单击该页底部的“帮助”按钮。若要开始执行组件更新,请单击“安装”。更新完成之后若要继续,请单击“完成”。
SQL数据库多表联查等
--单元格中NULL/null/''/' '的区别 select * from [Student] where [Address]='' select [StudentNo] '学号',[Phone] as '电话','性别'=[sex] from [Student] where [sex]='女' select [StudentNo],[Phone] from [Student] where [sex]='女' select [Address] from [Student] where [StudentName] like '张__' and [Sex]='女' select * from [Student] where [BornDate] >'1989/12/31' and [BornDate] <'2000/01/01' and [Sex]='女' select [Student].*,[Grade].[GradeId] from [Student],[Grade] where [Student].[GradeId]=[Grade].[GradeId] and [Grade].[GradeName]='大一' --笛卡尔集(无脑链接,后筛选) select s.* from [Student] s,[Grade] g where s.[GradeId]=g.[GradeId] and g.[GradeName]='大一' --内连接(边链接,边筛选) select s.* from [Student] s inner join [Grade] g on s.[GradeId]=g.[GradeId] where g.[GradeName]='大一' --常量列 select '北京大学' as '学校' from [Student] select TOP 3* from [Student] select * from [Result] order by [StudentResult] desc --三表连查(有语文成绩的学生的学号) select s.* from [Student] s inner join [Result] r on s.[StudentNo]=r.[StudentNo] inner join [Subject] t on r.[SubjectId]=t.[SubjectId] where t.[SubjectName]='语文' --查询按日期由前到后,成绩由高到低,查询参加.net考试的信息 select r.* from [Result] r inner join [Subject] su on r.[SubjectId]=su.[SubjectId] where su.[SubjectName]='.net' order by r.[StudentResult] desc ,r.[ExamDate] --查询年纪最小的学生的姓名和年级 select s.[StudentName],g.[GradeName] from [Student] s inner join [Grade] g on s.[GradeId]=g.[GradeId] where s.BornDate =(select MAX(BornDate) from [Student]) --查询学号为‘20110001’的学生参加过的所有考试信息,并按照实际前后排序
sqlserver数据库连接错误解决方案
日志总结 项目搭建 一、项目搭建: 1、先把所需的j a r全部找到,导入l i b中。 2、把数据库的驱动包(所需包根据所选数据库而定)导入。 3、设置配置文件 4、建立测试类 二、项目搭建,测试时的错误: j a v a.l a n g.I l l e g a l S t a t e E x c e p t i o n: F a i l e d t o l o a d A p p l i c a t i o n C o n t e x t C a u s e d b y: o r g.s p r i n g f r a m e w o r k.b e a n s.f a c t o r y.B e a n C r e a t i o n E x c e p t i o n:E r r o r c r e a t i n g b e a n w i t h n a m e'u s e r D a o':I n j e c t i o n o f r e s o u r c e d e p e n d e n c i e s f a i l e d;n e s t e d e x c e p t i o n i s o r g.s p r i n g f r a m e w o r k.b e a n s.f a c t o r y.B e a n C r e a t i o n E x c e p t i o n:E r r o r c r e a t i n g b e a n w i t h n a m e's e s s i o n F a c t o r y'd e f i n e d i n c l a s s p a t h r e s o u r c e [a p p l i c a t i o n C o n t e x t-c o m m o n.x m l]: I n v o c a t i o n o f i n i t m e t h o d f a i l e d;n e s t e d e x c e p t i o n i s j a v a.l a n g.A b s t r a c t M e t h o d E r r o r: c o m.m i c r o s o f t.j d b c.b a s e.B a s e D a t a b a s e M e t a D a t a.s u p p o r t s G e t G e n e r a t e d K e y s()Z C a u s e d b y: o r g.s p r i n g f r a m e w o r k.b e a n s.f a c t o r y.B e a n C r e a t i o n E x c e p t i o n:E r r o r c r e a t i n g b e a n w i t h n a m e's e s s i o n F a c t o r y'd e f i n e d i n c l a s s p a t h r e s o u r c e [a p p l i c a t i o n C o n t e x t-c o m m o n.x m l]: I n v o c a t i o n o f i n i t m e t h o d f a i l e d;n e s t e d e x c e p t i o n i s j a v a.l a n g.A b s t r a c t M e t h o d E r r o r: c o m.m i c r o s o f t.j d b c.b a s e.B a s e D a t a b a s e M e t a D a t a.s u p p o r t s G e t G e n e r a t e d K e y s()Z C a u s e d b y: j a v a.l a n g.A b s t r a c t M e t h o d E r r o r: c o m.m i c r o s o f t.j d b c.b a s e.B a s e D a t a b a s e M e t a D a t a.s u p p o r t s G e t G e n e r a t e d K e y s()Z 解决方案: Caused by: https://www.360docs.net/doc/ef9091936.html,ng.AbstractMethodError: com.microsoft.jdbc.base.BaseDatabaseMetaData.supportsGetGeneratedKeys()Z
软件连接不上SQLSERVER数据库的排查方法
关于软件连接不上sqlserver数据库的排查方法更新版 1、数据库安装不完整 安装完成后在configuration Manager 中查看是否有安装服务 如下图,如若没有SQL Server 200X服务图标则说明服务没有安装成功,需要卸载重装 2、数据库服务没有启动 在开始栏输入service.msc查看服务,然后找到SQL Server (
如果服务是启动类型是手动,且未启动,将启动类型改为自动,然后点击启动,让服务启动 3、TCP/IP设置错误 点开MSSQLERVER协议,看TCP/IP是否启用 若已启用点击TCP/IP,进入TCP/IP设置,看TCP端口和IP是否启用,若IP1-4都未启用,改
为启用,并应用,然后重启数据库服务 4、数据库用户名权限低或者browser服务未启动 当安装软件时配置数据库成功,安装完软件,按提示重启电脑后,测试连接数据库失败,进入数据库中查看,数据库中没有写入表 (1)在configuration中启动browser 服务或者到外围应用配置器中启动browser 服务
(2)查看配置数据库所用用户名权限
可用windows身份验证登录数据库,给用户名增加权限,勾选所有权限,如果增加权限不成功,则新增一个用户名再添加权限,再在软件安装目录下zkeco\units\adms\attsite.ini文件中更改原数据库配置的用户名及密码,然后再测试连接数据库 5、attsite.ini配置文件出错 zkeco\units\adms\attsite.ini 文件为空,或者显示乱码也会造成连接数据库失败,解决方法是在安装包同个文件夹下找到attsite.ini,替换进去,然后将端口号及数据库配置更改为自己所需要的,保存,重启服务 6、外部因素导致连接失败 有时在电脑防火墙、安全软件的阻止下,软件连接数据库也会失败,需将防火墙、安全软件关闭再测试连接。 7、配置数据库信息填写错误
SQLServer 2008以上误操作数据库恢复方法
SQLServer 2008以上误操作数据库恢复方法——日志尾部备份 问题: 经常看到有人误删数据,或者误操作,特别是update和delete的时候没有加where,然后就喊爹喊娘了。人非圣贤孰能无过,做错可以理解,但不能纵容,这个以后再说,现在先来解决问题。遇到这种情况,一般都是没有做备份,不然也不会来发问了。首先要冷静,否则会有更大的灾难。直到你放弃。 解决方法: 对于这类问题,主要是找回误操作之前的数据,在2008之前,有个很出名的工具Log Exploer,听说还挺好用的,这个网上大把教程,这里就不多说了。但是唯一遗憾的是,不支持2008及更高版本,这时除了其他第三方工具,那么最常用的就是本文提到的方法——日志尾部备份。本文实验环境2008R2,对于2008及其以上版本可以使用这个方法,其实2005也可以,2000很少用,没试过,只是2008之前可以使用Log Exploer,所以就没必要用这种方法。 下面图文并茂讲解操作方法,至于原理,不属于本文范围,而且我相信真遇到误操作的时候,估计没人会看原理了。 步骤: (1)、检查数据库的恢复模式,如图:
或者使用脚本检查: 1.SELECT recovery_model,recovery_model_desc 2.FROM sys.databases 3.WHERE name='AdventureWorks' 结果如下: 确保数据库的恢复模式最起码不能为【简单】。至于如何修改成完整模式,我觉得这些应该没必要多说了。 切记,对于任何重要环境,不仅仅是客户正式环境(俗称生产环境),都强烈建议使用【完整恢复模式】,虽然对于另外两种(大容量日志(BULK_LOGGED)、简单(SIMPLE))来说,完整恢复模式产生的日志会大,但是在出现问题的时候,就会觉得这些都不算什么了。并且我也想不到任何理由对于正式环境不使用完整恢复模式。只要管理得当,完整恢复模式的日志也不会太变态。 (2)、这里其实隐含另外一步,曾经做过最少一次的完整备份。因为所有类型的备份都基于完整备份,如果没有最少一次完整备份,其他类型的备份都是多余的,所以在这里强调一下,在创建完一个新数据库之后,强烈建议甚至强制做一次完整备份。 1.SELECT database_name,recovery_model,name 2.FROM msdb.dbo.backupset 使用上面的语句粗略可以看到有那些数据库做过备份,由于测试,所以做了几次备份,可以看到我这个时间点已经做了备份了。 (3)、确保别人不再连接数据库,然后做一次日志尾部备份: 首先先创建一点数据: [sql]view plaincopyprint?
MySQL数据库多表连接_笛卡尔积
多表关联 内联接 外联接 左外联接 右外连接 全外连接 自然联接 内联接 表1 inner join 表2 on 表1和表2的关联条件 Where 和连接性区别? Where是在from直接取得结果集基础上再使用where条件进行数据过滤(2次)连接性是在from取数据时直接使用on后连接条件进行数据过滤(1次)
交叉集(笛卡尔积) 数据库笛卡尔积什么含义?原理是什么? 假设两个表关联,获取左表数据和右表数据有关联,右表数据也和左表数据有关联的数据。 左外连接 表1 left [outer] outer可省join 表2 on 表1和表2连接条件 假设两个表关联,左表数据全部取出,右表数据只取出和左表数据有关联的数据。
右外连接 表1 right[outer] outer可省join 表2 on 表1和表2连接条件 假设两个表关联,右表数据全部取出,左表数据只取出和右表数据有关联的数据。 Natural 不用写表连接条件,数据库自动匹配 主外键字段名称必须一致
Union all 使用union把两个查询结果集纵向拼接
Select ‘蔬菜’as ‘购物种类’ ,sc_fl as ‘分类’,sc_jg as ‘购买价格’ From sc Union Select ‘调料’as ‘购物种类’,tl_fl as ‘分类’,tl_jg as ‘购买价格’From tl union Select ‘合计’as ‘购物种类’,’’as ‘分类’,sum(test.price) as ‘购买价格’from ( Select ‘蔬菜’,sc_fl,sc_jg as price From sc Union Select ‘调料’,tl_fl,tl_jg as price From tl ) as test
sqlserver数据库连接失败错误及解决方法
SQL Server数据库连接失败错误及解决方法 在使用SQL Server 的过程中,用户遇到的最多的问题莫过于连接失败了。一般而言,有以下两种连接SQL Server 的方式,一是利用SQL Server 自带的客户端工具,如企业管理器、查询分析器、事务探查器等;二是利用用户自己开发的客户端程序,如ASP 脚本、VB程序等,客户端程序中又是利用ODBC 或者OLE DB 等连接SQL Server。下面,我们将就这两种连接方式,具体谈谈如何来解决连接失败的问题。 一、客户端工具连接失败 在使用SQL Server 自带的客户端工具(以企业管理器为例)连接SQL Server时,最常见的错误有如下一些: 1、SQL Server 不存在或访问被拒绝 ConnectionOpen (Connect()) 2、用户'sa'登录失败。原因:未与信任SQL Server 连接相关联。
3、超时已过期。 下面我们依次介绍如何来解决这三个最常见的连接错误。 第一个错误"SQL Server 不存在或访问被拒绝"通常是最复杂的,错误发生的原因比较多,需要检查的方面也比较多。一般说来,有以下几种可能性: 1、SQL Server名称或IP地址拼写有误; 2、服务器端网络配置有误; 3、客户端网络配置有误。 要解决这个问题,我们一般要遵循以下的步骤来一步步找出导致错误的原因。 首先,检查网络物理连接: ping <服务器IP地址> 或者 ping <服务器名称> 如果ping <服务器IP地址> 失败,说明物理连接有问题,这时候要检查硬件设备,如网卡、HUB、路由器等。还有一种可能是由于客户端和服务器之间安装有防火墙软件造成的,比如ISA Server。防火墙软件可能会屏蔽对ping、telnet 等的响应,因此在检查连接问题的时候,我们要先把防火墙软件暂时关闭,或者打开所有被封闭的端口。
SQLServer连接不通解决方案
系统连接sqlserver数据库问题解决方案 一、首先检查 1、网络不通,不能ping通服务器。检查HUB或路由器是否正常工作。检查其它机子是否网络通。检查网线的可能性问题。本地连接是否启用? 2、检查防火墙是否把起点软件拦截了。XP系统自带有防火墙可能阻止了软件访问网络。 3、数据库服务是否启动。 4、数据库有无更改密码。 5、数据库中是否存在当前连接的用户数据库。 二、根据软件错误提示检查 以上问题检查无误的话,首先注意连接不上时的提示,起点软件在连接不上数据库时会有一个连接提示错误信息。 1"SQL Server 不存在或访问被拒绝" 这个问题是最常见的,通常是XP2的操作系统+MS SQL SERVER 2000的配置情况下出现这种问题。这个是最复杂的,错误发生的原因比较多,需要检查的方面也比较多。 一般说来,有以下几种可能性: 1,SQL Server名称或IP地址拼写有误 2,服务器端网络配置有误 3,客户端网络配置有误 要解决这个问题,我们一般要遵循以下的步骤来一步步找出导致错误的原因: 首先,检查网络物理连接 ping <服务器IP地址/服务器名称> 如果ping <服务器IP地址> 不成功,说明物理连接有问题,这时候要检查硬件设备,如网卡,HUB,路由器等。
还有一种可能是由于客户端和服务器之间安装有防火墙软件造成的,比如ISA Server。防火墙软件可能会屏蔽对ping,telnet 等的响应 因此在检查连接问题的时候,我们要先把防火墙软件暂时关闭,或者打开所有被封闭的端口。 如果ping <服务器IP地址> 成功而,ping <服务器名称> 失败 则说明名字解析有问题,这时候要检查DNS 服务是否正常。 有时候客户端和服务器不在同一个局域网里面,这时候很可能无法直接使用服务器名称来标识该服务器,这时候我们可以使用HOSTS文件来进行名字解析, 具体的方法是: 1。使用记事本打开HOSTS文件(一般情况下位于C:\WINNT\system32\drivers\etc)。 添加一条IP地址与服务器名称的对应记录,如: 172。168。10。24 myserver 2。或在SQL Server 的客户端网络实用工具里面进行配置,后面会有详细说明。 其次,使用telnet 命令检查SQL Server服务器工作状态 telnet <服务器IP地址> 1433 如果命令执行成功,可以看到屏幕一闪之后光标在左上角不停闪动,这说明SQL Server 服务器工作正常,并且正在监听1433端口的TCP/IP 连接 如果命令返回"无法打开连接"的错误信息,则说明服务器端没有启动SQL Server 服务, 也可能服务器端没启用TCP/IP 协议,或者服务器端没有在SQL Server 默认的端口1433上监听。 接着,我们要到服务器上检查服务器端的网络配置,检查是否启用了命名管道。是否启用了TCP/IP 协议等等,可以利用SQL Server 自带的服务器网络使用工具来进行检查。 点击:程序Microsoft SQL Server 服务器网络使用工具,打开该工具后,在"常规"中可以看到服务器启用了哪些协议。 一般而言,我们启用命名管道以及TCP/IP 协议。 点中TCP/IP 协议,选择"属性",我们可以来检查SQK Server 服务默认端口的设置
SQLSERVER排查阻塞
SQL Server允许并发操作,BLOCKING是指在某一操作没有完成之前,其他操作必须等待,以便于保证数据的完整性。BLOCKING的解决方法要查看BLOCKING的头是什么,为什么BLOCKING头上的语句执行的很慢。通常来讲只要我们能找到BLOCKING头上的语句,我们总能够想出各种各种的办法,来提升性能,缓解或解决BLOCKING的问题。 但是问题的关键是,我们不知道BLOCKING什么时候会发生。用户跟我们抱怨数据库性能很差,等我们连上数据库去查看的时候,那时候有可能BLOCKING可能就已经过去了。性能又变好了。或者由于问题的紧急性,我们直接重新启动服务器以恢复运营。但是问题并没有最终解决,我们不知道下次问题会在什么时候发生。 BLOCKING问题的后果比较严重。因为终端用户能直接体验到。他们提交一个订单的时候,无论如何提交不上去,通常几秒之内能完成的一个订单提交,甚至要等待十几分钟,才能提交完成。更有甚者,极严重的BLOCKING能导致SQL Server 停止工作。如下面的SQL ERRORLOG所表示, 在短短的几分钟之内,SPID数据从158增长到694, 并马上导致SQL Server打了一个dump, 停止工作。我们很容易推断出问题的原因是由于BLOCKING导致的,但是我们无法得知BLOCKING HEADER是什么,我们必须要等下次问题重现时,辅之以工具,才能得知BLOCKING HEADER在做什么事情。如果信息抓取时机不对,我们可能要等问题发生好几次,才能抓到。这时候,客户和经理就会有抱怨了。因为我们的系统是生产系统,问题每发生一次,都会对客户带来损失。 2011-06-01 16:22:30.98 spid1931 Alert There are 158 Active database sessions which is too high. 2011-06-01 16:23:31.16 spid3248 Alert There are 342 Active database sessions which is too high. 2011-06-01 16:24:31.06 spid3884 Alert There are 517 Active database sessions which is too high. 2011-06-01 16:25:31.08 spid3688 Alert There are 694 Active database sessions which is too high. 2011-06-01 16:26:50.93 Server Using 'dbghelp.dll' version '4.0.5' 2011-06-01 16:26:50.97 Server **Dump thread - spid = 0, EC = 0x0000000000000000 2011-06-01 16:26:50.97 Server ***Stack Dump being sent to D:\MSSQL10.INSTANCE\MSSQL\LOG\SQLDump0004.txt 2011-06-01 16:26:50.97 Server * *******************************************************************************
SQLServer 附加数据库后出现只读或失败的解决方法
解决此问题的几个关键点如下: 1、该现象只会出现在NTFS文件系统中。 2、由NTFS文件系统的访问权限导致。 一般手工操作的解决方案如下: 1、控制面板—>文件夹选项—>查看关闭“使用简单文件共享(推荐)” 2、选择存放数据库文件的文件夹,右键选择属性,这时会多出一个“安全”选项卡,选择最后一个用户,将该用户的权限设为“完全控制”。
经过这两步操作后,数据库附加失败或附加后只读的问题即可解决。 下面重点讲这两步,用C#代码的实现,因为当我们为项目打包后,不可能让用户手工来执行这些操作 1、C#关闭简单文件共享的代码实现 在百度、Google搜索此问题解决方法时,很多的操作方法并不正确,经过自己实际操作测试,正确方法如下: 注册表文件: Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa] "forceguest"=dword:00000000 批处理: reg add HKLM\SYSTEM\CurrentControlSet\Control\Lsa /v forceguest /t REG_WORD /d 0x00000000 /f 如果选中此项,则将上述 0x00000000 改为 0x00000001。 通过修改注册表的方式实现代码如下: Microsoft.Win32.RegistryKey key = Microsoft.Win32.Registry.LocalMachine; Microsoft.Win32.RegistryKey software =
SQLServer数据查询的优化方法
SQLServer数据查询的优化方法聂文燕 摘要:SQLServer是一种功能强大的数据库管理系统,许多数据库应用系统都是以它作为后台数据库。本文在分析影响SQLSERVER数据查询效率的因素的基础上,提出了几种优化数据查询的方法。 关键词:SQLServer,数据,查询,优化 一、引言 SQLServer是是由微软公司开发的基于Windows操作系统的关系型数据库管理系统,它是一个全面的、集成的、端到端的数据解决方案,为企业中的用户提供了一个安全、可靠和高效的平台用于企业数据管理和商业智能应用。目前,许多中小型企业的数据库应用系统都是用SQLServer作为后台数据库管理系统设计开发的。设计一个应用系统并不难,但是要想使系统达到最优化的性能并不是一件容易的事。根据多年的实践,由于初期的数据库中表的记录数比较少,性能不会有太大问题,但数据积累到一定程度,达到数百万甚至上千万条,全面扫描一次往往需要数十分钟,甚至数小时。20%的代码用去了80%的时间,这是程序设计中的一个著名定律,在数据库应用程序中也同样如此。如果用比全表扫描更好的查询策略,往往可以使查询时间降为几分钟。而且我们知道,目前数据库系统应用中,查询操作占了绝大多数,查询优化成为数据库性能优化最为重要的手段之一。 二、影响查询效率的因素 SQLServer处理查询计划的过程是这样的:在做完查询语句的词法、语法检查之后,将语句提交给SQLServer的查询优化器,查询优化器通过检查索引的存在性、有效性和基于列的统计数据来决定如何处理扫描、检索和连接,并生成若干执行计划,然后通过分析执行开销来评估每个执行计划,从中选出开销最小的执行计划,由预编译模块对语句进行处理并生成查询规划,然后在合适的时间提交给系统处理执行,最后将执行结果返回给用户。所以,SQLServer中影响查询效率的因素主要有以下几种:1.没有索引或者没有用到索引。索引是数据库中重要的数据结构,使用索引的目的是避免全表扫描,减少磁盘I/O,以加快查询速度。 2.没有创建计算列导致查询不优化。 3.查询出的数据量过大(可以采用多次查询,其他的方法降低数据量)。 4.返回了不必要的行和列。 5.查询语句不好,没有优化。其中包括:查询条件中操作符使用是否得当;查询条件中的数据类型是否兼容;对多个表查询时,数据表的次序是否合理;多个选择条件查询时,选择条件的次序是否合理;是否合理安排联接选择运算等。 三、SQLServer数据查询优化方法 3.1建立合适的索引索引是数据库中重要的数据结构,它的根本目的就是为了提高查询效率。当根据索引码的值搜索数据时,索引提供了对数据的快速访问。事实上,没有索引,数据库也能根据SELECT语句成功地检索到结果,但随着表变得越来越大,使用“适当”的索引的效果就越来越明显。索引的使用要恰到好处,其使用原则有: (1)对于基本表,不宜建立过多的索引; (2)对于那些查询频度高,实时性要求高的数据一定要建立索引,而对于其他的数据不考虑建立索引; (3)在经常进行连接,但是没有指定为外键的列上建立索引; (4)在频繁进行排序或分组(即进行groupby或orderby操作)的列上建立索引;
数据库表连接(内外、左右连接)
数据库表连接类型 一、SQL中的表连接 在关系数据库管理系统中,表建立时各数据之间的关系不必确定,常把一个实体的所有信息存放在一个表中。当检索数据时,通过连接操作查询出存放在多个表中的不同实体的信息。连接操作给用户带来很大的灵活性,他们可以在任何时候增加新的数据类型。为不同实体创建新的表,尔后通过连接进行查询。 连接可以在SELECT 语句的FROM子句或WHERE子句中建立,似是而非在FROM 子句中指出连接时有助于将连接操作与WHERE子句中的搜索条件区分开来。所以,在Transact-SQL中推荐使用这种方法。 SQL-92标准所定义的FROM子句的连接语法格式为: FROM join_table join_type join_table [ON (join_condition)] 其中join_table指出参与连接操作的表名,连接可以对同一个表操作,也可以 对多表操作,对同一个表操作的连接又称做自连接。 join_type 指出连接类型,可分为三种:内连接、外连接和交叉连接。内连接(INNER JOIN)使用比较运算符进行表间某(些)列数据的比较操作,并列出这些表中与连接条件相匹配的数据行。根据所使用的比较方式不同,内连接又分为等值连接、自然连接和不等连接三种。外连接分为左外连接(LEFT OUTER JOIN或LEFT JOIN)、右外连接(RIGHT OUTER JOIN或RIGHT JOIN)和全外连接(FULL OUTER JOIN或FULL JOIN)三种。与内连 接不同的是,外连接不只列出与连接条件相匹配的行,而是列出左表(左外连接时)、右表(右外连接时)或两个表(全外连接时)中所有符合搜索条件的数据行。 交叉连接(CROSS JOIN)没有WHERE 子句,它返回连接表中所有数据行的笛卡 尔积,其结果集合中的数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。 连接操作中的ON (join_condition) 子句指出连接条件,它由被连接表中的 列和比较运算符、逻辑运算符等构成。 无论哪种连接都不能对text、ntext和image数据类型列进行直接连接,但可以对这三种列进行间接连接。 下面结合案例说明,假设有如下表:
SQLServer类型与Java类型转换问题解决
ResultSet 接口提供用于从当前行获取列值的获取方法(getBoolean、getLong 等)。可以使用列的索引编号或列的名称获取值。一般情况下,使用列索引较为高效。列从 1 开始编号。为了获得最大的可移植性,应该按从左到右的顺序读取每行中的结果集列,每列只能读取一次。 对于获取方法,JDBC 驱动程序尝试将底层数据转换为在获取方法中指定的 Java 类型,并返回适当的 Java 值。JDBC 规范有一个表,显示允许的从 SQL 类型到ResultSet 获取方法所使用的 Java 类型的映射关系。 用查询从包含 sqlvariant 数据类型列的表中检索数据,则会发生异常。 Getter 方法转换
基于 SQL Server 2005 的数据类型,以下图表包含 SQLServerResultSet 类的get
查询SQLServer正在执行的语句
查询,统计股票主要财务数据,查询Oracle正在执行的SQL语句,查询python模块的帮助文档,查询SQLServer正在执行的语句 查找/etc/passwd下bash为/bin/bash用户的数,查找两个有序数组中的中位数,查找数组中最大值最小值的另一种思路 [代码] [C/C++]代码 #include
//c#删除指定文件夹下的文件方法封装 //C#设置开机启动程序 [代码] [C/C++]代码 #include SQL多表连接 应用背景 数据库是由多张表组成的存储结构,并通过多张表之间的关系建立起完整的有效的数据存储形式,形成关系型数据库。作为数据查询语言SQL,提供了功能强大的数据表连接查询功能,使多张表格之间形成有效的数据联系,使得关系数据库在大型数据库应用中占据了主角地位。 一个普通的大型数据库应用程序所使用的数据库中,有多达几百张表的数据,那么如何将这些表高效的有机的联系起来,就成为设计关系数据库的一个重要指标。优良的数据库设计指标包括: 1.减少数据冗余,去除掉多余的数据冗余,可以通过建立表之间的连接关系完成。 2.数据更新正确,不能因为表之间存在关系后,使得更新记录出现不正常的数据。 3.添加数据正常,添加数据过程中,应该保持数据表之间的关系,确定表之间的连接。 4.查询简便灵活,在建立数据连接的查询过程中,连接清晰简便,操作灵活准确。 数据库设计是应用软件成功与否的一项重要标志。设计数据库,除与系统分析结果,设计员的水平等有关外,还可以参考一些规范的设计范式,下面简单介绍数据库的2个基本设计范式: 1.第一范式:要求表的每列都是不可再分的简单数据项,所以1对N 关系就必须用多表表示,而不能用一张表表示。 2.第二范式:表中的每一个非主键列必须完全函数依赖于主键,就是说表中除主键之外的其他列,都必须通过主键能够唯一确定。 数据库的设计非常复杂,没有一成不变的东西,需要就地取材,解决问题,简单化问题。 知识要点 (1) 传统连接 连接就是将多个表中的数据连接到一起的查询,即连接操作可以在一个Select语句中完成从多个表中查找和处理数据,使用连接时可以使用名字相同的不同表的列,也可以不同,但要求连接的列不需可连接,即数据类型相同。 传统的连接语法如下: Select * from Tblname1 T1,Tblname2 T2 where T1.column=T2.column 连接SQL语句的明显标志为在From子句后边,有多个表Tblname1,SQL 数据库多表连接详细讲解