Ⅰ sql的基本操作
1、說明:創建資料庫
CREATE DATABASE database-name
2、說明:刪除資料庫
drop database dbname
3、說明:備份sql server
--- 創建 備份數據的 device
USE master
EXEC sp_admpdevice 'disk', 'testBack', 'c:\mssql7backup\MyNwind_1.dat'
--- 開始 備份
BACKUP DATABASE pubs TO testBack
4、說明:創建新表
create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..)
根據已有的表創建新表:
A:create table tab_new like tab_old (使用舊表創建新表)
B:create table tab_new as select col1,col2… from tab_old definition only
5、說明:
刪除新表:drop table tabname
6、說明:
增加一個列:Alter table tabname add column col type
註:列增加後將不能刪除。DB2中列加上後數據類型也不能改變,唯一能改變的是增加varchar類型的長度。
7、說明:
添加主鍵:Alter table tabname add primary key(col)
說明:
刪除主鍵:Alter table tabname drop primary key(col)
8、說明:
創建索引:create [unique] index idxname on tabname(col….)
刪除索引:drop index idxname
註:索引是不可更改的,想更改必須刪除重新建。
9、說明:
創建視圖:create view viewname as select statement
刪除視圖:drop view viewname
10、說明:幾個簡單的基本的sql語句
選擇:select * from table1 where 范圍
插入:insert into table1(field1,field2) values(value1,value2)
刪除:delete from table1 where 范圍
更新:update table1 set field1=value1 where 范圍
查找:select * from table1 where field1 like 』%value1%』 ---like的語法很精妙,查資料!
排序:select * from table1 order by field1,field2 [desc]
總數:select count * as totalcount from table1
求和:select sum(field1) as sumvalue from table1
平均:select avg(field1) as avgvalue from table1
最大:select max(field1) as maxvalue from table1
最小:select min(field1) as minvalue from table1
11、說明:幾個高級查詢運算詞
A: UNION 運算符
UNION 運算符通過組合其他兩個結果表(例如 TABLE1 和 TABLE2)並消去表中任何重復行而派生出一個結果表。當 ALL 隨 UNION 一起使用時(即 UNION ALL),不消除重復行。兩種情況下,派生表的每一行不是來自 TABLE1 就是來自 TABLE2。
B: EXCEPT 運算符
EXCEPT 運算符通過包括所有在 TABLE1 中但不在 TABLE2 中的行並消除所有重復行而派生出一個結果表。當 ALL 隨 EXCEPT 一起使用時 (EXCEPT ALL),不消除重復行。
C: INTERSECT 運算符
INTERSECT 運算符通過只包括 TABLE1 和 TABLE2 中都有的行並消除所有重復行而派生出一個結果表。當 ALL 隨 INTERSECT 一起使用時 (INTERSECT ALL),不消除重復行。
註:使用運算詞的幾個查詢結果行必須是一致的。
12、說明:使用外連接
A、left outer join:
左外連接(左連接):結果集幾包括連接表的匹配行,也包括左連接表的所有行。
SQL: select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c
B:right outer join:
右外連接(右連接):結果集既包括連接表的匹配連接行,也包括右連接表的所有行。
C:full outer join:
全外連接:不僅包括符號連接表的匹配行,還包括兩個連接表中的所有記錄。
其次,大家來看一些不錯的sql語句
1、說明:復製表(只復制結構,源表名:a 新表名:b) (Access可用)
法一:select * into b from a where 1<>1
法二:select top 0 * into b from a
2、說明:拷貝表(拷貝數據,源表名:a 目標表名:b) (Access可用)
insert into b(a, b, c) select d,e,f from b;
3、說明:跨資料庫之間表的拷貝(具體數據使用絕對路徑) (Access可用)
insert into b(a, b, c) select d,e,f from b in 『具體資料庫』 where 條件
例子:..from b in '"&Server.MapPath(".")&"\data.mdb" &"' where..
4、說明:子查詢(表名1:a 表名2:b)
select a,b,c from a where a IN (select d from b ) 或者: select a,b,c from a where a IN (1,2,3)
5、說明:顯示文章、提交人和最後回復時間
select a.title,a.username,b.adddate from table a,(select max(adddate) adddate from table where table.title=a.title) b
6、說明:外連接查詢(表名1:a 表名2:b)
select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c
7、說明:在線視圖查詢(表名1:a )
select * from (SELECT a,b,c FROM a) T where t.a > 1;
8、說明:between的用法,between限制查詢數據范圍時包括了邊界值,not between不包括
select * from table1 where time between time1 and time2
select a,b,c, from table1 where a not between 數值1 and 數值2
9、說明:in 的使用方法
select * from table1 where a [not] in (『值1』,』值2』,』值4』,』值6』)
10、說明:兩張關聯表,刪除主表中已經在副表中沒有的信息
delete from table1 where not exists ( select * from table2 where table1.field1=table2.field1 )
11、說明:四表聯查問題:
select * from a left inner join b on a.a=b.b right inner join c on a.a=c.c inner join d on a.a=d.d where .....
12、說明:日程安排提前五分鍾提醒
SQL: select * from 日程安排 where datediff('minute',f開始時間,getdate())>5
13、說明:一條sql 語句搞定資料庫分頁
select top 10 b.* from (select top 20 主鍵欄位,排序欄位 from 表名 order by 排序欄位 desc) a,表名 b where b.主鍵欄位 = a.主鍵欄位 order by a.排序欄位
14、說明:前10條記錄
select top 10 * form table1 where 范圍
15、說明:選擇在每一組b值相同的數據中對應的a最大的記錄的所有信息(類似這樣的用法可以用於論壇每月排行榜,每月熱銷產品分析,按科目成績排名,等等.)
select a,b,c from tablename ta where a=(select max(a) from tablename tb where tb.b=ta.b)
16、說明:包括所有在 TableA 中但不在 TableB和TableC 中的行並消除所有重復行而派生出一個結果表
(select a from tableA ) except (select a from tableB) except (select a from tableC)
17、說明:隨機取出10條數據
select top 10 * from tablename order by newid()
18、說明:隨機選擇記錄
select newid()
19、說明:刪除重復記錄
Delete from tablename where id not in (select max(id) from tablename group by col1,col2,...)
20、說明:列出資料庫里所有的表名
select name from sysobjects where type='U'
21、說明:列出表裡的所有的
select name from syscolumns where id=object_id('TableName')
22、說明:列示type、vender、pcs欄位,以type欄位排列,case可以方便地實現多重選擇,類似select 中的case。
select type,sum(case vender when 'A' then pcs else 0 end),sum(case vender when 'C' then pcs else 0 end),sum(case vender when 'B' then pcs else 0 end) FROM tablename group by type
顯示結果:
type vender pcs
電腦 A 1
電腦 A 1
光碟 B 2
光碟 A 2
手機 B 3
手機 C 3
23、說明:初始化表table1
TRUNCATE TABLE table1
24、說明:選擇從10到15的記錄
select top 5 * from (select top 15 * from table order by id asc) table_別名 order by id desc
隨機選擇資料庫記錄的方法(使用Randomize函數,通過SQL語句實現)
對存儲在資料庫中的數據來說,隨機數特性能給出上面的效果,但它們可能太慢了些。你不能要求ASP「找個隨機數」然後列印出來。實際上常見的解決方案是建立如下所示的循環:
Randomize
RNumber = Int(Rnd*499) +1
While Not objRec.EOF
If objRec("ID") = RNumber THEN
... 這里是執行腳本 ...
end if
objRec.MoveNext
Wend
這很容易理解。首先,你取出1到500范圍之內的一個隨機數(假設500就是資料庫內記錄的總數)。然後,你遍歷每一記錄來測試ID 的值、檢查其是否匹配RNumber。滿足條件的話就執行由THEN 關鍵字開始的那一塊代碼。假如你的RNumber 等於495,那麼要循環一遍資料庫花的時間可就長了。雖然500這個數字看起來大了些,但相比更為穩固的企業解決方案這還是個小型資料庫了,後者通常在一個資料庫內就包含了成千上萬條記錄。這時候不就死定了?
採用SQL,你就可以很快地找出准確的記錄並且打開一個只包含該記錄的recordset,如下所示:
Randomize
RNumber = Int(Rnd*499) + 1
SQL = "SELECT * FROM Customers WHERE ID = " & RNumber
set objRec = ObjConn.Execute(SQL)
Response.WriteRNumber & " = " & objRec("ID") & " " & objRec("c_email")
不必寫出RNumber 和ID,你只需要檢查匹配情況即可。只要你對以上代碼的工作滿意,你自可按需操作「隨機」記錄。Recordset沒有包含其他內容,因此你很快就能找到你需要的記錄這樣就大大降低了處理時間。
再談隨機數
現在你下定決心要榨乾Random 函數的最後一滴油,那麼你可能會一次取出多條隨機記錄或者想採用一定隨機范圍內的記錄。把上面的標准Random 示例擴展一下就可以用SQL應對上面兩種情況了。
為了取出幾條隨機選擇的記錄並存放在同一recordset內,你可以存儲三個隨機數,然後查詢資料庫獲得匹配這些數字的記錄:
SQL = "SELECT * FROM Customers WHERE ID = " & RNumber & " OR ID = " & RNumber2 & " OR ID = " & RNumber3
假如你想選出10條記錄(也許是每次頁面裝載時的10條鏈接的列表),你可以用BETWEEN 或者數學等式選出第一條記錄和適當數量的遞增記錄。這一操作可以通過好幾種方式來完成,但是 SELECT 語句只顯示一種可能(這里的ID 是自動生成的號碼):
SQL = "SELECT * FROM Customers WHERE ID BETWEEN " & RNumber & " AND " & RNumber & "+ 9"
注意:以上代碼的執行目的不是檢查資料庫內是否有9條並發記錄。
隨機讀取若干條記錄,測試過
Access語法:SELECT top 10 * From 表名 ORDER BY Rnd(id)
Sql server:select top n * from 表名 order by newid()
mysql select * From 表名 Order By rand() Limit n
Access左連接語法(最近開發要用左連接,Access幫助什麼都沒有,網上沒有Access的SQL說明,只有自己測試, 現在記下以備後查)
語法 select table1.fd1,table1,fd2,table2.fd2 From table1 left join table2 on table1.fd1,table2.fd1 where ...
使用SQL語句 用...代替過長的字元串顯示
語法:
SQL資料庫:select case when len(field)>10 then left(field,10)+'...' else field end as news_name,news_id from tablename
Access資料庫:SELECT iif(len(field)>2,left(field,2)+'...',field) FROM tablename;
Conn.Execute說明
Execute方法
該方法用於執行SQL語句。根據SQL語句執行後是否返回記錄集,該方法的使用格式分為以下兩種:
1.執行SQL查詢語句時,將返回查詢得到的記錄集。用法為:
Set 對象變數名=連接對象.Execute("SQL 查詢語言")
Execute方法調用後,會自動創建記錄集對象,並將查詢結果存儲在該記錄對象中,通過Set方法,將記錄集賦給指定的對象保存,以後對象變數就代表了該記錄集對象。
2.執行SQL的操作性語言時,沒有記錄集的返回。此時用法為:
連接對象.Execute "SQL 操作性語句" [, RecordAffected][, Option]
•RecordAffected 為可選項,此出可放置一個變數,SQL語句執行後,所生效的記錄數會自動保存到該變數中。通過訪問該變數,就可知道SQL語句隊多少條記錄進行了操作。
•Option 可選項,該參數的取值通常為adCMDText,它用於告訴ADO,應該將Execute方法之後的第一個字元解釋為命令文本。通過指定該參數,可使執行更高效。
•BeginTrans、RollbackTrans、CommitTrans方法
這三個方法是連接對象提供的用於事務處理的方法。BeginTrans用於開始一個事物;RollbackTrans用於回滾事務;CommitTrans用於提交所有的事務處理結果,即確認事務的處理。
事務處理可以將一組操作視為一個整體,只有全部語句都成功執行後,事務處理才算成功;若其中有一個語句執行失敗,則整個處理就算失敗,並恢復到處里前的狀態。
BeginTrans和CommitTrans用於標記事務的開始和結束,在這兩個之間的語句,就是作為事務處理的語句。判斷事務處理是否成功,可通過連接對象的Error集合來實現,若Error集合的成員個數不為0,則說明有錯誤發生,事務處理失敗。Error集合中的每一個Error對象,代表一個錯誤信息。
資料引用:http://www.knowsky.com/398670.html
Ⅱ pgsql在存儲過程中如何指定schema
pgsql在存儲過程中運行一條SQL語句指定schema。pgsql在存儲過程中,實際上可用的方法是通過運行一條SQL語句,將用戶的searchpath設置為指定的schema。
Ⅲ postgressql數據源怎麼配置
PostgresSQL提供了許多資料庫配置參數,本章將介紹每個參數的作用和如何配置每一個參數。
10.1 如何設置資料庫參數
所有的參數的名稱都是不區分大小寫的。每個參數的取值是布爾型、整型、浮點型和字元串型這四種類型中的一個,分別用boolean
、integer、 floating point和string表示。布爾型的值可以寫成ON、OFF、 TRUE、 FALSE、 YES、 NO、 1和 0,而且不區分大小
寫。
有些參數用來配置內存大小和時間值。內存大小的單位可以是KB、MB和GB。時間的單位可以是毫秒、秒、分鍾、小時和天。用ms表示
毫秒,用s表示秒,用 min表示分鍾,用h表示小時,用d表示天。表示內存大小和時間值的參數參數都有一個默認的單位,如果用戶
在設置參數的值時沒有指定單位,則以參數默認的 單位為准。例如,參數shared_buffers表示數據緩沖區的大小,它的默認單位是
數據塊的個數,如果把它的值設成8,因為每個數據塊的大小是 8KB,則數據緩沖區的大小是8*8=64KB,如果將它的值設成128MB,
則數據緩沖區的大小是128MB。參數vacuum_cost_delay 的默認單位是毫秒,如果把它的值設成10,則它的值是10毫秒,如果把它的
值設成100s,則它的值是100秒。
所有的參數都放在文件 postgresql.conf中,下面是一個文件實例:
#這是注釋
log_connections = yes
log_destination = 'syslog'
search_path = '"$user", public'
每一行只能指定一個參數,空格和空白行都會被忽略。「 #」表示注釋,注釋信息不用單獨佔一行,可以出現在配置文件的任何地方
。如果參數的值不是簡單的標識符和數字,應該用單引號引起來。如果參數的值中有單引號,應該寫兩個單引號,或者在單引號前面
加一個反斜杠。
一個配置文件也可以包含其它配置文件,使用include指令能夠達到這個目的,例如,假設postgresql.conf文件中有下面一行:
include 『my.confg』
文件my.config中的配置信息也會被資料庫讀入。include指令指定的配置文件也可以用include指令再包含其它配置文件。如果
include指令中指定的文件名不是絕對路徑,資料庫會在postgresql.conf文件所在的目錄下查找這個文件。
用戶也可以在資料庫啟動以後修改postgresql.conf配置文件,使用命令pg_ctl reload來通知資料庫重新讀取配置文件。注意,有些
參數在資料庫啟動以後,不能被修改,只有重新啟動資料庫以後,新的參數值才能生效。另外一些參數可 以在資料庫運行過程中被
修改而且新的值可以立即生效。所以資料庫在運行過程中重新讀取參數配置文件以後,不是所有的參數都會被賦給新的值。
用戶可以在自己建立的會話中執行命令SET修改某些配置參數的值(注意不是全部參數),例如:
SET ENABLE_SEQSCAN TO OFF;
另外,有些參數只有資料庫超級用戶才能使用SET命令修改它們。用戶可以在psql中執行命令show來查看所有的資料庫參數的當前值
。例如:
(1)show all; --查看所有資料庫參數的值
(2)show search_path; --查看參數search_path的值
10.2 連接與認證
10.2.1 連接設置
listen_addresses (string)
這個參數只有在啟動資料庫時,才能被設置。它指定資料庫用來監聽客戶端連接的TCP/IP地址。默認是值是* ,表示資料庫在啟動以
後將在運行數據的機器上的所有的IP地址上監聽用戶請求(如果機器只有一個網卡,只有一個IP地址,有多個網卡的機器有多個 IP
地址)。可以寫成機器的名字,也可以寫成IP地址,不同的值用逗號分開,例如,』server01』, 』140.87.171.49, 140.87.171.21
』。如果被設成localhost,表示資料庫只能接受本地的客戶端連接請求,不能接受遠程的客戶端連接請求。
port (integer)
這個參數只有在啟動資料庫時,才能被設置。它指定資料庫監聽戶端連接的TCP埠。默認值是5432。
max_connections (integer)
這個參數只有在啟動資料庫時,才能被設置。它決定資料庫可以同時建立的最大的客戶端連接的數目。默認值是100。
superuser_reserved_connections (integer)
這個參數只有在啟動資料庫時,才能被設置。它表示預留給超級用戶的資料庫連接數目。它的值必須小於max_connections。 普通用
戶可以在資料庫中建立的最大的並發連接的數目是max_connections- superuser_reserved_connections, 默認值是3。
unix_socket_group (string)
這個參數只有在啟動資料庫時,才能被設置。設置Unix-domain socket所在的操作系統用戶組。默認值是空串,用啟動資料庫的操作
系統用戶所在的組作為Unix-domain socket的用戶組。
unix_socket_permissions (integer)
這個參數只有在啟動資料庫時,才能被設置。它設置Unix-domain socket的訪問許可權,格式與操作系統的文件訪問許可權是一樣的。默
認值是0770,表示任何操作系統用戶都能訪問Unix-domain socket。可以設為0770(所有Unix-domain socket文件的所有者所在的組
包含的用戶都能訪問)和0700(只有Unix-domain socket文件的所有者才能訪問)。對於Unix-domain socket,只有寫許可權才有意義,
讀和執行許可權是沒有意義的。
tcp_keepalives_idle (integer)
這個參數可以在任何時候被設置。默認值是0,意思是使用操作系統的默認值。它設置TCP套接字的TCP_KEEPIDLE屬性。這個參數對於
通過Unix-domain socket建立的資料庫連接沒有任何影響。
tcp_keepalives_interval (integer)
這個參數可以在任何時候被設置。默認值是0,意思是使用操作系統的默認值。它設置TCP套接字的TCP_KEEPINTVL屬性。這個參數對
於通過Unix-domain socket建立的資料庫連接沒有任何影響。
tcp_keepalives_count (integer)
這個參數可以在任何時候被設置。默認值是0,意思是使用操作系統的默認值。它設置TCP套接字的TCP_KEEPCNT屬性。這個參數對於
通過Unix-domain socket建立的資料庫連接沒有任何影響。
10.2.2. 安全與認證
authentication_timeout (integer)
這個參數只能在postgresql.conf文件中被設置,它指定一個時間長度,在這個時間長度內,必須完成客戶端認證操作,否則客戶端
連接請求將被拒絕。它可以阻止某些客戶端進行認證時長時間佔用資料庫連接。單位是秒,默認值是60。
ssl (boolean)
這個參數只有在啟動資料庫時,才能被設置。決定資料庫是否接受SSL連接。默認值是off。
ssl_ciphers (string)
指定可以使用的SSL加密演算法。查看操作系統關於openssl的用戶手冊可以得到完整的加密演算法列表(執行命令openssl ciphers –v
也可以得到)。
10.3 資源消耗
10.3.1 內存
shared_buffers (integer)
這個參數只有在啟動資料庫時,才能被設置。它表示數據緩沖區中的數據塊的個數,每個數據塊的大小是8KB。數據緩沖區位於數據
庫的共享內存中,它越大越好,不能小於128KB。默認值是1024。
temp_buffers (integer)
這個參數可以在任何時候被設置。默認值是8MB。它決定存放臨時表的數據緩沖區中的數據塊的個數,每個數據塊的大小是8KB。臨時
表緩沖區存放在每個資料庫進程的私有內存中,而不是存放在資料庫的共享內存中。默認值是1024。
max_prepared_transactions (integer)
這個參數只有在啟動資料庫時,才能被設置。它決定能夠同時處於prepared狀態的事務的最大數目(參考PREPARE TRANSACTION命令
)。如果它的值被設為0。則將資料庫將關閉prepared事務的特性。它的值通常應該和max_connections的值 一樣大。默認值是5。
work_mem (integer)
這個參數可以在任何時候被設置。它決定資料庫的排序操作和哈希表使用的內存緩沖區的大小。如何work_mem指定的內存被耗盡,數
據庫將使用磁碟文件進 行完成操作,速度會慢很多。ORDER BY、DISTINCT和merge連接會使用排序操作。哈希表在Hash連接、hash聚
集函數和用哈希表來處理IN謂詞中的子查詢中被使用。單位是 KB,默認值是1024。
maintenance_work_mem (integer)
這個參數可以在任何時候被設置。它決定資料庫的維護操作使用的內存空間的大小。資料庫的維護操作包括VACUUM、CREATE INDEX和
ALTER TABLE ADD FOREIGN KEY等操作。 maintenance_work_mem的值如果比較大,通常可以縮短VACUUM資料庫和從mp文件中恢復數
據庫需要的時間。 maintenance_work_mem存放在每個資料庫進程的私有內存中,而不是存放在資料庫的共享內存中。單位是KB,默
認值是16384。
max_stack_depth (integer)
這個參數可以在任何時候被設置,但只有資料庫超級用戶才能修改它。它決定一個資料庫進程在運行時的STACK所佔的空間的最大值
。資料庫進程在運行時,會 自動檢查自己的STACK大小是否超過max_stack_depth,如果超過,會自動終止當前事務。這個值應該比
操作系統設置的進程STACK的大小 的上限小1MB。使用操作系統命令「ulimit –s「可以得到操作系統設置的進程STACK的最大值。單
位是KB,默認值是100。
10.3.2 Free Space Map
資料庫的所有可用空間信息都存放在一個叫free space map (FSM)的結構中,它記載數據文件中每個數據塊的可用空間的大小。FSM
中沒有記錄的數據塊,即使有可用空間,也不會系統使用。系統如果需要新的物理存 儲空間,會首先在FSM中查找,如果FSM中沒有
一個數據頁有足夠的可用空間,系統就會自動擴展數據文件。所以,FSM如果太小,會導致系統頻繁地擴展數 據文件,浪費物理存儲
空間。命令VACUUM VERBOSE在執行結束以後,會提示當前的FSM設置是否滿足需要,如果FSM的參數值太小,它會提示增大參數。
FSM存放在資料庫的共享內存中,由於物理內存的限制,FSM不可能跟蹤資料庫的所有的數據文件的所有數據塊的可用空間信息,只能
跟蹤一部分數據塊的可用空間信息。
max_fsm_relations (integer)
這個參數只有在啟動資料庫時,才能被設置。默認值是1000。它決定FSM跟蹤的表和索引的個數的上限。每個表和索引在FSM中佔7個
位元組的存儲空間。
max_fsm_pages (integer)
這個參數只有在啟動資料庫時,才能被設置。它決定FSM中跟蹤的數據塊的個數的上限。initdb在創建資料庫集群時會根據物理內存
的大小決定它的值。每 個數據塊在fsm中佔6個位元組的存儲空間。它的大小不能小於16 * max_fsm_relations。默認值是20000。
10.3.3 內核資源
max_files_per_process (integer)
這個參數只有在啟動資料庫時,才能被設置。他設定每個資料庫進程能夠打開的文件的數目。默認值是1000。
shared_preload_libraries (string)
這個參數只有在啟動資料庫時,才能被設置。它設置資料庫在啟動時要載入的操作系統共享庫文件。如果有多個庫文件,名字用逗號
分開。如果資料庫在啟動時未找到shared_preload_libraries指定的某個庫文件,資料庫將無法啟動。默認值為空串。
10.3.4 垃圾收集
執行VACUUM 和ANALYZE命令時,因為它們會消耗大量的CPU與IO資源,而且執行一次要花很長時間,這樣會干擾系統執行應用程序發
出的SQL命令。為了解決這個 問題,VACUUM 和ANALYZE命令執行一段時間後,系統會暫時終止它們的運行,過一段時間後再繼續執行
這兩個命令。這個特性在默認的情況下是關閉的。將參數 vacuum_cost_delay設為一個非零的正整數就可以打開這個特性。
用戶通常只需要設置參數vacuum_cost_delay和vacuum_cost_limit,其它的參數使用默認值即可。VACUUM 和ANALYZE命令在執行過程
中,系統會計算它們執行消耗的資源,資源的數量用一個正整數表示,如果資源的數量超過 vacuum_cost_limit,則執行命令的進程
會進入睡眠狀態,睡眠的時間長度是是vacuum_cost_delay。 vacuum_cost_limit的值越大,VACUUM 和ANALYZE命令在執行的過程中
,睡眠的次數就越少,反之,vacuum_cost_limit的值越小,VACUUM 和ANALYZE命令在執行的過程中,睡眠的次數就越多。
vacuum_cost_delay (integer)
這個參數可以在任何時候被設置。默認值是0。它決定執行VACUUM 和ANALYZE命令的進程的睡眠時間。單位是微秒。它的值最好是10
的整數,如果不是10的整數,系統會自動將它設為比該值大的並且最接近該值的是10 的倍數的整數。如果值是0,VACUUM 和ANALYZE
命令在執行過程中不會主動進入睡眠狀態,會一直執行下去直到結束。
vacuum_cost_page_hit (integer)
這個參數可以在任何時候被設置。默認值是1。
vacuum_cost_page_miss (integer)
這個參數可以在任何時候被設置。默認值是10。
vacuum_cost_page_dirty (integer)
這個參數可以在任何時候被設置。默認值是20。
vacuum_cost_limit (integer)
這個參數可以在任何時候被設置。默認值是200。
10.3.5 後台寫資料庫進程
後台寫資料庫進程負責將數據緩沖區中的被修改的數據塊(又叫臟數據塊)寫回到資料庫物理文件中。
bgwriter_delay (integer)
這個參數只能在文件postgresql.conf中設置。它決定後台寫資料庫進程的睡眠時間。後台寫資料庫進程每次完成寫數據到物理文件
中的任務以後, 就會睡眠bgwriter_delay指定的時間。 bgwriter_delay的值應該是10的倍數,如果用戶設定的值不是10的倍數,數
據庫會自動將參數的值設為比用戶指定的值大的最接近用戶指定的值 的同時是10的倍數的值。單位是毫秒,默認值是200。
bgwriter_lru_maxpages (integer)
這個參數只能在文件postgresql.conf中設置。默認值是100。後台寫資料庫進程每次寫臟數據塊時,寫到外部文件中的臟數據塊的個
數不能超過 bgwriter_lru_maxpages指定的值。例如,如果它的值是500,則後台寫資料庫進程每次寫到物理文件的數據頁的個數不
能超過500,若 超過,進程將進入睡眠狀態,等下次醒來再執行寫物理文件的任務。如果它的值被設為0, 後台寫資料庫進程將不會
寫任何物理文件(但還會執行檢查點操作)。
bgwriter_lru_multiplier (floating point)
這個參數只能在文件postgresql.conf中設置。默認值是2.0。它決定後台寫資料庫進程每次寫物理文件時,寫到外部文件中的臟數據
塊的個數 (不能超過bgwriter_lru_maxpages指定的值)。一般使用默認值即可,不需要修改這個參數。這個參數的值越大,後台寫
資料庫進程每次寫 的臟數據塊的個數就越多。
10.4 事務日誌
full_page_writes (boolean)
這個參數只能在postgresql.conf文件中被設置。默認值是on。打開這個參數,可以提高資料庫的可靠性,減少數據丟失的概率,但
是會產生過多的事務日誌,降低資料庫的性能。
wal_buffers (integer)
這個參數只有在啟動資料庫時,才能被設置。默認值是8。它指定事務日誌緩沖區中包含的數據塊的個數,每個數據塊的大小是8KB,
所以默認的事務日誌緩沖區的大小是8*8=64KB。事務日誌緩沖區位於資料庫的共享內存中。
wal_writer_delay (integer)
這個參數只能在postgresql.conf文件中被設置。它決定寫事務日誌進程的睡眠時間。WAL進程每次在完成寫事務日誌的任務後,就會
睡眠 wal_writer_delay指定的時間,然後醒來,繼續將新產生的事務日誌從緩沖區寫到WAL文件中。單位是毫秒(millisecond),
默認 值是200。
commit_delay (integer)
這個參數可以在任何時候被設置。它設定事務在發出提交命令以後的睡眠時間,只有在睡眠了commit_delay指定的時間以後,事務產
生的事務日誌才會 被寫到事務日誌文件中,事務才能真正地提交。增大這個參數會增加用戶的等待時間,但是可以讓多個事務被同
時提交,提高系統的性能。如果資料庫中的負載比較 高,而且大部分事務都是更新類型的事務,可以考慮增大這個參數的值。下面
的參數commit_siblings會影響commit_delay是否生效。 默認值是0,單位是微秒(microsecond)。
commit_siblings (integer)
這個參數可以在任何時候被設置。這個參數的值決定參數commit_delay是否生效。假設commit_siblings的值是5,如果一個事務發出
一個提交請求,此時,如果資料庫中正在執行的事務的個數大於或等於5,那麼該事務將睡眠commit_delay指定的時間。如果資料庫
中正在執行的事務 的個數小於5,這個事務將直接提交。默認值是5。
10.5 檢查點
checkpoint_segments (integer)
這個參數只能在postgresql.conf文件中被設置。默認值是3。它影響系統何時啟動一個檢查點操作。如果上次檢查點操作結束以後,
系統產生的事 務日誌文件的個數超過checkpoint_segments的值,系統就會自動啟動一個檢查點操作。增大這個參數會增加資料庫崩
潰以後恢復操作需要的時 間。
checkpoint_timeout (integer)
這個參數只能在postgresql.conf文件中被設置。單位是秒,默認值是300。它影響系統何時啟動一個檢查點操作。如果現在的時間減
去上次檢查 點操作結束的時間超過了checkpoint_timeout的值,系統就會自動啟動一個檢查點操作。增大這個參數會增加資料庫崩
潰以後恢復操作需要的時 間。
checkpoint_completion_target (floating point)
這個參數控制檢查點操作的執行時間。合法的取值在0到1之間,默認值是0.5。不要輕易地改變這個參數的值,使用默認值即可。 這
個參數只能在postgresql.conf文件中被設置。
10.6 歸檔模式
archive_mode (boolean)
這個參數只有在啟動資料庫時,才能被設置。默認值是off。它決定資料庫是否打開歸檔模式。
archive_dir (string)
這個參數只有在啟動資料庫時,才能被設置。默認值是空串。它設定存放歸檔事務日誌文件的目錄。
archive_timeout (integer)
這個參數只能在postgresql.conf文件中被設置。默認值是0。單位是秒。如果archive_timeout的值不是0,而且當前時間減去數 據
庫上次進行事務日誌文件切換的時間大於archive_timeout的值,資料庫將進行一次事務日誌文件切換。一般情況下,資料庫只有在
一個事務日誌 文件寫滿以後,才會切換到下一個事務日誌文件,設定這個參數可以讓資料庫在一個事務日誌文件尚未寫滿的情況下
切換到下一個事務日誌文件。
10.7 優化器參數
10.7.1 存取方法參數
下列參數控制查詢優化器是否使用特定的存取方法。除非對優化器特別了解,一般情況下,使用它們默認值即可。
enable_bitmapscan (boolean)
打開或者關閉bitmap-scan 。默認值是 on。
enable_hashagg (boolean)
打開或者關閉hashed aggregation。默認值是 on。
enable_hashjoin (boolean)
打開或者關閉hash-join。默認值是 on。
enable_indexscan (boolean)
打開或者關閉index-scan。默認值是 on。
enable_mergejoin (boolean)
打開或者關閉merge-join。默認值是 on。
enable_nestloop (boolean)
打開或者關閉nested-loop join。默認值是 on。不可能完全不使用nested-loop join,關閉這個參數會讓系統在有其它存取方法可
用的情況下,不使用nested-loop join。
enable_seqscan (boolean)
打開或者關閉sequential scan。默認值是 on。不可能完全不使用sequential scan,關閉這個參數會讓系統在有其它存取方法可用
的情況下,不使用sequential scan。
Ⅳ SQL里的 show search_path可以顯示當前搜索路徑。請問show search_path在哪裡輸入
新建查詢
Ⅳ SQL必知必會(第五版)
去重 :使用DISTINCT關鍵字,它必須直接放在列名的前面。
檢索前5行數據:
LIMIT 5 OFFSET 5指示MySQL等DBMS返回從第5行起的5行數據。第一個數字是檢索的行數,第二個數字是指從哪兒開始。
2.1 排序數據
注意: ORDER BY 子句的位置在指定一條ORDER BY子句時,應該保證它是 SELECT語句中最後一條子句 。如果它不是最後的子句,將會出錯。
ORDER BY 2, 3表示先按prod_price,再按prod_name進行排序。
好處在於不用重新輸入列名。
缺點。首先,不明確給出列名有可能造成錯用列名排序。其次,在對SELECT清單進行更改時容易錯誤地對數據進行排序(忘記對ORDER BY子句做相應的改動)。最後,如果進行排序的列不在SELECT清單中,顯然不能使用這項技術。
DESC 是DESCENDING的縮寫,這兩個關鍵字都可以使用。與DESC相對的是 ASC (或ASCENDING),在升序(A→Z)排序時可以指定它。但實際上,ASC沒有多大用處,因為升序是默認的(如果既不指定ASC也不指定DESC,則假定為ASC)。
DESC關鍵字只應用到直接位於其前面的列名。如果想在多個列上進行降序排序,必須對每一列指定DESC關鍵字。
在SELECT語句中,數據根據WHERE子句中指定的搜索條件進行過濾。WHERE子句在表名(FROM子句)之後給出。
在同時使用ORDER BY和WHERE子句時,應該讓ORDER BY位於WHERE之後,否則將會產生錯誤。
提示: 單引號用來限定字元串。如果將值與字元串類型的列進行比較,就需要限定引號。用來與數值列進行比較的值不用引號。
操作符(operator) 用來聯結或改變WHERE子句中的子句的關鍵字,也稱為邏輯操作符(logicaloperator)。
AND 用在WHERE子句中的關鍵字,用來指示檢索滿足所有給定條件的行。
一個AND子句,只有兩個過濾條件。可以增加多個過濾條件,每個條件間都要使用AND關鍵字。
ORDER BY子句,放在WHERE子句之後。
OR: WHERE子句中使用的關鍵字,用來表示檢索匹配任一給定條件的行。
SQL(像多數語言一樣)在處理OR操作符前,優先處理AND操作符。
圓括弧具有比AND或OR操作符更高的優先順序。
任何時候使用具有AND和OR操作符的WHERE子句,都應該使用圓括弧明確地分組操作符。
IN:WHERE子句中用來指定要匹配值的清單的關鍵字,功能與OR相當。
IN操作符一般比一組OR操作符執行得更快。
IN的最大優點是可以包含其他SELECT語句,能夠更動態地建立WHERE子句。
NOT: WHERE子句中用來否定其後條件的關鍵字。
通配符(wildcard) 用來匹配值的一部分的特殊字元。
搜索模式(search pattern) 由字面值、通配符或兩者組合構成的搜索條件。
說明:區分大小寫根據DBMS的不同及其配置,搜索可以是區分大小寫的。如果區分大小寫,則』fish%』與Fish bean bag toy就不匹配。
除了能匹配一個或多個字元外,%還能匹配0個字元。%代表搜索模式中給定位置的0個、1個或多個字元。
'%』不會匹配名稱為NULL的行。
下劃線的用途與%一樣,但它只匹配單個字元,而不是多個字元。
與%能匹配多個字元不同,_總是剛好匹配一個字元,不能多也不能少。
此語句的WHERE子句中的模式為』[JM]%'。這一搜索模式使用了兩個不同的通配符。[JM]匹配方括弧中任意一個字元,它也只能匹配單個字元。因此,任何多於一個字元的名字都不匹配。[JM]之後的%通配符匹配第一個字元之後的任意數目的字元,返回所需結果。
也可以使用NOT操作符得出類似的結果。^的唯一優點是在使用多個WHERE子句時可以簡化語法:
例如:
拼接(concatenate)
將值聯結到一起(將一個值附加到另一個值)構成單個值。
操作符可用加號(+)或兩個豎杠(||)表示。
說明:是+還是||?SQL Server使用+號。DB2、Oracle、PostgreSQL和SQLite使用||。在MySQL和MariaDB中,必須使用特殊的函數。
說明: TRIM函數 大多數DBMS都支持 RTRIM() (去掉字元串右邊的空格)、 LTRIM() (去掉字元串左邊的空格)以及 TRIM() (去掉字元串左右兩邊的空格)。
SQL支持列別名。 別名(alias) 是一個欄位或值的替換名。別名用 AS 關鍵字賦予。
AS關鍵字可選,最好用它。
提示:如何測試計算
SELECT語句為測試、檢驗函數和計算提供了很好的方法。雖然SELECT通常用於從表中檢索數據,但是省略了FROM子句後就是簡單地訪問和處理表達式,例如SELECT 3*2;將返回6,SELECT Trim(' abc ');將返回abc,SELECT Curdate();使用Curdate()函數返回當前日期和時間。
UPPER()函數: 將文本轉換為大寫。
SQL函數不區分大小寫,因此upper(), UPPER(), Upper()都可以,substr(), SUBSTR(), SubStr()也都行。
Ⅵ 建立全文檢索的sql語句
前言:微軟的SQL Server資料庫是一個在中低端企業應用中佔有廣泛市場的關系型資料庫系統,它以簡單、方便、易用等特性深得眾多軟體開發人員和資料庫管理人員的鍾愛。但SQL Server 7.0以前的資料庫系統由於沒有全文檢索功能,致使無法提供像文本內容查找此類的服務,成為一個小小的遺憾。從SQL Server 7.0起,到如今的SQL Server 2000終於具備了全文檢索功能,使用戶可以高效地檢索存儲在資料庫char、varchar、text、ntext、nchar、nvarchar等數據類型列中的文本數據。
建立全文索引
在進行全文檢索之前,必須先建立和填充資料庫全文索引。為了支持全文索引操作,SQL Server 7.0新增了一些存儲過程和Transact-SQL語句。使用這些存儲過程創建全文索引的具體步驟如下(括弧內為調用的存儲過程名稱):
1. 啟動資料庫的全文處理功能(sp_fulltext_
database);;
2. 建立全文檢索目錄(sp_fulltext_catalog);
3.在全文檢索目錄中注冊需要全文索引的表(sp_fulltext_table);
4. 指出表中需要全文檢索的列名(sp_fulltext_
column);;
5. 為表創建全文索引(sp_fulltext_table);;
6. 填充全文檢索目錄(sp_fulltext_catalog)。
下面舉例說明如何創建全文索引,在本例中,對Test資料庫Book表中Title列和Notes列建立全文索引。
use test //打開資料庫
//打開全文索引支持,啟動SQL Server的全文搜索服務
execute sp_fulltext_database 『enable』
//建立全文檢索目錄ft_test
execute sp_fulltext_catalog 『ft_test』, 『create』
為Title列建立全文索引數據元,pk_title為Book表中由主鍵所建立的唯一索引,這個參數是必需的。
execute sp_fulltext_table 『book』,『create』, 『ft_test』,『pk_title』
//設置全文索引列名
execute sp_fulltext_column 『book』, 『title』, 『add』
execute sp_fulltext_column 『book』,『notes』, 『add』
//建立全文索引
execute sp_fulltext_table 『book』, 『activate』
//填充全文索引目錄
execute sp_fulltext_catalog 『ft_test』, 『start_full』
至此,全文索引建立完畢。
進行全文檢索
SQL Server 2000提供的全文檢索語句主要有CONTAINS和FREETEXT。CONTAINS語句的功能是在表的所有列或指定列中搜索:一個字或短語;一個字或短語的前綴;與一個字相近的另一個字;一個字的派生字;一個重復出現的字。
CONTAINS語句的語法格式為:
CONTAINS({column | *}), <contains_search_condition> )
其中,column是搜索列,使用「*」時說明對表中所有全文索引列進行搜索。Contains_search_
condition 說明CONTAINS語句的搜索內容,其語法格式為:
{||||}[{{AND|AND NOT|OR}}] [...n]
下面就simple_term和prefix_term參數做簡要說明:
simple_term是CONTAINS語句所搜索的單字或短語,當搜索的是一個短語時,必須使用雙引號作為定界符。其格式為:
{『word』|「 phrase」}
prefix_term說明CONTAINS語句所搜索的字或短語前綴,其格式為:
{「word*」 | 「phrase*」}
例如,下面語句檢索Book表的Title列和Notes列中包含「database」或「computer」字元串的圖書名稱及其注釋信息:
select title, notes
from book
where contains(tilte, 『database』) or contains(notes,『database』)
or contains(title,『computer』) or contains(notes,『computer』)
FREETEXT語句的功能是在一個表的所有列或指定列中搜索一個自由文本格式的字元串,並返回與該字元串匹配的數據行。所以,FREETEXT語句所執行的功能又稱做自由式全文查詢。
FREETEXT語句的語法格式為:FREETEXT({column | * },『freetext_string』)
其中,column是被搜索列,使用「*」時說明對表中的所有全文索引列進行搜索。Freetext_string參數指出所搜索的自由文本格式字元串。
例如,下面語句使用FREETEXT語句搜索Book表中包含「Successful Life」字元串的數據行:
select title, notes
from book
where freetext(*,『Successful Life』)