Sybase数据库简介(初学者必看)(1) |
| [ 作者:佚名 转贴自:网络转载 阅读次数:89 更新时间:2007-9-17 11:40:00 录入:刘光勇 ] 热 |
|
|
|
一、Sybase数据库简介 <U{;jlv=O 1.版本 7VMcoN5 1984年,Mark B. Hiffman和Robert Epstern创建了Sybase公司,并在1987年推出了Sybase数据库产品。SYBASE主要有三种版本,一是UNIX操作系统下运行的版本,二是Novell Netware环境下运行的版本,三是Windows NT环境下运行的版本。对UNIX操作系统目前广泛应用的为SYBASE 10 及SYABSE 11 for SCO UNIX。 :yc>e" 2.Sybase数据库的特点 oV[DYB?[ (1)它是基于客户/服务器体系结构的数据库 ' v:Y1 gEe 一般的关系数据库都是基于主/从式的模型的。在主/从式的结构中,所有的应用都运行在一台机器上。用户只是通过终端发命令或简单地查看应用运行的结果。 >V20BM 而在客户/服务器结构中,应用被分在了多台机器上运行。一台机器是另一个系统的客户,或是另外一些机器的服务器。这些机器通过局域网或广域网联接起来。 (Bm\ r 客户/服务器模型的好处是: _tE_,p'k ● 它支持共享资源且在多台设备间平衡负载 g',ATd'X ● 允许容纳多个主机的环境,充分利用了企业已有的各种系统 ?k?_2w> (2) 它是真正开放的数据库 W3q_'@N1 由于采用了客户/服务器结构,应用被分在了多台机器上运行。更进一步,运行在客户端的应用不必是Sybase公司的产品。对于一般的关系数据库,为了让其它语言编写的应用能够访问数据库,提供了预编译。Sybase数据库,不只是简单地提供了预编译,而且公开了应用程序接口DB-LIB,鼓励第三方编写DB-LIB接口。由于开放的客户DB-LIB允许在不同的平台使用完全相同的调用,因而使得访问DB-LIB的应用程序很容易从一个平台向另一个平台移植。 _c? IrQXG (3) 它是一种高性能的数据库 #lJLi`j: Sybase真正吸引人的地方还是它的高性能。体现在以下几方面: L]#R:&L ● 可编程数据库 sO-$>Uz 通过提供存储过程,创建了一个可编程数据库。存储过程允许用户编写自己的数据库子例程。这些子例程是经过预编译的,因此不必为每次调用都进行编译、优化、生成查询规划,因而查询速度要快得多。 ;. % bF( ● 事件驱动的触发器 6O?#s 触发器是一种特殊的存储过程。通过触发器可以启动另一个存储过程,从而确保数据库的完整性。 dBM5_3OiD ● 多线索化 >Bl)qY{ Sybase数据库的体系结构的另一个创新之处就是多线索化。一般的数据库都依靠操作系统来管理与数据库的连接。当有多个用户连接时,系统的性能会大幅度下降。Sybase数据库不让操作系统来管理进程,把与数据库的连接当作自己的一部分来管理。此外,Sybase的数据库引擎还代替操作系统来管理一部分硬件资源,如端口、内存、硬盘,绕过了操作系统这一环节,提高了性能。 )s=5 0R5o] 3.Sybase数据库的组成 dlbl2L Sybase数据库主要由三部分组成: n]I\ (1) 进行数据库管理和维护的一个联机的关系数据库管理系统Sybase SQL Server; n7pA0 Sybase SQL Server是个可编程的数据库管理系统,它是整个Sybase产品的核心软件,起着数据管理、高速缓冲管理、事务管理的作用。 f|NK=o (2) 支持数据库应用系统的建立与开发的一组前端工具Sybase SQL Toolset; W ~Tq.x ISQL是与SQL Server进行交互的一种SQL句法分析器。ISQL接收用户发出的SQL语言,将其发送给SQL Server,并将结果以形式化的方式显示在用户的标准输出上。 (wd UR DWB是数据工作台,是Sybase SQL Toolset的一个主要组成部分,它的作用在于使用户能够设置和管理SQL Server上的数据库,并且为用户提供一种对数据库的信息执行添加、更新和检索等操作的简便方法。在DWB中能完成ISQL的所有功能,且由于DWB是基于窗口和菜单的,因此操作比ISQL简单,是一种方便实用的数据库管理工具。 `2 b APT是Sybase客户软件部分的主要产品之一,也是从事实际应用开发的主要环境。APT工作台是用于建立应用程序的工具集,可以创建从非常简单到非常复杂的应用程序,它主要用于开发基于表格(Form)的应用。其用户界面采用窗口和菜单驱动方式,通过一系列的选择完成表格(Form)、菜单和处理的开发。 {=_>4< G (3) 可把异构环境下其它厂商的应用软件和任何类型的数据连接在一起的接口Sybase Open Client/Open Server。 HZVA;vz 通过Open Client的DB-LIB库,应用程序可以访问SQL Server。而通过Open Server的SERVER-LIB,应用程序可以访问其它的数据库管理系统。 !ETY $~c @_4Rhf.}& 二、SYBASE有关概念 1MXwX2 :O` bg.h[G Sybase SQL Server是一个多库数据库系统。这些数据库包括系统数据库和用户数据库。 而不论是系统数据库还是用户数据库,都建立在数据库设备上。 h<'|RSP 1. 数据库设备 q+`KSIz'r 所有的数据库都创建在数据库设备上。所谓数据库设备,不是指一个可识别的物理设备,而是指用于存储数据库和数据库对象的磁盘原始分区或操作系统文件。增加一个新的数据库设备时,必须对这些设备“初始化”。初始化的过程就是将物理磁盘、磁盘分区或操作系统文件变为SYBASE数据库可以识别的设备。初始化数据库设备使用DISK INIT命令: )>P vJ,du DISK INIT cAm+1- On NAME=设备名, Gp42k:m{ PHYSNAME=物理设备名, @eG8(1R;q VDEVNO=虚拟设备号, |h1Bf)? SIZE=块数 g2,[JSg 其中,NAME指数据库设备名,此名将用于CREATE DATABASE和ALTER DATABASE命令。PHYSNAME是原始磁盘分区或操作系统文件名。VDEVNO是数据库设备的标识号,在SQL Server中,它必须是唯一的。SIZE的单位是2K的块,对于新创建的数据库,最小的SIZE是model数据库的尺寸,即1024个2K的块(2M)。 i?lO9_gA 例如:/*将/dev目录下400M的物理设备初始化为SYBASE的数据库设备tele114_log01*/ C c0y}~*` 1>disk init oO BKF=(# 2>name=“tele114_log01”, *!Lh4}t^x[ 3>physname=“/dev/rtelelog” GTH8DTRj 4>vdevno=4 xt(Wn' 5>size=204800 /*2Kbyte*204800=400Mbyte*/ 9%tU"1G_; 6>go &L|et&k 2、段 nQR3 Mc 数据库设备从逻辑上被划分为数据库段以允许将某一特定的对象放置在指定的段上(创建对象时指定),一数据库设备可拥有多达192个段,一段可使用255个逻辑设备上的存储空间。当用户创建一个数据库时,SQL SERVER 会自动在该数据库中创建三个段: SYSTEM、LOGSEGMENT 、DEFAULT,这三个段分别用来存储数据库的系统表、事务日志和其他数据库对象 V)HoV;lr 在数据库中创建段的步骤是: 9zkC0Lu$X x 先用Disk init 初始化物理设备 9MHe,bnd( x 通过使用Create database 和alter database 的on 子句,使数据库设备对数据库可用,于是新设备自动增加到数据库的default 和system段。 LR.f s|G_ 一旦数据库设备存在并对数据库可用,使用存储过程Sp_addsegment 定义数据库的段。语法如下: L0ue K6; Sp_addsegment 段名,数据库名,设备名 ^{Nfu` 3、 系统数据库 _ :1XkuRy 安装Sybase数据库时自动生成的下列系统数据库: ts= r# ● 主数据库master; xg{yxhtlT ● 模型数据库model; )\( ^b\ ● 系统过程数据库sybsystemprocs; ]k6lQ>km,u ● 临时数据库tempdb。 NZXB`57e 也可选择下列数据库: `{|^N{X = ● 安全审核数据库sybsecurity; 4Vbzl2 ● 示例数据库pubs2; i\tk~EN@ ● 命令语法数据库sybsyntax。 #uhJ\%* (1) master数据库 KCEk#_N$\ 包含许多系统表和系统过程,从总体上控制用户数据库和SQL Server的操作,构成了SYBASE系统的数据字典。MASTER数据库主要记录信息为: \7 <>A ● 登录帐号(SQL服务器用户名);syslogins,sysremolelogins p7(^XC1P ● 正在执行的过程;sysprocesses {..KO<Ok ● 可修改的环境变量;sysconfigures -^_ \e ● 系统错误信息;sysmessages P0^b^Oo ● SQL服务器上每个数据库的信息;sysdatabases [S)3 6f ● 每个数据库占用的存储空间;sysusages (2T1?i ● 系统上安装的磁带及磁带信息;sysdevices ew2OvpR ● 活动锁信息;syslocks C0 d-Vu =_ (2) model数据库 kr WI19^r 提供了新用户数据库的初型。当我们每次用CREATE DATABASE命令 时,SQL Server都产生一个model数据库的拷贝,然后把它扩展到命令要求的尺寸。如果我们修改了model数据库,那么以后新创建的数据库都将随它而改变。下面是几个通常用到的对model数据库的改变: JB-N'Xq1 ● 增加用户数据库类型、规则或缺省; ;;>cq`4c ● 可存取SQL Server上所有数据库的用户用sp_adduser增加到model数据库上; 8{C&{ Plk ● 缺省权限(特别是guest帐号)可在model中建立; ="9"o0 x ● 诸如select into/bulkcopy那样的数据库选项可在model中设置。这些设置反映到所有新创建的数据库中。它们在model中最原始的值是关(off)。 D+jQHzXJ 在一般情况下,大多数用户无权修改model数据库,又没被授权读取。因为model中所有内容已拷贝到新数据库中,授权读model没什么意义。 z+ B%`\-| 1> use model c_ m\id 2> go >BFYrOR 3> sp_help @o|)]i)8'J 4> go :"Y1\Yoc Name Owner Object_type 5blRn]d,x --------------- --------------- ---------------------- dcx4w9Af2 sysalternates dbo system table }Jg,8]XfG syscolumns dbo system table ~sO=kfX syscomments dbo system table tU<2_RaE_ sysconstraints dbo system table RG{k0, sysdepends dbo system table P!ZI Jp T sysgams dbo system table oP!7+X |A sysindexes dbo system table K FPmU% syskeys dbo system table 8eD1c syslogs dbo system table w]5e/&< sysobjects dbo system table T>LO]6P,@ sysprocedures dbo system table cbwX.&=ppO sysprotects dbo system table XO'KxE/>s sysreferences dbo system table O?xg), E sysroles dbo system table VusjrNpV syssegments dbo system table N?9)fV;VD systhresholds dbo system table =Sh_,sMJ systypes dbo system table ;_m)< sysusermessages dbo system table ][J&a sysusers dbo system table I2yfz0D (3) sybsystemprocs数据库 V-[ 4c V 库中存储系统过程,当用户执行一存储过程(以sp_开始)时,SQL 服务器首先在用户当前数据库中搜索指定的存储过程,如果没有相应过程,则到系统过程数据库中寻找,若没有,再到MASTER数据库中寻找。 14)L$ 0QR (4)临时数据库tempdb 5=Khy-;Y 该数据库为临时表和临时工作提供了一个存储区域。临时数据库是SQL Server上所有数据库共享的工作空间。由于这些表都是临时的,所以每当用户退出或系统失败,这些表都将消失。 ,R Cn{vB (5)安全审核数据库sybsecurity )-u.hj& 数据库中保存系统的安全审核信息,它可跟踪记录每个用户的操作情况,为维护系统安全提供控制手段。 \^z.H m// (6)示例数据库pubs2 Od'(y 1tQ 为用户提供一个学习SYBASE的数据库模型。 `*"P>A (7)命令语法数据库sybsyntax CZYc~=H2/ 库中保存SYBASE数据库的命令语法及支持的语言库。 O=J"y}I$ 4、用户数据库 UT%Top;)E 用户数据库是指用Create database 命令创建的数据库。所有新的用户数据库都要在master数据库中创建,也就是说,不能存取master数据库的用户是无权创建新的数据库的。SA可以将创建数据库的权限授予其他用户。新建数据库中存在一些系统表,在sysusers表中至少有一条记录,既该数据库的创建者。数据库创建时,创建者既为该数据库的 owner, 当然创建者可以将这一地位或这一所有权用系统过程授予别的用户。 BGZSn= 5、数据库对象 1z=e"#Lb7^ (1)表(Tables) 0;7 =v&1 在一个关系数据库中,表是最重要的数据库对象,对应于关系数据库理论中关系,与DBASE或FOXPRO中的DBF文件是类似。一切数据都存放在表中。其它数据库对象都是为了用户很好地操作表中的数据。表都以一张二维表的形式存在。其中,每一列称之为一个字段,或一个域;而每一行称之为一个记录,也就是一项数据。 C}1&p{ 有一类表,它们的名字都是以sys开头的,这些表称为系统表,系统表记录着有关SQL Server的信息。在master数据库中的表大部分为系统表,这些表是随着master数据库的创建而建立的。另外,每个用户数据库在创建时都有一个系统表的子集。 Z&i2,GiLI 例如,只有在master数据库中才有的系统表有:sysconfigures、sysdatabases、sysdevices、syslogins等;在用户数据库和系统数据库中都有的系统表有:sysalternates、syscolumns、sysindexs、syslogs、sysobjects、sysusers等。 D,1fK;d6 例: :vXy\K* 1> use master p1UE_iC 2> go B6jg`h9D 3> sp_help U[I7'Gh 4> go jI a.(Md# Name Owner Object_type \*65N8IhS ------------------------------ ----------------------------------------------- ~;mVLM>O2 spt_committab dbo user table D+s<q9PTu spt_datatype_info dbo user table b|28n spt_datatype_info_ext dbo user table 9=C0s;LA/ spt_monitor dbo user table qhCS)n%C spt_server_info dbo user table h0lP#@ Q spt_values dbo user table Wq0?FB5@ sysalternates dbo system table 2Fu[`oQ_E syscharsets dbo system table +#vgG~LV syscolumns dbo system table Oyz mT YX syscomments dbo system table Sd&=V sysconfigures dbo system table <C 8mXQhR sysconstraints dbo system table GSq4W1SJZ syscurconfigs dbo system table RY<?>>b sysdatabases dbo system table Gqcu.&RG sysdepends dbo system table J}JQ/v sysdevices dbo system table ZTe o sysengines dbo system table /R{1*< sysgams dbo system table s9;u8.hz sysindexes dbo system table gZ@S iA>x syskeys dbo system table A[ayg!i^ syslanguages dbo system table AQE cA syslisteners dbo system table ^eoI syslocks dbo system table H+`tki"8 sysloginroles dbo system table `~xwb!br syslogins dbo system table rX {>:\ syslogs dbo system table \j*i__LX sysmessages dbo system table r| ;qOn;- sysmonitors dbo system table CD"v ^UJR sysobjects dbo system table zcCsH>sy sysprocedures dbo system table ?f\|FRYP" sysprocesses dbo system table 0X^BU*H sysprotects dbo system table MGVI!(93 sysreferences dbo system table WcFnDz7L sysremotelogins dbo system table t%n\Q[ sysroles dbo system table !0QrSB[ syssegments dbo system table ,U[ {w{\ sysservers dbo system table OY/tRdo syssrvroles dbo system table 7FDz/a systestlog dbo system table zAXU o&z. systhresholds dbo system table 5&lA@ i_ systypes dbo system table Inm^gm}C\ sysusages dbo system table @>fQGuK 4 sysusermessages dbo system table IN<C _^e? sysusers dbo system table $#9/&,! sp_configure dbo stored procedure Xu -tTy sp_dboption dbo stored procedure sj So L:( sp_getmessage dbo stored procedure \\CDTg~2 sp_procxmode dbo stored procedure ]rcI{pv sp_prtsybsysmsgs dbo stored procedure 2iOy63 sp_validlang dbo stored procedure _xTJ(mj 说明见附录表1 p1v;' (2)视图(Views) Ee\nkT 视图是查看一张或几张表中的数据的一种方式。通过将一张或几张表中的一部分数据进行组合得到视图。视图看上去与表非常相象,但与表还是有着本质的区别。通过视图看到的数据实际上都是存放在表中的,在数据库中仅存在视图的定义。 JW&4Y6 使用视图的好处是: +Uw#. lu$ ● 操作方便 HC2k,CwS$ ● 安全性 )QV@xTM_[ (3)索引(Index) ]F`+{ 索引是对字段生成的,用于加快数据的检索。在Sybase数据库中,索引是由系统自动管理的,也就是说,Sybase的索引操作对用户是透明的。表的索引一旦建立,系统会自动对其进行更新维护以使它与相应表对应一致;操作时,用户无须指定索引,系统会自动确定是否使用索引进行操作。 P\vp8V~>: Sybase支持三种不同类型的索引,一是复合索引,即包含几个列的索引;二是唯一性索引,即任意两行中的索引列不能有相同的取值;三是簇类索引(Clustered indexes)和非簇类索引(Nonclustered indexs),簇类索引使SQL服务器不断重排表行的物理顺序以使其与逻辑索引顺序相一致,非簇类索引则不需要表行的物理顺序与逻辑顺序一致。每个表最多只能建立一个簇类索引,非簇类索引则可建立多个。与非簇类索引相比,簇类索引的检索速度要快。应当在建立任何非簇类索引以前建立簇类索引。 Q@'&; (4)存储过程(Stored procedures) 2Yi&J 存储过程是用T-SQL语言编写成的SQL子例程,它存储于SQL服务器上供用户调用执行。与一般的SQL语句和批处理语句不同的是,存储过程是经过预编译的。当首次运行一个存储过程时,SQL Server的查询处理器将对其分析,并产生最终的执行方案。由于查询处理的大部分工作已经完成,所以以后执行存储过程时速度将会很快。执行存储过程时可带参数并可调用其他存储过程,执行完毕后返回信息以指示是否成功完成相应操作。存储过程有两种:一种是SQL服务器安装时自动建立的系统存储过程(系统过程),另一种是用户自己创建的存储过程。 m84}e%]&% 系统过程是用于系统管理,并且为用户提供了从事数据库管理的一种途径。这些系统过程都是以sp_开头的,它们都放在master数据库中且隶属于sa(系统管理员) 。也有很多可以在任一个数据库中运行的系统过程。 km#Egr9fY 常见的系统过程有: O7CDpA Sp_addgroup 在当前数据库中建立一个数据库用户组 3)VCEr!J Sp_addlogin 建立一个SQL服务器用户 ;I" Tg#A Sp_adduser 在当前数据库中增加一个用户 NmU(Jtssi sp_changegroup 改变数据库用户组 {Qv{Ud t Sp_dboption 查询或改变数据库系统设置 n%gAvM Sp_dropdevice 删除设备 .WeHuuF=i6 Sp_dropgroup 删除组 wgV*m SR Sp_droplogin 删除帐号 X'\4PK)}> Sp_help 查询数据库对象及所有数据库信息 :\w04syR Sp_helpdb 查询数据库信息 hsb%Wt Pp Sp_helpdevice 查询设备信息 *?_E-'|-O Sp_helpgroup 查询组信息 KzP7^D)T[ Sp_helpindex 查询给定表信息 !5NcAo/3?' Sp_helpuser 查询用户信息 (bQ.g2Cx Sp_lock 查询当前加锁信息 kH8' /yLa Sp_monitor 查询SQL服务器统计信息 G:M(YBz0q| Sp_password 改变登录帐号口令 =2C*w*)E Sp_spaceused 查询表中的行数、数据页数及空间大小 5aguW Sp_who 查询当前用户及过程信息 owNSOk{O Sp_syntax 查询操作语法 p9 A>@}mi Sp_configure 配置系统参数 &["r? < @ 例: ?%]x }#R 1> sp_helpdb Jff7i^ 2> go LN5l=cee@ name db_size owner dbid created status %!\UW&qd g -------------------------------------------------------------------------- 9lUi}z6 master 3.0 MB sa 1 Jan 01, 1900 no options set \7/*C0aD5 model 2.0 MB sa 3 Jan 01, 1900 no options set M(!1rrF0 sybsystemprocs 10.0 MB sa 4 Oct 24, 1997 trunc log on chkpt V }xBVc!) tele114 370.0 MB sa 5 Oct 24, 1997 select into/bulkcopy, trunc log on chkpt JWT ee^H/ tempdb 22.0 MB sa 2 May 05, 1998 select into/bulkcopy r!.p]C%G\ (0 rows affected, return status = 0) l&O).Y8 例: 6*6Hvn42 1> sp_monitor L$^pS}- 2> go iOE8W]_ri8 last_run current_run seconds zP_#k]Q= -------------------------- -------------------------- ----------- }baGMyJ8sR May 5 1998 4:09PM May 5 1998 4:13PM 224 J` Z`]jdGc (0 rows affected) b>v(1 m cpu_busy io_busy idle d!s0j@` ------------------------- ------------------------- ------------------------- \`; O/= 17(1)-0% 5(0)-0% 923(223)-99% ^9 =Xrf (0 rows affected) Bt-+xUZ packets_received packets_sent packet_errors 1D&&~B\4V ------------------------- ------------------------- ------------------------- R:N ^aG 21(9) 51(23) 0(0) T;b9O'e W (0 rows affected) m,uS total_read total_write total_errors connections M1<,G?dm" ------------------- ------------------- ------------------- ------------------ q"# , 947(1) 595(113) 0(0) 3(1) DVX%7lTe (0 rows affected, return status = 0) qt27? 9' ]Yz $?oaA (5)触发器(Triggers) !D 3cJ8 触发器是一种特殊的存储过程,用来维护不同表中的相关数据的一致性。当在一张表中插入、删除和修改数据时,触发器就会触发另一个存储过程,从而保持数据的一致性。 D; CJuYpJ (6)缺省与规则(Defaults and rules) A*=CS$b 缺省是在数据录入时,若用户没有输入数据,SQL Server自动输入的值。 m_v:C[~ 规则是可以理解为对数据库、某一列、某用户数据类型的限制。 : P\Qxl Y0Y$ ),o= 三、SQL 查询语言 \as}Q? _|)(bp3_ SQL不仅包括查询数据的有关命令,还包括创建数据库及其对象,增、删、改数据等功能。分别定义为数据查询语言,数据定义语言及数据操作语言。这里先介绍数据查询语言。其基本句法为: U=| P(h1nO Select select_list from table_list where search_conditions x^p\' K 1、简单查询 .)&#Di4V A、选择若干列 V1G1NUM Select expression [,expression]... From table_list $C!\Y q/ B、选择若干行 x%u</7z1 O 查出电话号码以415到头的记录 m%r{s$42 Select * from code_1th where tel like '415%' Q C-3o|^{ 查询中消除值重复的行 ;!!mS& Select distinct tel from code_1th 5rXK^>5Y 对Text 和 char 可用 like ,其中可用通配符‘%’及‘-’,分别代表多个字符和单个字符。 VaI!Mj*.~ 其他常用查询条件有:(出text类型除外) 17#slB7 大小比较 =、>、<、>=、<=、!=、!>、!< w bmt"6B 范围确定 between exp1 and exp2 /net between exp1 and exp2 JT1^ :@ 列表或集合 in (exp1[,exp2,[...]]) not in (...) ^LMX]9J 谓词 like Zj:ipz i` 多重条件 and or not ^G}@;e 19 2、连接查询 !Os`5l( A、等值连接和不等值连接:通过‘=’来比较两个表之间的数据时,称为等值连接;而通过其他比较符时,称为不等值连接 *>;$y 等值连接: GRY}%nX#a Select * from publishers, authors where publishers.city=authors.city YrCDZHAl; 不等值连接: mB^=5;@ B、自然连接: 在连接的目标列中相同名的列只保留一个 gV|N,DrKG Select publishers.pub_id publishers.pub_name, publishers.state, authors.* ST,}ulQ From publishers, authors where publishers.city=authors.city !F]W9 B> 3、子查询 k 0 4`n: A、表达式子查询 ~AvOy Select au_lname, au_fname from authors where city= iEm#G1-V^ (select city from publishers where pub_name="abcde") z`#N- cX 可以使用一切大小比较操作符;在操作符和子查询之间可以使用All 或any。 $gOa0#}5 B、限定谓词子查询 d{wv2FeM$ Select pub_name from publishers from publishers ,aZ72zrs Where pub_id in #V0WBNxZ-0 (select pub_id from titles where type='abcde') -fn5pJdl] C、相关查询 E TB@8mU~ 相关查询即嵌套查询依赖于外部父查询的值,嵌套查询要重复执行若干次。 P`Ux==q+ Select distinct t1.type from titles t1 o0Vr)O02 Where t1.type in ( select t2.type from titles t2 where t1.pub_id!=t2.pub_id) t/DRY 4、集函数、分组与排序 TrA#,/Y@ A、对查询结果进行聚集处理 I,Q M>}v 聚集函数: Sum([all|distinct] expression),avg([all|distinct] exoression) , [Q=z2//I={ Count([all|distinct]expression), count(*), max(expression), min(expression) #EbO?[Uc, Select count(*) from titles _+?'HS+ B、用Group by 和 having 子句对查询结果分组 Bb@'P+ Select type ,avg(advance), sum(total_sales) from titles group by type /xdOXiO Select type from titles group by type having count(*) >1 \8`$:i Having 类似于where , 但where 不能用聚集函数。 hZn6It+ E C、用Order by 对查询结果进行排序 %evjwyab Select type ,avg(price) from titles group by type order by avg(price) JLwO JeY D、Compute 子句 `mT2>QS 完成基于每一组中的值的聚集运算,聚集值作为一个新行出现在查询结果中。 \ecV=r1 Select type ,price advance from titles order by type compute sum(price), sum(advance) by type 77M>b-$J 四、数据库、数据库对象的增、删、改 #?&3.t7 1、数据库 ;\Z6-@* x 打开数据库 u2DYfWFa! Use tele114 n13 nd1G7 x 创建数据库。拥有创建数据库权利的用户可以创建自己的数据库。 L|~z#5wF CREATE DATABASE tele114 sL|2__ ON tele114_def01=10,tele114_run01=200,tele114_idx01=200 -s(_ `L3N LOG ON tele114_log01=80 #]%'3 x 删除数据库 eA ,m;Df$ Drop database tele114 tQDcN% x 修改数据库 a*eY'!mDI$ Alter database tele114 on tele114_run02=100, tele114_idx02=100 n&{A53u?l MpmE<F# 2、表 p#I+k-i x 建表 oU5wk*j create table spec_code ( ,WZ#R ( sy]&U^$R No tinyint not null, /*特编号(0--99)*/ F^H o)'p Name varchar(50) null, /*名称*/ Q.xp :\' Addr varchar(50) null, /*地址*/ Qfa+vnvH Tel varchar(50) null, /*电话号码*/ xjENX5K\ StaffNo varchar(4) not null /*录入员工号*/ ^'tip+bdG ) *tw ]%A+ on segrun /*将表放在segrun段上*/ k{}<6$0u x 删除表 `9!4D9 Drop tabel tele114_1th mXF29 -B x 修改表,在表中增加新的列(用这个命令增加的列必须允许null值) I#D/x9X< Alter table friends_etc add country varchar(20 ) null 6B[ G4 x 表级或列级约束 rj'l Create table my_publishers ,--: 8F<\ (pub_id char(4), `<Y#>)$8 Pub_name carchar(40). >hf65{Gb Constraint my_chk_constraint |{R7D>h3m Check (pub_id in ('1389','0736','0877')) No^q:Tz Or (pub_name not like 'bad news books')) u&hW,F* U x 指定默认值 f`k, ^iU Create table ny_titles .rTly*^" (title_id char(6t), Qhv2?M Title varchar(80), qwA2b3-' Price money default null, r@ x/o(B Total_sales int default (0)) ez]AsGR_o x 指定Unique 和primary key 约束 ht|Wp>NB Primary key 不允许空值,常用来产生唯一的聚集索引,unique 允许空值,常用来产生唯一的非聚集索引 e7pwj Create table my_sales [?={8bx (stor_id char(4), @wD0/P\{b" Ord_num varchar(20), &r3%Vygp Date datetime, Rdmul6F >= Unique clustered(stor_id,ord_num)) <Yl-'3"=T 3、索引 =Y' L_2>1 x 建立索引 (_H(*j5a create unique clustered index code1thidx1 on code_1th(Code1,Name,UnitNo1,Used) +DdBd_J* on segrun ]goqm4 Unique: 建立唯一性索引 E@K|) eb0Z Clustered : 建立聚集索引,使得数据行的逻辑顺序与物理顺序一致,查询速度较快;每个表仅允许建立一个唯一性索引。(非聚集索引nonclustered) ksPy3 On segrun:将索引放在segrun上 [~sME e<u x 删除索引: drop index code_1th.code1thidx1 ;} >|> 4、 默认:当用户没有显示地为某一列赋值时,SQL SERVER 为该列插入的值 TNK>5DQ< x 创建默认值CA,把默认值CA用到friends_etc表中的State列上 SdE,]@| Creat default statedflt %XNb~h=[ Go G{WG Le7 Sp_bindefault statedflt, "frends_etc.state" >S,97*= go :Ln ^V$tI x 断离默认 c3 (<p/ Sp_unbindefault "frends_etc.state" VZus[tC x 删除默认 (Utn,f(& Drop default statedflt ly"vHMo$\ 5、规则:可以理解为对数据库、某一列、某用户数据类型的限制.规则中的任何变量名必须 zHucduPH- 冠以@,不能直接引用列或其他数据库对象。 d ZaIoR< x 创建规则并把他关联到用户定义的数据类型P#上 V0-E.(Uv Create rule phonerule as @phone like 415[0-9][0-9][0-9][0-9] KL3DF) Sp_bindrule phonerule ,"p#" QyAwUs x 断离规则 j/l}lj( a Sp_unbindrule "p#" V00Kk x 删除规则 19!4Oj_P Drop rule phonerule U4rN5g 6视图:视图是从一个或多个基本表或其他视图上导出的表,可以在视图上进行增、删、改 cO,hB] N x 创建视图 MIo$g Gz 创建视图的句法为: dm!7!ID create view view_name "1=sQC>N (column_1,...,column_n) WQfkEo+V as select_statements 2t_" p4zy 例:在authors表和publishers表上定义一个视图如下: -\|r= s Create view cities (authorname, acity, publishername, pcity) L<uee'hw6 As select au_lname,authors.city, pub_name, publishers.city F)w 3-x ?e From authors, publishers O(8 9w. x 通过使用Drop view 命令来撤消一个视图 ' ivN5 Drop view view_name 4]T7<A9z| 7、存储过程 @+GFxjI x 创建存储过程 DxGeDkiy CREATE PROCEDURE procedure_name [(para1[,para2, ...])] RF8e0r As sql_statements BVXL3[ 存储工程的参数名必须一@开头,包括@最长为30个字符。 m~5303t1 x 执行存储过程 i3@kB> 5 EXEC[UTE] procedure_name [(para1[,para2, ...])] l1> =M}Y 存储过程能够返回一个整数,用来指示存储过程执行是完全错误还是错误。SQL SERVER 用0指示成功的返回,-1~-99指示不同的错误。当前所用的0及-1~-14的含义如表所示。 +d'c02Y*A 值 含义 8FV5d- 0 过程执行无错 (HL2Vp -1 丢失对象 wn! + } -2 数据类型错误 \?uXv1G" -3 进程被选作死锁的牺牲品 aVqd". -4 权限错误 ;FB]&,v r -5 语法错误 Cd'D -6 各种用户错误 t,=<5NeI -7 资源错误:如空间错误 \#U+ d> -8 非严重的内部错误 T Zow0Yn -9 触及系统限制 %d &.To[ -10 严重的内部不一致 U| 51y -11 严重的内部不一致 iy(Q {* b -12 表或索引坏了 s{I^/'rY -13 数据库坏了 VWCW{X -14 硬件错误 qo4]U x 更改存储过程名 K Z3Tl(]] Sp_rename objname newname 'eUfPJr x 删除存储过程 d2Ad?kb,^ DROP PROCEDURE procedure_name Uzo['h 8 、触发器 ]>#'3,R x 创建触发器 R]@C|vtr CREATE TRIGGER [owner.]trigger_name 8@&2nH%L. ON [owner.]table_name ;$$mq[v {FOR INSERT,UPDATE,DELETE} &Lc3~&EJ\ AS _MT=ipl SQL_statements D<H3E.JJ 或使用IF UPDATE 子句: l JA,/bfj* CREATE TRIGGER [owner.]trigger_name WH:8YX;BV ON [owner.]table_name LK_'E31 {FOR INSERT,UPDATE} wdZFF9; AS `tl=".gdtZ [IF UPDATE (column_name) Yg }mJ!% [{AND|OR} UPDATE (column_name)]...} }/~=E4`- SQL_statments SW FVO03 [IF UPDATE(column_name) +2*[YR1y= [{AND|OR} UPDATE column_name)]... PEGtiP(}D SQL_statements]... Q$wd9Qoy x 触发器的删除 M@Lh~; DROP TRIGGER [owner.]trigger_name O qjTEL -, LDvLZ&Uf: 五、批处理和流控制语言 uT{n5cr] 1、批处理 0)Dy_ it SYBASE系统允许用户将若干条相关的语句组成一个整体,交给系统同时处理。 一批语 H-Ml?X 句的结束以go语句为标志。严格地讲,单条SQL语句也是一个批处理。 yYeQU 例:Select count(*) from titles P!WaP~u Select count(*) from authors k~E&cX-D# Go %"sP4LrE 也可以将一组SQL命令放在一个操作系统文件中,再将这个文件交给isql执行。 q@v*_yZ 2、流控制语言 ,_yRxgxz 流控制语句 grr\Q`c0 在批处理中,我们可以加入流程控制语句,从而达到编程的目的。在T-SQL语言中, {O*Ipr" ( 流控制语句有: 07,~kwx& · if。。。Else。。。 {'p^ YO$T · begin。。。End。。。 Ig<}+\ · while和break。。。Continue 6AwzwI · declare和局部变量以及全局变量 vu`" 408 · Goto qD#DL_< · Return an'7)&n · Waitfor $bM kQTgG · print和Raiserror QUT(#X. · 注释 ]!]|))l(f 例: CdA^e.m if exists(select * from zyl tWpU@:`7 where xm="李军") T-b kc print "ok" nu_\- (8# else KB2viQSBI print "no this one" Wvz!9y-; 使用批处理有以下规则: n~s>s%V x CREATE PROCEDURE、CREATE RULE、 CREATE DEFAULT 、CREATE TRIGGER 以及CREATE VIEWE 必须单独交给SQL SERVER, 他们不能和别的SQL语句一起作批处理(CREATE DATABASE、CREATE TABLE 和CREATE INDEX 能和其他语句组成批处理)。 k_&j |;K{ x 规则和默认值都不能在一组批处理中刚关联就使用。 mhG*'JwK< x USE命令必须在引用这个数据库的对象的语句的前一组批处理中提交。 Yyn4o[ x 不能刚删除(DROP)一个数据库对象又在同一批处理中重新创建他。 vF5Y;&@: x 用SET语句做的任何选择设置在批处理尾处发生作用。可以把SET语句和查询语句放入一组批处理中,但SET选择项不能在这组批处理中使用。
|
|
|
|