sybase文章精選讀書筆記 2012.07.09

Sybase入門

一、Sybase數據庫簡介

Sybase真正吸引人的地方還是它的高性能。體現在以下幾方面:

● 可編程數據庫
通過提供存儲過程,創建了一個可編程數據庫。存儲過程允許用戶編寫自己的數據庫子例程。這些子例程是經過預編譯的,因此不必爲每次調用都進行編譯、優化、生成查詢規劃,因而查詢速度要快得多。

● 事件驅動的觸發器
觸發器是一種特殊的存儲過程。通過觸發器可以啓動另一個存儲過程,從而確保數據庫的完整性。

● 多線索化
Sybase數據庫的體系結構的另一個創新之處就是多線索化。一般的數據庫都依靠操作系統來管理與數據庫的連接。當有多個用戶連接時,系統的性能會大幅度下降。Sybase數據庫不讓操作系統來管理進程,把與數據庫的連接當作自己的一部分來管理。此外,Sybase的數據庫引擎還代替操作系統來管理一部分硬件資源,如端口、內存、硬盤,繞過了操作系統這一環節,提高了性能。

二、SYBASE有關概念
Sybase SQL Server是一個多庫數據庫系統。這些數據庫包括系統數據庫和用戶數據庫。 而不論是系統數據庫還是用戶數據庫,都建立在數據庫設備上。

一、Sybase數據庫簡介
1.版本
1984年,Mark B. Hiffman和Robert Epstern創建了Sybase公司,並在1987年推出了Sybase數據庫產品。SYBASE主要有三種版本,一是UNIX操作系統下運行的版本,二是Novell Netware環境下運行的版本,三是Windows NT環境下運行的版本。對UNIX操作系統目前廣泛應用的爲SYBASE 10 及SYABSE 11 for SCO UNIX。
2.Sybase數據庫的特點
(1)它是基於客戶/服務器體系結構的數據庫
一般的關係數據庫都是基於主/從式的模型的。在主/從式的結構中,所有的應用都運行在一臺機器上。用戶只是通過終端發命令或簡單地查看應用運行的結果。
而在客戶/服務器結構中,應用被分在了多臺機器上運行。一臺機器是另一個系統的客戶,或是另外一些機器的服務器。這些機器通過局域網或廣域網聯接起來。
客戶/服務器模型的好處是:
● 它支持共享資源且在多臺設備間平衡負載
● 允許容納多個主機的環境,充分利用了企業已有的各種系統
(2) 它是真正開放的數據庫
由於採用了客戶/服務器結構,應用被分在了多臺機器上運行。更進一步,運行在客戶端的應用不必是Sybase公司的產品。對於一般的關係數據庫,爲了讓其它語言編寫的應用能夠訪問數據庫,提供了預編譯。Sybase數據庫,不只是簡單地提供了預編譯,而且公開了應用程序接口DB-LIB,鼓勵第三方編寫DB-LIB接口。由於開放的客戶DB-LIB允許在不同的平臺使用完全相同的調用,因而使得訪問DB-LIB的應用程序很容易從一個平臺向另一個平臺移植。

(3) 它是一種高性能的數據庫
Sybase真正吸引人的地方還是它的高性能。體現在以下幾方面:
● 可編程數據庫
通過提供存儲過程,創建了一個可編程數據庫。存儲過程允許用戶編寫自己的數據庫子例程。這些子例程是經過預編譯的,因此不必爲每次調用都進行編譯、優化、生成查詢規劃,因而查詢速度要快得多。
● 事件驅動的觸發器
觸發器是一種特殊的存儲過程。通過觸發器可以啓動另一個存儲過程,從而確保數據庫的完整性。
● 多線索化
Sybase數據庫的體系結構的另一個創新之處就是多線索化。一般的數據庫都依靠操作系統來管理與數據庫的連接。當有多個用戶連接時,系統的性能會大幅度下降。Sybase數據庫不讓操作系統來管理進程,把與數據庫的連接當作自己的一部分來管理。此外,Sybase的數據庫引擎還代替操作系統來管理一部分硬件資源,如端口、內存、硬盤,繞過了操作系統這一環節,提高了性能。
3.Sybase數據庫的組成
Sybase數據庫主要由三部分組成:

(1) 進行數據庫管理和維護的一個聯機的關係數據庫管理系統Sybase SQL Server;
Sybase SQL Server是個可編程的數據庫管理系統,它是整個Sybase產品的核心軟件,起着數據管理、高速緩衝管理、事務管理的作用。

(2) 支持數據庫應用系統的建立與開發的一組前端工具Sybase SQL Toolset;
ISQL是與SQL Server進行交互的一種SQL句法分析器。ISQL接收用戶發出的SQL語言,將其發送給SQL Server,並將結果以形式化的方式顯示在用戶的標準輸出上。
DWB是數據工作臺,是Sybase SQL Toolset的一個主要組成部分,它的作用在於使用戶能夠設置和管理SQL Server上的數據庫,並且爲用戶提供一種對數據庫的信息執行添加、更新和檢索等操作的簡便方法。在DWB中能完成ISQL的所有功能,且由於DWB是基於窗口和菜單的,因此操作比ISQL簡單,是一種方便實用的數據庫管理工具。
APT是Sybase客戶軟件部分的主要產品之一,也是從事實際應用開發的主要環境。APT工作臺是用於建立應用程序的工具集,可以創建從非常簡單到非常複雜的應用程序,它主要用於開發基於表格(Form)的應用。其用戶界面採用窗口和菜單驅動方式,通過一系列的選擇完成表格(Form)、菜單和處理的開發。

(3) 可把異構環境下其它廠商的應用軟件和任何類型的數據連接在一起的接口Sybase Open Client/Open Server。
通過Open Client的DB-LIB庫,應用程序可以訪問SQL Server。而通過Open Server的SERVER-LIB,應用程序可以訪問其它的數據庫管理系統。


二、SYBASE有關概念


Sybase SQL Server是一個多庫數據庫系統。這些數據庫包括系統數據庫和用戶數據庫。 而不論是系統數據庫還是用戶數據庫,都建立在數據庫設備上。
1. 數據庫設備
所有的數據庫都創建在數據庫設備上。所謂數據庫設備,不是指一個可識別的物理設備,而是指用於存儲數據庫和數據庫對象的磁盤原始分區或操作系統文件。增加一個新的數據庫設備時,必須對這些設備“初始化”。初始化的過程就是將物理磁盤、磁盤分區或操作系統文件變爲SYBASE數據庫可以識別的設備。初始化數據庫設備使用DISK INIT命令:

DISK INIT
NAME=設備名,
PHYSNAME=物理設備名,
VDEVNO=虛擬設備號,
SIZE=塊數

其中,NAME指數據庫設備名,此名將用於CREATE DATABASE和ALTERDATABASE命令。PHYSNAME是原始磁盤分區或操作系統文件名。VDEVNO是數據庫設備的標識號,在SQL Server中,它必須是唯一的。SIZE的單位是2K的塊,對於新創建的數據庫,最小的SIZE是model數據庫的尺寸,即1024個2K的塊(2M)。

例如:/*將/dev目錄下400M的物理設備初始化爲SYBASE的數據庫設備tele114_log01*/
1>disk init
2>name=“tele114_log01”,
3>physname=“/dev/rtelelog”
4>vdevno=4
5>size=204800 /*2Kbyte*204800=400Mbyte*/
6>go

2、段
數據庫設備從邏輯上被劃分爲數據庫段以允許將某一特定的對象放置在指定的段上(創建對象時指定),一數據庫設備可擁有多達192個段,一段可使用255個邏輯設備上的存儲空間。當用戶創建一個數據庫時,SQL SERVER 會自動在該數據庫中創建三個段: SYSTEM、LOGSEGMENT 、DEFAULT,這三個段分別用來存儲數據庫的系統表、事務日誌和其他數據庫對象
在數據庫中創建段的步驟是:
x 先用Disk init 初始化物理設備
x 通過使用Createdatabase 和alter database 的on 子句,使數據庫設備對數據庫可用,於是新設備自動增加到數據庫的default 和system段。
一旦數據庫設備存在並對數據庫可用,使用存儲過程Sp_addsegment 定義數據庫的段。語法如下:
Sp_addsegment 段名,數據庫名,設備名

3、 系統數據庫
安裝Sybase數據庫時自動生成的下列系統數據庫:
● 主數據庫master;
● 模型數據庫model;
● 系統過程數據庫sybsystemprocs;
● 臨時數據庫tempdb。

(1) master數據庫
包含許多系統表和系統過程,從總體上控制用戶數據庫和SQL Server的操作,構成了SYBASE系統的數據字典。MASTER數據庫主要記錄信息爲:
● 登錄帳號(SQL服務器用戶名);syslogins,sysremolelogins
● 正在執行的過程;sysprocesses
● 可修改的環境變量;sysconfigures
● 系統錯誤信息;sysmessages
● SQL服務器上每個數據庫的信息;sysdatabases
● 每個數據庫佔用的存儲空間;sysusages
● 系統上安裝的磁帶及磁帶信息;sysdevices
● 活動鎖信息;syslocks

(2) model數據庫
提供了新用戶數據庫的初型。當我們每次用CREATE DATABASE命令 時,SQL Server都產生一個model數據庫的拷貝,然後把它擴展到命令要求的尺寸。如果我們修改了model數據庫,那麼以後新創建的數據庫都將隨它而改變。下面是幾個通常用到的對model數據庫的改變:
● 增加用戶數據庫類型、規則或缺省;
● 可存取SQL Server上所有數據庫的用戶用sp_adduser增加到model數據庫上;
● 缺省權限(特別是guest帳號)可在model中建立;
● 諸如selectinto/bulkcopy那樣的數據庫選項可在model中設置。這些設置反映到所有新創建的數據庫中。它們在model中最原始的值是關(off)。
在一般情況下,大多數用戶無權修改model數據庫,又沒被授權讀取。因爲model中所有內容已拷貝到新數據庫中,授權讀model沒什麼意義。

(3) sybsystemprocs數據庫
庫中存儲系統過程,當用戶執行一存儲過程(以sp_開始)時,SQL 服務器首先在用戶當前數據庫中搜索指定的存儲過程,如果沒有相應過程,則到系統過程數據庫中尋找,若沒有,再到MASTER數據庫中尋找。

(4)臨時數據庫tempdb
該數據庫爲臨時表和臨時工作提供了一個存儲區域。臨時數據庫是SQL Server上所有數據庫共享的工作空間。由於這些表都是臨時的,所以每當用戶退出或系統失敗,這些表都將消失。

5、數據庫對象
(1)表(Tables)
在一個關係數據庫中,表是最重要的數據庫對象,對應於關係數據庫理論中關係,與DBASE或FOXPRO中的DBF文件是類似。一切數據都存放在表中。其它數據庫對象都是爲了用戶很好地操作表中的數據。表都以一張二維表的形式存在。其中,每一列稱之爲一個字段,或一個域;而每一行稱之爲一個記錄,也就是一項數據。
有一類表,它們的名字都是以sys開頭的,這些表稱爲系統表,系統表記錄着有關SQL Server的信息。在master數據庫中的表大部分爲系統表,這些表是隨着master數據庫的創建而建立的。另外,每個用戶數據庫在創建時都有一個系統表的子集。
例如,只有在master數據庫中才有的系統表有:sysconfigures、sysdatabases、sysdevices、syslogins等;在用戶數據庫和系統數據庫中都有的系統表有:sysalternates、syscolumns、sysindexs、syslogs、sysobjects、sysusers等。

(2)視圖(Views)
視圖是查看一張或幾張表中的數據的一種方式。通過將一張或幾張表中的一部分數據進行組合得到視圖。視圖看上去與表非常相象,但與表還是有着本質的區別。通過視圖看到的數據實際上都是存放在表中的,在數據庫中僅存在視圖的定義。
使用視圖的好處是:
● 操作方便
● 安全性

(3)索引(Index)
索引是對字段生成的,用於加快數據的檢索。在Sybase數據庫中,索引是由系統自動管理的,也就是說,Sybase的索引操作對用戶是透明的。表的索引一旦建立,系統會自動對其進行更新維護以使它與相應表對應一致;操作時,用戶無須指定索引,系統會自動確定是否使用索引進行操作。
Sybase支持三種不同類型的索引,一是複合索引,即包含幾個列的索引;二是唯一性索引,即任意兩行中的索引列不能有相同的取值;三是簇類索引(Clustered indexes)和非簇類索引(Nonclustered indexs),簇類索引使SQL服務器不斷重排表行的物理順序以使其與邏輯索引順序相一致,非簇類索引則不需要錶行的物理順序與邏輯順序一致。每個表最多隻能建立一個簇類索引,非簇類索引則可建立多個。與非簇類索引相比,簇類索引的檢索速度要快。應當在建立任何非簇類索引以前建立簇類索引。

(4)存儲過程(Stored procedures)
存儲過程是用T-SQL語言編寫成的SQL子例程,它存儲於SQL服務器上供用戶調用執行。與一般的SQL語句和批處理語句不同的是,存儲過程是經過預編譯的。當首次運行一個存儲過程時,SQLServer的查詢處理器將對其分析,併產生最終的執行方案。由於查詢處理的大部分工作已經完成,所以以後執行存儲過程時速度將會很快。執行存儲過程時可帶參數並可調用其他存儲過程,執行完畢後返回信息以指示是否成功完成相應操作。存儲過程有兩種:一種是SQL服務器安裝時自動建立的系統存儲過程(系統過程),另一種是用戶自己創建的存儲過程。

(5)觸發器(Triggers)
觸發器是一種特殊的存儲過程,用來維護不同表中的相關數據的一致性。當在一張表中插入、刪除和修改數據時,觸發器就會觸發另一個存儲過程,從而保持數據的一致性。

(6)缺省與規則(Defaults and rules)
缺省是在數據錄入時,若用戶沒有輸入數據,SQL Server自動輸入的值。
規則是可以理解爲對數據庫、某一列、某用戶數據類型的限制。

三、SQL 查詢語言

四、數據庫、數據庫對象的增、刪、改

1、數據庫
x 打開數據庫
Use tele114
x 創建數據庫。擁有創建數據庫權利的用戶可以創建自己的數據庫。
CREATE DATABASE tele114
ON tele114_def01=10,tele114_run01=200,tele114_idx01=200
LOG ON tele114_log01=80
x 刪除數據庫
Drop database tele114
x 修改數據庫
Alter database tele114 on tele114_run02=100, tele114_idx02=100

2、表
x 建表
create table spec_code
(
No tinyint not null, /*特編號(0--99)*/
Name varchar(50) null, /*名稱*/
Addr varchar(50) null, /*地址*/
Tel varchar(8) null, /*電話號碼*/
StaffNo varchar(4) not null /*錄入員工號*/
)
on segrun /*將表放在segrun段上*/
x 刪除表
Drop tabel tele114_1th
x 修改表,在表中增加新的列(用這個命令增加的列必須允許null值)
Alter table friends_etc add country varchar(20 ) null
x 表級或列級約束
Create table my_publishers
(pub_id char(4),
Pub_name carchar(40).
Constraint my_chk_constraint
Check (pub_id in ('1389','0736','0877'))
Or (pub_name not like 'bad news books'))
x 指定默認值
Create table ny_titles
(title_id char(6t),
Title varchar(80),
Price money default null,
Total_sales int default (0))
x 指定Unique 和primary key 約束
Primary key 不允許空值,常用來產生唯一的聚集索引,unique 允許空值,常用來產生唯一的非聚集索引
Create table my_sales
(stor_id char(4),
Ord_num varchar(20),
Date datetime,
Unique clustered(stor_id,ord_num))

3、索引
x 建立索引
create unique clustered index code1thidx1 on code_1th(Code1,Name,UnitNo1,Used)
on segrun
Unique: 建立唯一性索引
Clustered : 建立聚集索引,使得數據行的邏輯順序與物理順序一致,查詢速度較快;每個表僅允許建立一個唯一性索引。(非聚集索引nonclustered)
On segrun:將索引放在segrun上
x 刪除索引: drop indexcode_1th.code1thidx1

4、 默認:當用戶沒有顯示地爲某一列賦值時,SQL SERVER 爲該列插入的值
x 創建默認值CA,把默認值CA用到friends_etc表中的State列上
Creat default statedflt
Go
Sp_bindefault statedflt, "frends_etc.state"
go
x 斷離默認
Sp_unbindefault "frends_etc.state"
x 刪除默認

Drop default statedflt

5、規則:可以理解爲對數據庫、某一列、某用戶數據類型的限制.規則中的任何變量名必須
冠以@,不能直接引用列或其他數據庫對象。
x 創建規則並把他關聯到用戶定義的數據類型P#上
Create rule phonerule as @phone like 415[0-9][0-9][0-9][0-9]
Sp_bindrule phonerule ,"p#"
x 斷離規則
Sp_unbindrule "p#"
x 刪除規則
Drop rule phonerule
6視圖:視圖是從一個或多個基本表或其他視圖上導出的表,可以在視圖上進行增、刪、改
x 創建視圖
創建視圖的句法爲:
create view view_name
(column_1,...,column_n)
as select_statements

7、存儲過程
x
創建存儲過程
CREATE PROCEDURE procedure_name [(para1[,para2, ...])]
As sql_statements
存儲工程的參數名必須一@開頭,包括@最長爲30個字符。

x 執行存儲過程
EXEC[UTE] procedure_name [(para1[,para2, ...])]
存儲過程能夠返回一個整數,用來指示存儲過程執行是完全錯誤還是錯誤。SQL SERVER 0指示成功的返回,-1~-99指示不同的錯誤。當前所用的0-1~-14的含義如表所示。
含義
0
過程執行無錯
-1
丟失對象
-2
數據類型錯誤
-3
進程被選作死鎖的犧牲品
-4
權限錯誤
-5
語法錯誤
-6
各種用戶錯誤
-7
資源錯誤:如空間錯誤
-8
非嚴重的內部錯誤
-9
觸及系統限制
-10
嚴重的內部不一致
-11
嚴重的內部不一致
-12
表或索引壞了
-13
數據庫壞了
-14
硬件錯誤
x
更改存儲過程名
Sp_rename objname newname
x
刪除存儲過程
DROP PROCEDURE procedure_name

8 、觸發器
x
創建觸發器
CREATE TRIGGER [owner.]trigger_name
ON [owner.]table_name
{FOR INSERT,UPDATE,DELETE}
AS
SQL_statements
或使用IF UPDATE 子句:
CREATE TRIGGER [owner.]trigger_name
ON [owner.]table_name
{FOR INSERT,UPDATE}
AS
[IF UPDATE (column_name)
[{AND|OR} UPDATE (column_name)]...}
SQL_statments
[IF UPDATE(column_name)
[{AND|OR} UPDATE column_name)]...
SQL_statements]...

x 觸發器的刪除
DROP TRIGGER [owner.]trigger_name

 五、批處理和流控制語言
1、批處理
SYBASE系統允許用戶將若干條相關的語句組成一個整體,交給系統同時處理。 一批語
句的結束以go語句爲標誌。嚴格地講,單條SQL語句也是一個批處理。
例:Select count(*)from titles
Select count(*) from authors
Go
也可以將一組SQL命令放在一個操作系統文件中,再將這個文件交給isql執行。
2、流控制語言
流控制語句
在批處理中,我們可以加入流程控制語句,從而達到編程的目的。在T-SQL語言中,
流控制語句有:
· if。。。Else。。。
· begin。。。End。。。
· while和break。。。Continue
· declare和局部變量以及全局變量
· Goto
· Return
· Waitfor
· print和Raiserror
· 註釋
例:
if exists(select * from zyl
where xm="李軍")
print "ok"
else
print "no this one"
使用批處理有以下規則:
x CREATE PROCEDURE、CREATERULE、 CREATE DEFAULT 、CREATE TRIGGER 以及CREATE VIEWE 必須單獨交給SQL SERVER, 他們不能和別的SQL語句一起作批處理(CREATEDATABASE、CREATE TABLE 和CREATE INDEX 能和其他語句組成批處理)。
x 規則和默認值都不能在一組批處理中剛關聯就使用。
x USE命令必須在引用這個數據庫的對象的語句的前一組批處理中提交。
x 不能剛刪除(DROP)一個數據庫對象又在同一批處理中重新創建他。
x 用SET語句做的任何選擇設置在批處理尾處發生作用。可以把SET語句和查詢語句放入一組批處理中,但SET選擇項不能在這組批處理中使用。

六、系統的啓動和關閉

1、啓動SQL Server
應用SQL Server安裝程序(sybinit)創建SQL Server或Backup Server, 默認文件名爲RUN_SYBASE 和RUN_SYB_BACKUP,放在¥SYBASE/INSTALL目錄下。
Startserver 用來啓動一SQL Server 或Backup Server:
Startserver -f RUN_SYBASE
Startserver -f RUN_SYB_BAKUP
可以通過showserver查看SQL ServerBackup Server是否已經啓動,在$SYASE/INSTALL下運行showserver 查看SQL Server 是否啓動

UID PID PPID C STIME TTY TIME CMD
(Backup Server已啓動的信息)
sybase 831 830 0 17:23:50 ttyp1 00:00:00 /sybase/bin/backupserver 朣 SYB_BACKUP -I/sybase/interfaces -M/sybase/bin/sybmul
(SQL Server已啓動的信息)
sybase 674 1 0 14:29:11 ttyp0 00:00:45 /sybase/bin/dataserver-d/sybase/master.dat 朣YBASE-e/sybase/install/errorlog

2、啓動SQL Server的單用戶模式
如果要恢復一已被損壞的master數據庫,則必須要啓動SQL Server的單用戶模式。單用戶模式下僅允許一個系統管理員向SQL Server註冊。

Startserver -f RUN_SYBASE -m

3、關閉服務器

關閉SQL Server可以在isql中使用T-SQL命令:

關閉SQL備服務器
shutdown SYB_BACKUP

關閉SQL主服務器
shutdown [with nowait]


4、Sybase數據庫目錄說明
/usr/sybase =.. 主目錄
.. /install 安裝程序
../bin 執行程序
../include 庫函數文件
../lib 宿主語言庫
../doc 聯機文件
../scripts SQL 動態描述文件
../help 幫助信息
../locales 語言限制文件
../termdef 終端定義文件
../charsets 字符集文件

七、SQL Server的用戶及權限

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

3、數據庫操作授權
grant 命令序列 to 用戶名
A. 系統管理員可以授予其他用戶CREATE DATABASE的權限,使其他用戶可以成爲數據庫所有者。
B. 數據庫所有者在他所擁有的數據庫中,可以授予其他用戶的權限有:
l CREATE TABLE ------------------- 建表
lCREATE DEFAULT ------------------ 建缺省
lCREATE RULE ------------------- 建規則
lCREATE PROCedure ------------------ 建存儲過程
lCREATE VIEW ------------------- 建視圖
lDUMP DATABASE ------------------- 備份數據庫
lDUMP TRANsaction ------------------ 備份日誌
C. 數據庫對象所有者可以授予其他用戶的操作權限有:
l SELECT
l UPDATE
l INSERT
l EXECute
l DELETE
l REFERENCE

例:授予zhang1在數據庫tele114上建表,建視圖,建存儲過程;對錶students有select,reference權;對name,native字段有update權。
1> use tele114
2> go
3> grant creat table,create procedure ,create view to zhang1
4> go
5> grant select,reference on students to zhang1 with grant option
6> go
7> grant update on students(name,native) to zhang1
8> go
9> sp_helprotect
10> go

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章