- 论坛徽章:
- 0
|
sybase数据库知识(摘自华为学习资料)
(2)视图(Views)
视图是查看一张或几张表中的数据的一种方式。通过将一张或几张表中的一部分数据进行组合得到视图。视图看上去与表非常相象,但与表还是有着本质的区别。通过视图看到的数据实际上都是存放在表中的,在数据库中仅存在视图的定义。
使用视图的好处是:
● 操作方便
● 安全性
(3)索引(Index)
索引是对字段生成的,用于加快数据的检索。在Sybase数据库中,索引是由系统自动管理的,也就是说,Sybase的索引操作对用户是透明的。表的索引一旦建立,系统会自动对其进行更新维护以使它与相应表对应一致;操作时,用户无须指定索引,系统会自动确定是否使用索引进行操作。
Sybase支持三种不同类型的索引,一是复合索引,即包含几个列的索引;二是唯一性索引,即任意两行中的索引列不能有相同的取值;三是簇类索引(Clustered indexes)和非簇类索引(Nonclustered indexs),簇类索引使SQL服务器不断重排表行的物理顺序以使其与逻辑索引顺序相一致,非簇类索引则不需要表行的物理顺序与逻辑顺序一致。每个表最多只能建立一个簇类索引,非簇类索引则可建立多个。与非簇类索引相比,簇类索引的检索速度要快。应当在建立任何非簇类索引以前建立簇类索引。
(4)存储过程(Stored procedures)
存储过程是用T-SQL语言编写成的SQL子例程,它存储于SQL服务器上供用户调用执行。与一般的SQL语句和批处理语句不同的是,存储过程是经过预编译的。当首次运行一个存储过程时,SQL Server的查询处理器将对其分析,并产生最终的执行方案。由于查询处理的大部分工作已经完成,所以以后执行存储过程时速度将会很快。执行存储过程时可带参数并可调用其他存储过程,执行完毕后返回信息以指示是否成功完成相应操作。存储过程有两种:一种是SQL服务器安装时自动建立的系统存储过程(系统过程),另一种是用户自己创建的存储过程。
系统过程是用于系统管理,并且为用户提供了从事数据库管理的一种途径。这些系统过程都是以sp_开头的,它们都放在master数据库中且隶属于sa(系统管理员) 。也有很多可以在任一个数据库中运行的系统过程。
常见的系统过程有:
sp_addgroup 在当前数据库中建立一个数据库用户组
sp_addlogin 建立一个SQL服务器用户
sp_adduser 在当前数据库中增加一个用户
sp_changegroup 改变数据库用户组
sp_dboption 查询或改变数据库系统设置
sp_dropdevice 删除设备
sp_dropgroup 删除组
sp_droplogin 删除帐号
sp_help 查询数据库对象及所有数据库信息
sp_helpdb 查询数据库信息
sp_helpdevice 查询设备信息
sp_helpgroup 查询组信息
sp_helpindex 查询给定表信息 sp_helpindex code_3th
sp_helpuser 查询用户信息
sp_lock 查询当前加锁信息
sp_monitor 查询SQL服务器统计信息
sp_password 改变登录帐号口令
sp_spaceused 查询表中的行数、数据页数及空间大小
sp_who 查询当前用户及过程信息
sp_syntax 查询操作语法
sp_configure 配置系统参数
例:查询数据库信息
1>; sp_helpdb
2>; go
name db_size owner dbid created status
--------------------------------------------------------------------------
master 3.0 MB sa 1 Jan 01, 1900 no options set
model 2.0 MB sa 3 Jan 01, 1900 no options set
sybsystemprocs 10.0 MB sa 4 Oct 24, 1997 trunc log on chkpt tele114 370.0 MB sa 5 Oct 24, 1997 select into/bulkco py, trunc log on chkpt tempdb 22.0 MB sa 2 May 05, 1998 select into/bulkcopy (0 rows affected, return status = 0)
例:查询SQL服务器统计信息
1>; sp_monitor
2>; go
last_run current_run seconds
-------------------------- -------------------------- -----------
May 5 1998 4:09PM May 5 1998 4:13PM 224
(0 rows affected)
cpu_busy io_busy idle
------------------------- ------------------------- -------------------------
17(1)-0% 5(0)-0% 923(223)-99%
(0 rows affected)
packets_received packets_sent packet_errors
------------------------- ------------------------- -------------------------
21(9) 51(23) 0(0)
(0 rows affected)
total_read total_write total_errors connections
------------------- ------------------- ------------------- ------------------
947(1) 595(113) 0(0) 3(1)
(0 rows affected, return status = 0)
(5)触发器(Triggers)
触发器是一种特殊的存储过程,用来维护不同表中的相关数据的一致性。当在一张表中插入、删除和修改数据时,触发器就会触发另一个存储过程,从而保持数据的一致性。
(6)缺省与规则(Defaults and rules)
缺省是在数据录入时,若用户没有输入数据,SQL Server自动输入的值。
规则是指对特定的列的输入限制,即是否允许用户向给定列输入已定义的数据类型。
4.SQL Server的用户及权限
SQL=Structured Query Language 结构查询语言,是新一代数据库查询语言。
Sybase中的用户分为两种:SQL服务器用户(登录帐号)和数据库用户。
安装完SQL服务器后,系统自动建立一个SQL服务器用户sa,口令为空,即系统管理员,他对整个系统有操作权,其他用户均由系统管理员建立。
在SQL Server中有三种特殊的用户:系统管理员、用户数据库所有者(建立相应数据库的数据库用户)DBO、一般用户。系统管理员对整个系统有操作权;用户数据库所有者对他所建立的数据库具有全部操作权利;一般用户对给定的数据库只有被授权的操作权限。
数据库用户一般可分为用户组,任一数据库在建立后即被赋予一个用户组public。
(1) 建立SQL服务器用户名(登录帐号)
作为一个用户,为了使用SQL Server,他必须在SQL Server上有一个SQL服务器用户名(登录帐号)。这个帐号是系统管理员通过sp_addlogin来增加的。
sp_addlogin 登录名,口令,库名,语言,全名
例:建立用户zhang, 口令为zhangling(最低六位),全名为Zhang ling
1>; sp_addlogin zhang,zhangling,null,null,"Zhang ling"
2>; go
3>; select * from syslogins
4>; go
(2) 增加数据库用户名
同样,为了使用SQL Server上的数据库,他必须在数据库中有一个用户名,这个用户名是数据库所有者通过sp_adduser来增加的。数据库用户名不必和用户帐户一样,而且在不同的数据库中用户名可以不同。多个用户可以有相同的SQL Server帐户。同样,多个SQL Server帐户可以有相同的数据库名。
sp_adduser 登录名,别名,组名
登录名为用户的SQL服务器登录名;别名为用户在数据库中的用户名;组名为用户所属的数据库用户组。
例:用户zhang增加为tele114的用户,别名为zhang1,属于用户组china
1>; use tele114
2>; go
3>; sp_helpgroup
4>; go
5>; select * from sysusers
6>; go
1>;sp_addgroup china
2>;go
1>; sp_helpgroup
2>; go
1>;sp_adduser zhang,zhang1,china
2>;go
1>; sp_helpuser
2>; go
*例:删除别名zhang1,用户组china,登录名zhang
1>; use tele114
2>; go
3>; sp_dropuser zhang1
4>; go
5>; sp_helpuser
6>; go
1>;sp_dropgroup china
2>;go
1>; sp_helpgroup
2>; go
3>; use master
4>; go
5>; sp_droplogin zhang
6>; go
7>; select * from syslogins
8>; go
5.SQL Server的启动与关闭
(1) 启动
对于安装在UNIX操作系统中的Sybase SQL Server,都有一个登录名。在我们的实际系统中,这个登录名为sybase,登录的口令为sybase10。以sybase登录到服务器后,进入install子目录。用实用工具showserver查看已经运行了的SQL Server。如果还没有SQL Server在运行,则可以用以下命令启动SQL Server:
$ startserver -f RUN_SYBASE (RUN_主服务器名)
$ startserver -f RUN_SYB_BACKUP (RUN_备服务器名)
$ showserver
(2) 关闭
关闭SQL Server可以在isql中使用T-SQL命令:
关闭SQL备服务器
1>; shutdown SYB_BACKUP
2>; go
关闭SQL主服务器
1>; shutdown [with nowait]
2>; go
关闭UNIX服务器
$ shutdown 杫 –g0
(3) 启动过程
master数据库启动-----------鄐ybsystemproces数据库启动-----------嗲蹇誸empdb---------嗥舳?渌??菘 -------嗍挛竦幕毓
(4)Sybase数据库目录说明
/usr/sybase =.. 主目录
.. /install 安装程序
../bin 执行程序
../include 库函数文件
../lib 宿主语言库
../doc 联机文件
../scripts SQL 动态描述文件
../help 帮助信息
../locales 语言限制文件
../termdef 终端定义文件
../charsets 字符集文件
五、T-SQL语言
1. 标准的SQL语言
标准的SQL语言包括数据定义语句(DLL),数据操作语句(DML)和数据控制语句(DCL)。熟悉附录中五个表结构(enrolls,teachers,courses,sections,students)
(1)数据定义语句(DLL)
用来建立、更改和删除数据库对象
a.建立对象create
这里只介绍表和索引的创建与删除
(a).创建表:
create table table_name(column_1 datatype,...,column_n datatype)
例:建表teachers
1>; create table teachers(teacher# SMALLINT NOT NULL UNIQUE,
2>; teacher_name CHAR(1,
3>; phone CHAR(10),
4>; salary FLOAT)
5>; go
(b). 创建索引:
create index index_name on table_name(column_1,...,column_n)
例:建表teachers中teacher_name字段的索引文件names
1>; create index names on teahers(teacher_name)
2>; go
b. 删除对象drop
(a).删除表:
drop table table_name
例:删除表teachers
1>; drop table teachers
2>; go
(b) 删除索引:
drop index table_name.index_name
例:删除表teachers 的索引文件names
1>; drop index teachers . names
2>; go
(2) 数据操作语句(DML)
包括对数据查询、插入、修改和删除
a. 查询select
2
select column_1,...,column_n from table_name where conditions
例:列出所有课程名、系名及其学分
1>;select course_name,
2>;department,
1>; num_credits from courses
2>; go
例:列出所有学分为3的课程名、系名及学分
1>; select course_name,department,num_credits from courses
2>; where num_credits=3
3>; go
例:找出所有男性学生
1>; select student_name from students where sex='M'
2>; go
例:哪些算术课程具有3分以上的学分
1>; select course_name,department,num_credits from courses
2>; where department='Math' and num_credits>;=3
3>; go
例:列出所有不来自IL州的学生的姓名和州名
1>; select student_name,state from students where not (state='IL')
2>; go
例:列出一年工资为30000到35000的教师姓名和工资
1>; select teacher_name,salary from teachers where salary between 30000 and 35000
2>; go
例:列出名字以“Jo”开头的每个学生的姓名和性别
1>; select student_name,sex from students where student_name like 'Jo%'
2>; go
例:查出教师的最大工资
1>; select max(salary) from teachers
2>; go
例:查出多少教师的工资大于30000
1>; select count(*) from teachers where salary>;30000
2>; go
例:列出每个学生的课程数
1>; select student#,num_enrolled=count(*) from enrolls group by student#
2>; go
从几个表中检索数据(联接)
任何从多于一个表中检索数据的查询必须执行联接。
例:每个教师所教的课程是什么?(按姓名列出教师)
1>; select teacher_name,sections.teacher#,course#
2>; from teachers,sections
3>; where teachers.teacher#=sections.teacher#
4>; go
子查询:来自一个查询结果可以成为另一个查询的输入。一般为两个或以上表
例:在任何课程中哪个学生成绩为3
1>; select student_name from students
2>; where student# in (select student# from enrolls where grade=3)
3>; go
例:哪个教师工资低于平均值
1>; select teacher_name from teachers
2>; where salary<(select avg(salary) from teachers)
3>; go
例:将表students复制为表hhh
1>; select * into hhh from students
2>; go
b. 插入insert
insert into table_name(column_1,...,column_n)
values(value_1,...,value_n)
例:向表teachers中增加教师号为555,姓名为kkk,电话号码为6646988,工资为300
1>;insert into teachers
2>;values(555,'kkk','6646988',300)
1>; go
c. 修改update
update table_name
set column_1=value_1,...column_n=value_n
where conditions
例:增加kkk的工资到1000
1>; update teachers set salary=1000
2>; where teacher_name='kkk'
3>; go
d. 删除delete |
|