1. 程式人生 > >SQL命令和常用語句大全

SQL命令和常用語句大全

學習SQL應知道的動態SQL語句基本語法

1 、普通SQL語句可以用Exec執行 9Kp=A  
' CdaFr1  
eg: Select * from tableName Wsc+A:<" 
Exec('select * from tableName') #Btn(  
Exec sp_executesql N'select * from tableName' -- 請注意字串前一定要加N %BfplhE1a  
AN&)OIDc  
2、欄位名,表名,資料庫名之類作為變數時,必須用動態SQL H2k3./

Ip  
:=r|8#8a  
eg: }"|M#
 MB  
declare @fname varchar(20) WH$1[Gv7  
set @fname = 'FiledName' @#D[C;VvrE  
Select @fname from tableName -- 錯誤,不會提示錯誤,但結果為固定值FiledName,並非所要。 J!_C^,7#  
Exec('select ' + @fname + ' from tableName') -- 請注意 加號前後的 單引號的邊上加空格 \Adve]kD$5  
w/r‑;' \>  
當然將字串改成變數的形式也可 :? Gf%y  
declare @fname varchar(20) r~j >XK3  
set @fname = 'FiledName' --設定欄位名 ! i9mD!G  
w( IfnsP  
declare @s varchar(1000) 7A _?mu  
set @s = 'select ' + @fname + ' from tableName' ezCY_T9m‑  
Exec(@s) -- 成功 ‑W=Q!_X$  
exec sp_executesql @s -- 此句會報錯 vOwTKUb  
By4-}_T+A  
2#sv-v6oH  
declare @s Nvarchar(1000) -- 注意此處改為nvarchar(1000) "A^ !?U OE  
set @s = 'select ' + @fname + ' from tableName' (/Hv6n3Z&  
Exec(@s) -- 成功 ix9 ­Hh{  
exec sp_executesql @s -- 此句正確 ]7UXt*w  
LBf0at0  
3、輸出引數 "kz/7 E\/A  
% +>n<O  
declare @num int, - ]n;kS1S  
@sqls nvarchar(4000) EIA]sr  
set @sqls='select count(*) from tableName' qh ­C‑
[email protected]
 
exec(@sqls) A;vBk­AD  
--如何將exec執行結果放入變數中? f$9`I=j">  
~p.M^M`7E  
declare @num int, 3^={\CUh  
@sqls nvarchar(4000) cI)<Js‑w4P  
set @sqls='select @a=count(*) from tableName ' 2 c],:zB;%  
exec sp_executesql @sqls,N'@a int output',@num output *JA z ^&/  
select @num j3SSiM  
Ft*Ow%Djzm  
此外,如果想要在SQL語句 字串中使用 單引號 '' 可以 使用 ''''

--語 句 功 能


--資料操作
SELECT --從資料庫表中檢索資料行和列
INSERT --向資料庫表新增新資料行
DELETE --從資料庫表中刪除資料行
UPDATE --更新資料庫表中的資料
--資料定義
CREATE TABLE --建立一個數據庫表
DROP TABLE --從資料庫中刪除表
ALTER TABLE --修改資料庫表結構
CREATE VIEW --建立一個檢視
DROP VIEW --從資料庫中刪除檢視
CREATE INDEX --為資料庫表建立一個索引
DROP INDEX --從資料庫中刪除索引
CREATE PROCEDURE --建立一個儲存過程


DROP PROCEDURE --從資料庫中刪除儲存過程
CREATE TRIGGER --建立一個觸發器
DROP TRIGGER --從資料庫中刪除觸發器
CREATE SCHEMA --向資料庫新增一個新模式
DROP SCHEMA --從資料庫中刪除一個模式
CREATE DOMAIN --建立一個數據值域
ALTER DOMAIN --改變域定義
DROP DOMAIN --從資料庫中刪除一個域
--資料控制
GRANT --授予使用者訪問許可權
DENY --拒絕使用者訪問
REVOKE --解除使用者訪問許可權
--事務控制
COMMIT --結束當前事務
ROLLBACK --中止當前事務
SET TRANSACTION --定義當前事務資料訪問特徵
--程式化SQL
DECLARE --為查詢設定遊標
EXPLAN --為查詢描述資料訪問計劃
OPEN --檢索查詢結果開啟一個遊標
FETCH --檢索一行查詢結果
CLOSE --關閉遊標
PREPARE --為動態執行準備SQL 語句
EXECUTE --動態地執行SQL 語句
DESCRIBE --描述準備好的查詢
---區域性變數
declare @id char(10)
--set @id = '10010001'
select @id = '10010001'

---全域性變數
---必須以@@開頭

--IF ELSE
declare @x int @y int @z int
select @x = 1 @y = 2 @z=3
if @x > @y
print 'x > y' --列印字串'x > y'
else if @y > @z
print 'y > z'
else print 'z > y'

--CASE
use pangu
update employee
set e_wage =
case
when job_level = ’1’ then e_wage*1.08
when job_level = ’2’ then e_wage*1.07
when job_level = ’3’ then e_wage*1.06
else e_wage*1.05
end

--WHILE CONTINUE BREAK
declare @x int @y int @c int
select @x = 1 @y=1
while @x < 3
begin
print @x --列印變數x 的值
while @y < 3
begin
select @c = 100*@x + @y
print @c --列印變數c 的值
select @y = @y + 1
end
select @x = @x + 1
select @y = 1
end

--WAITFOR
--例 等待1 小時2 分零3 秒後才執行SELECT 語句
waitfor delay ’01:02:03’
select * from employee
--例 等到晚上11 點零8 分後才執行SELECT 語句
waitfor time ’23:08:00’
select * from employee

***SELECT***



select *(列名) from table_name(表名) where column_name operator value
ex:(宿主)
select * from stock_information where stockid = str(nid)
stockname = 'str_name'
stockname like '% find this %'
stockname like '[a-zA-Z]%' --------- ([]指定值的範圍)
stockname like '[^F-M]%' --------- (^排除指定範圍)
--------- 只能在使用like關鍵字的where子句中使用萬用字元)
or stockpath = 'stock_path'
or stocknumber < 1000
and stockindex = 24
not stock*** = 'man'
stocknumber between 20 and 100
stocknumber in(10,20,30)
order by stockid desc(asc) --------- 排序,desc-降序,asc-升序
order by 1,2 --------- by列號
stockname = (select stockname from stock_information where stockid = 4)
--------- 子查詢
--------- 除非能確保內層select只返回一個行的值,
--------- 否則應在外層where子句中用一個in限定符
select distinct column_name form table_name --------- distinct指定檢索獨有的列值,不重複
select stocknumber ,"stocknumber + 10" = stocknumber + 10 fromtable_name
select stockname , "stocknumber" = count(*) from table_name group bystockname
--------- group by 將表按行分組,指定列中有相同的值
having count(*) = 2 --------- having選定指定的組

select *
from table1, table2
where table1.id *= table2.id -------- 左外部連線,table1中有的而table2中沒有得以null表示
table1.id =* table2.id -------- 右外部連線

select stockname from table1
union [all] ----- union合併查詢結果集,all-保留重複行
select stockname from table2

***insert***

insert into table_name (Stock_name,Stock_number) value("xxx","xxxx")
value (select Stockname , Stocknumber from Stock_table2)---value為select語句

***update***

update table_name set Stockname = "xxx" [where Stockid = 3]
Stockname = default
Stockname = null
Stocknumber = Stockname + 4

***delete***

delete from table_name where Stockid = 3
truncate table_name ----------- 刪除表中所有行,仍保持表的完整性
drop table table_name --------------- 完全刪除表

***alter table*** --- 修改資料庫表結構

alter table database.owner.table_name add column_name char(2) null .....
sp_help table_name ---- 顯示錶已有特徵
create table table_name (name char(20), age smallint, lname varchar(30))
insert into table_name select ......... ----- 實現刪除列的方法(建立新表)
alter table table_name drop constraint Stockname_default ---- 刪除Stockname的default約束

***function(/*常用函式*/)***


----統計函式----
AVG --求平均值
COUNT --統計數目
MAX --求最大值
MIN --求最小值
SUM --求和

--AVG
use pangu
select avg(e_wage) as dept_avgWage
from employee
group by dept_id
--MAX
--求工資最高的員工姓名
use pangu
select e_name
from employee
where e_wage =
(select max(e_wage)
from employee)

--STDEV()
--STDEV()函式返回表示式中所有資料的標準差


--STDEVP()
--STDEVP()函式返回總體標準差


--VAR()
--VAR()函式返回表示式中所有值的統計變異數


--VARP()
--VARP()函式返回總體變異數


----算術函式----


/***三角函式***/
SIN(float_expression) --返回以弧度表示的角的正弦
COS(float_expression) --返回以弧度表示的角的餘弦
TAN(float_expression) --返回以弧度表示的角的正切
COT(float_expression) --返回以弧度表示的角的餘切
/***反三角函式***/
ASIN(float_expression) --返回正弦是FLOAT 值的以弧度表示的角
ACOS(float_expression) --返回餘弦是FLOAT 值的以弧度表示的角
ATAN(float_expression) --返回正切是FLOAT 值的以弧度表示的角
ATAN2(float_expression1,float_expression2)
--返回正切是float_expression1/float_expres-sion2的以弧度表示的角
DEGREES(numeric_expression)
--把弧度轉換為角度返回與表示式相同的資料型別可為
--INTEGER/MONEY/REAL/FLOAT 型別
RADIANS(numeric_expression) --把角度轉換為弧度返回與表示式相同的資料型別可為
--INTEGER/MONEY/REAL/FLOAT 型別
EXP(float_expression) --返回表示式的指數值
LOG(float_expression) --返回表示式的自然對數值
LOG10(float_expression)--返回表示式的以10 為底的對數值
SQRT(float_expression) --返回表示式的平方根
/***取近似值函式***/
CEILING(numeric_expression) --返回>=表示式的最小整數返回的資料型別與表示式相同可為
--INTEGER/MONEY/REAL/FLOAT 型別
FLOOR(numeric_expression) --返回<=表示式的最小整數返回的資料型別與表示式相同可為
--INTEGER/MONEY/REAL/FLOAT 型別
ROUND(numeric_expression) --返回以integer_expression 為精度的四捨五入值返回的資料
--型別與表示式相同可為INTEGER/MONEY/REAL/FLOAT型別
ABS(numeric_expression) --返回表示式的絕對值返回的資料型別與表示式相同可為
--INTEGER/MONEY/REAL/FLOAT 型別
SIGN(numeric_expression) --測試引數的正負號返回0 零值1 正數或-1 負數返回的資料型別
--與表示式相同可為INTEGER/MONEY/REAL/FLOAT型別
PI() --返回值為π 即3.1415926535897936
RAND([integer_expression]) --用任選的[integer_expression]做種子值得出0-1 間的隨機浮點數

----字串函式----
ASCII() --函式返回字元表示式最左端字元的ASCII 碼值
CHAR() --函式用於將ASCII 碼轉換為字元
--如果沒有輸入0 ~255 之間的ASCII碼值CHAR 函式會返回一個NULL 值
LOWER() --函式把字串全部轉換為小寫
UPPER() --函式把字串全部轉換為大寫
STR() --函式把數值型資料轉換為字元型資料
LTRIM() --函式把字串頭部的空格去掉
RTRIM() --函式把字串尾部的空格去掉
LEFT(),RIGHT(),SUBSTRING() --函式返回部分字串
CHARINDEX(),PATINDEX() --函式返回字串中某個指定的子串出現的開始位置
SOUNDEX() --函式返回一個四位字元碼
--SOUNDEX函式可用來查詢聲音相似的字串但SOUNDEX函式對數字和漢字均只返回0 值
DIFFERENCE() --函式返回由SOUNDEX 函式返回的兩個字元表示式的值的差異
--0 兩個SOUNDEX 函式返回值的第一個字元不同
--1 兩個SOUNDEX 函式返回值的第一個字元相同
--2 兩個SOUNDEX 函式返回值的第一二個字元相同
--3 兩個SOUNDEX 函式返回值的第一二三個字元相同
--4 兩個SOUNDEX 函式返回值完全相同

QUOTENAME() --函式返回被特定字元括起來的字串
/*select quotename('abc', '{') quotename('abc')
執行結果如下
----------------------------------{
{abc} [abc]*/


REPLICATE() --函式返回一個重複character_expression 指定次數的字串
/*select replicate('abc', 3) replicate( 'abc', -2)
執行結果如下
----------- -----------
abcabcabc NULL*/


REVERSE() --函式將指定的字串的字元排列順序顛倒
REPLACE() --函式返回被替換了指定子串的字串
/*select replace('abc123g', '123', 'def')
執行結果如下
----------- -----------
abcdefg*/


SPACE() --函式返回一個有指定長度的空白字串
STUFF() --函式用另一子串替換字串指定位置長度的子串


----資料型別轉換函式----
CAST() 函式語法如下
CAST() (<expression> AS <data_ type>[ length ])
CONVERT() 函式語法如下
CONVERT() (<data_ type>[ length ], <expression> [, style])

select cast(100+99 as char) convert(varchar(12), getdate())
執行結果如下
------------------------------ ------------
199 Jan 15 2000

----日期函式----
DAY() --函式返回date_expression 中的日期值
MONTH() --函式返回date_expression 中的月份值
YEAR() --函式返回date_expression 中的年份值
DATEADD(<datepart> ,<number> ,<date>)
--函式返回指定日期date 加上指定的額外日期間隔number 產生的新日期
DATEDIFF(<datepart> ,<number> ,<date>)
--函式返回兩個指定日期在datepart方面的不同之處
DATENAME(<datepart> , <date>) --函式以字串的形式返回日期的指定部分
DATEPART(<datepart> , <date>) --函式以整數值的形式返回日期的指定部分
GETDATE() --函式以DATETIME 的預設格式返回系統當前的日期和時間


----系統函式----
APP_NAME() --函式返回當前執行的應用程式的名稱
COALESCE() --函式返回眾多表達式中第一個非NULL 表示式的值
COL_LENGTH(<'table_name'>, <'column_name'>) --函式返回表中指定欄位的長度值
COL_NAME(<table_id>, <column_id>) --函式返回表中指定欄位的名稱即列名
DATALENGTH() --函式返回資料表示式的資料的實際長度
DB_ID(['database_name']) --函式返回資料庫的編號
DB_NAME(database_id) --函式返回資料庫的名稱
HOST_ID() --函式返回伺服器端計算機的名稱
HOST_NAME() --函式返回伺服器端計算機的名稱
IDENTITY(<data_type>[, seed increment]) [AS column_name])
--IDENTITY() 函式只在SELECT INTO 語句中使用用於插入一個identity column列到新表中
/*select identity(int, 1, 1) as column_name
into newtable
from oldtable*/
ISDATE() --函式判斷所給定的表示式是否為合理日期
ISNULL(<check_expression>, <replacement_value>) --函式將表示式中的NULL 值用指定值替換
ISNUMERIC() --函式判斷所給定的表示式是否為合理的數值
NEWID() --函式返回一個UNIQUEIDENTIFIER 型別的數值
NULLIF(<expression1>, <expression2>)
--NULLIF 函式在expression1 與expression2 相等時返回NULL 值若不相等時則返回expression1 的值

sql中的保留字

action add aggregate all
alter after and as
asc avg avg_row_length auto_increment
between bigint bit binary
blob bool both by
cascade case char character
change check checksum column
columns comment constraint create
cross current_date current_time current_timestamp
data database databases date
datetime day day_hour day_minute
day_second dayofmonth dayofweek dayofyear
dec decimal default delayed
delay_key_write delete desc describe
distinct distinctrow double drop
end else escape escaped
enclosed enum explain exists
fields file first float
float4 float8 flush foreign
from for full function
global grant grants group
having heap high_priority hour
hour_minute hour_second hosts identified
ignore in index infile
inner insert insert_id int
integer interval int1 int2
int3 int4 int8 into
if is isam join
key keys kill last_insert_id
leading left length like
lines limit load local
lock logs long longblob
longtext low_priority max max_rows
match mediumblob mediumtext mediumint
middleint min_rows minute minute_second
modify month monthname myisam
natural numeric no not
null on optimize option
optionally or order outer
outfile pack_keys partial password
precision primary procedure process
processlist privileges read real
references reload regexp rename
replace restrict returns revoke
rlike row rows second
select set show shutdown
smallint soname sql_big_tables sql_big_selects
sql_low_priority_updates sql_log_off sql_log_update sql_select_limit
sql_small_result sql_big_result sql_warnings straight_join
starting status string table
tables temporary terminated text
then time timestamp tinyblob
tinytext tinyint trailing to
type use using unique
unlock unsigned update usage
values varchar variables varying
varbinary with write when
where year year_month zerofill

常用SQL命令和ASP程式設計

在進行資料庫操作時,無非就是新增、刪除、修改,這得設計到一些常用的SQL語句,如下:
SQL常用命令使用方法:

(1) 資料記錄篩選:

sql="select * from 資料表 where 欄位名=欄位值 order by 欄位名 [desc]"

sql="select * from 資料表 where 欄位名 like %欄位值% order by 欄位名 [desc]"

sql="select top 10 * from 資料表 where 欄位名 order by 欄位名 [desc]"

sql="select * from 資料表 where 欄位名 in (值1,值2,值3)"

sql="select * from 資料表 where 欄位名 between 值1 and 值2"

(2) 更新資料記錄:

sql="update 資料表 set 欄位名=欄位值 where 條件表示式"

sql="update 資料表 set 欄位1=值1,欄位2=值2 …… 欄位n=值n where 條件表示式"

(3) 刪除資料記錄:


sql="delete from 資料表 where 條件表示式"

sql="delete from 資料表" (將資料表所有記錄刪除)

(4) 新增資料記錄:

sql="insert into 資料表 (欄位1,欄位2,欄位3 …) valuess (值1,值2,值3 …)"

sql="insert into 目標資料表 select * from 源資料表" (把源資料表的記錄新增到目標資料表)

(5) 資料記錄統計函式:

AVG(欄位名) 得出一個表格欄平均值
COUNT(*|欄位名) 對資料行數的統計或對某一欄有值的資料行數統計
MAX(欄位名) 取得一個表格欄最大的值
MIN(欄位名) 取得一個表格欄最小的值
SUM(欄位名) 把資料欄的值相加

引用以上函式的方法:

sql="select sum(欄位名) as 別名 from 資料表 where 條件表示式"
set rs=conn.excute(sql)

用 rs("別名") 獲取統的計值,其它函式運用同上。

(6) 資料表的建立和刪除:

CREATE TABLE 資料表名稱(欄位1 型別1(長度),欄位2 型別2(長度) …… )

例:CREATE TABLEtab01(name varchar(50),datetime default now())

DROP TABLE 資料表名稱 (永久性刪除一個數據表)


在ASP程式設計時,下面這些語句是必須知道的:

1.連線資料庫

a. ASP與Access資料庫連線:
<%@ language=VBs cript%>
<%
dim conn,mdbfile
mdbfile=server.mappath("資料庫名稱.mdb")
set conn=server.createobject("adodb.connection")
conn.open "driver={microsoft access driver (*.mdb)};uid=admin;pwd=資料庫密碼;dbq="&mdbfile
%>

b. ASP與SQL資料庫連線:

<%@ language=VBs cript%>
<%
dim conn
set conn=server.createobject("ADODB.connection")
con.open "PROVIDER=SQLOLEDB;DATA SOURCE=SQL伺服器名稱或IP地址;UID=sa;PWD=資料庫密碼;DATABASE=資料庫名稱
%>

建立記錄集物件:

set rs=server.createobject("adodb.recordset")
rs.open SQL語句,conn,3,2

2. 記錄集物件的方法:

rs.movenext 將記錄指標從當前的位置向下移一行
rs.moveprevious 將記錄指標從當前的位置向上移一行
rs.movefirst 將記錄指標移到資料表第一行
rs.movelast 將記錄指標移到資料表最後一行
rs.absoluteposition=N 將記錄指標移到資料表第N行
rs.absolutepage=N 將記錄指標移到第N頁的第一行
rs.pagesize=N 設定每頁為N條記錄
rs.pagecount 根據 pagesize 的設定返回總頁數
rs.recordcount 返回記錄總數
rs.bof 返回記錄指標是否超出資料表首端,true表示是,false為否
rs.eof 返回記錄指標是否超出資料表末端,true表示是,false為否
rs.delete 刪除當前記錄,但記錄指標不會向下移動
rs.addnew 新增記錄到資料表末端
rs.update 更新資料表記錄

附:

常數 常數值 說明

--------------------------------
adLockReadOnly 1 預設值,Recordset物件以只讀方式啟動,無法執行AddNew、Update及Delete等方法
adLockPrssimistic 2 當資料來源正在更新時,系統會暫時鎖住其他使用者的動作,以保持資料一致性。
adLockOptimistic 3 當資料來源正在更新時,系統並不會鎖住其他使用者的動作,其他使用者可以對資料進行增、刪、改的操作。
adLockBatchOptimistic 4 當資料來源正在更新時,其他使用者必須將CursorLocation屬性改為adUdeClientBatch才能對資料進行增、刪、改的操作。

MSSQL經典語句

1.按姓氏筆畫排序:Select * From TableName Order ByCustomerName Collate Chinese_PRC_Stroke_ci_as

2.資料庫加密:select encrypt('原始密碼')
select pwdencrypt('原始密碼')
select pwdcompare('原始密碼','加密後密碼') = 1--相同;否則不相同encrypt('原始密碼')
select pwdencrypt('原始密碼')
select pwdcompare('原始密碼','加密後密碼') = 1--相同;否則不相同

3.取回表中欄位:declare @list varchar(1000),@sql nvarchar(1000)
select @[email protected]+','+b.name from sysobjects a,syscolumns b where a.id=b.id and a.name='表A'
set@sql='select '+right(@list,len(@list)-1)+' from 表A'
exec(@sql)

4.檢視硬碟分割槽:EXEC master..xp_fixeddrives

5.比較A,B表是否相等:if (select checksum_agg(binary_checksum(*)) from A)
=
(select checksum_agg(binary_checksum(*)) from B)
print '相等'
else
print '不相等'

6.殺掉所有的事件探察器程序:DECLARE hcforeach CURSOR GLOBALFOR SELECT 'kill '+RTRIM(spid)FROM master.dbo.sysprocesses
WHEREprogram_name IN('SQL profiler',N'SQL 事件探查器')
EXECsp_msforeach_worker '?'

7.記錄搜尋:開頭到N條記錄
Select Top N * From
-------------------------------
N到M條記錄(要有主索引ID)Select TopM-N * FromWhere ID in (Select TopM ID From 表) Order by ID Desc
----------------------------------
N到結尾記錄
Select Top N * FromOrder by ID Desc

8.如何修改資料庫的名稱:sp_renamedb 'old_name', 'new_name'

9:獲取當前資料庫中的所有使用者表select Name from sysobjects wherextype='u' and status>=0

10:獲取某一個表的所有欄位select name from syscolumns whereid=object_id('表名')

11:檢視與某一個表相關的檢視、儲存過程、函式select a.* from sysobjects a, syscomments b where a.id =b.id and b.text like '%表名%'

12:檢視當前資料庫中所有儲存過程select name as 儲存過程名稱 from sysobjects wherextype='P'

13:查詢使用者建立的所有資料庫select * from master..sysdatabases D where sidnot in(select sid from master..syslogins where name='sa')
或者
select dbid, name AS DB_NAME from master..sysdatabases where sid<> 0x01

14:查詢某一個表的欄位和資料型別select column_name,data_type frominformation_schema.columns
where table_name = '表名'

[n].[標題]:Select * From TableName Order ByCustomerName

[n].[標題]:Select * From TableName Order ByCustomerName

from:http://tb.blog.csdn.net/TrackBack.aspx?PostId=585515

觸發器-MSSQL常用操作

發表人:kendy517 | 發表時間: 2007年二月09日, 09:18

不再新開文章.

這裡只打算講解四部分了,也就最簡單、最常用的四部分。

1、觸發器。

定義: 何為觸發器?在SQL Server裡面也就是對某一個表的一定的操作,觸發某種條件,從而執行的一段程式。觸發器是一個特殊的儲存過程。
常見的觸發器有三種:分別應用於Insert, Update , Delete 事件。(SQL Server 2000定義了新的觸發器,這裡不提)

我為什麼要使用觸發器?比如,這麼兩個表:

Create Table Student( --學生表
StudentID int primary key, --學號
....
)

Create Table BorrowRecord( --學生借書記錄表
BorrowRecord int identity(1,1), --流水號
StudentID int , --學號
BorrowDate datetime, --借出時間
ReturnDAte Datetime, --歸還時間
...
)

用到的功能有:
1.如果我更改了學生的學號,我希望他的借書記錄仍然與這個學生相關(也就是同時更改借書記錄表的學號);
2.如果該學生已經畢業,我希望刪除他的學號的同時,也刪除它的借書記錄。
等等。

這時候可以用到觸發器。對於1,建立一個Update觸發器:

Create Trigger truStudent
On Student
for Update
As
if Update(StudentID)
begin

Update BorrowRecord
Set StudentID=i.StudentID
From BorrowRecord br , Deleted d ,Inserted i
Where br.StudentID=d.StudentID

end

理解觸發器裡面的兩個臨時的表:Deleted, Inserted 。注意Deleted 與Inserted分別表示觸發事件的表“舊的一條記錄”和“新的一條記錄”。
一個Update 的過程可以看作為:生成新的記錄到Inserted表,複製舊的記錄到Deleted表,然後刪除Student記錄並寫入新紀錄。

對於2,建立一個Delete觸發器
Create trigger trdStudent
On Student
for Delete
As
Delete BorrowRecord
From BorrowRecord br , Delted d
Where br.StudentID=d.StudentID

從這兩個例子我們可以看到了觸發器的關鍵:A.2個臨時的表;B.觸發機制。
這裡我們只講解最簡單的觸發器。複雜的容後說明。
事實上,我不鼓勵使用觸發器。觸發器的初始設計思想,已經被“級聯”所替代.

來自:http://www.innerv.com/blogview.asp?logID=512

MSSQL資料庫匯出和匯入

SQL Server匯出匯入資料方法

 一、匯出匯入SQL Server裡某個資料庫

1.在SQL Server企業管理器裡選中要轉移的資料庫,按滑鼠右鍵,選所有任務->備份資料庫。 2.備份 選資料庫-完全, 目的 備份到 按新增按鈕 檔名 在SQL Server伺服器硬碟下輸入一個自定義的備份資料庫檔名(字尾一般是bak) 重寫 選重寫現有媒體 最後按確定按鈕。 如果生成的備份資料庫檔案大於1M,要用壓縮工具壓縮後再到Internet上傳輸。 3.通過FTP或者remote desktop或者pcanywhere等方法 把第二步生成的備份資料庫檔案或者其壓縮後的檔案傳到目的SQL Server資料庫,如果有壓縮要解壓。 4.目的SQL Server資料庫如果還沒有此資料庫,先建立一個新的資料庫; 然後選中這個新建立的資料庫,按滑鼠右鍵,選所有任務->還原資料庫 還原->從裝置->選擇裝置->磁碟->新增(找到要匯入的備份資料庫檔名)->確定 還原備份集->資料庫-完全 最後按確定按鈕。完全的資料庫匯入成功了。 (如果在已經存在的SQL Server資料庫上還原資料庫可能遇到有還有其它人正在使用它而恢復操做失敗, 可以去看 ->管理->當前活動->鎖/物件->找到資料庫下鎖的程序號->到查詢分析器裡用kill 程序號殺掉這些鎖, 然後再做還原) 注意:如果在原有的目的SQL Server資料庫上從備份檔案(*.bak)還原資料庫會把已經存在的表、儲存過程等資料庫物件全部替換成最近這次匯入的備份資料庫裡的內容。如果一定要還原備份檔案(*.bak)裡部分資料,需要另外建一個新資料庫, 其邏輯名稱和數量同備份檔案(*.bak)裡資料庫的邏輯名稱和數量一致;新資料庫的物理檔名稱取得一定要和備份檔案(*.bak)裡資料庫的物理檔案不一樣才行。

二、匯出匯入SQL Server裡某個表

1.沒有防火牆,同一個局域網裡或不在同一個局域網裡,但通過Internet可以互相訪問 在SQL Server企業管理器裡選中目的資料庫 ,按滑鼠右鍵,選所有任務->匯入資料-> 彈出資料轉換服務匯入/匯出嚮導視窗->下一步-> 選資料來源-> 資料來源(用於SQL Server的Microfost OLE DB提供程式)-> 伺服器(可選擇區域網內能訪問到的所有SQL Server伺服器,或者直接輸入IP地址)-> 選擇使用windows身份驗證還是使用SQL Serve身份驗證(輸入資料庫的使用者名稱和密碼)-> 資料庫(可選擇上面選中SQL Server伺服器上所有許可權範圍內的資料庫)->下一步-> 選擇目的->目的(用於SQL Server的Microfost OLE DB提供程式)-> 伺服器(預設為上一步裡選中的匯出伺服器,也可以選其它區域網內能訪問到的所有SQLServer伺服器,或者直接輸入IP地址)-> 目的資料庫(可選擇上面選中SQL Server伺服器上所有許可權範圍內的資料庫)->下一步-> 制定表複製或查詢->選從源資料庫複製表和檢視(也可以選擇用一條查詢指定要傳輸的資料)->下一步-> 選擇源表和檢視->在要匯入的表和檢視前面選中源->目的出現同樣的表名(可以手工修改成別的表名)-> 轉換->列對映和轉換裡面可以修改源表和目的表之間欄位的對應關係,修改目的表字段的型別和長度等, 並可以選擇建立目的表,在目的表中增加行,除去並重新建立目的表,啟用標誌插入等選項->確定->下一步-> 儲存、排程和複製包->時間->立即執行(如果要實現隔一段時間自動匯出匯入資料,選排程DTS包以便以後執行)-> 儲存(可以不選)->[ 儲存DTS包(如果以後還要轉移這批相同的資料,可以把本次匯出匯入的內容和步驟儲存起來, 存到SQL Server即可,儲存的時候要輸入DTS的包名及詳細描述)->下一步-> ]->完成 正在執行包->圖形介面顯示建立表及插入記錄的步驟和狀態->完成 2.經過防火牆,不在同一個局域網裡 ①、匯出表裡的資料到文字檔案: 在SQL Server企業管理器裡選中目的資料庫,按滑鼠右鍵,選所有任務->匯入資料->彈出資料轉換服務匯入/匯出嚮導視窗->下一步-> 選資料來源-> 資料來源(用於SQL Server的Microfost OLE DB提供程式)-> 伺服器(可選擇區域網內能訪問到的所有SQL Server伺服器)-> 選擇使用windows身份驗證還是使用SQL Serve身份驗證(輸入資料庫的使用者名稱和密碼)-> 資料庫(可選擇上面選中SQL Server伺服器上所有許可權範圍內的資料庫)->下一步-> 選擇目的->目的(文字檔案)-> 檔名(在自己的電腦硬碟中生成一個自定義的文字檔案)->下一步->制定表複製或查詢->選從源資料庫複製表和檢視(也可以選擇用一條查詢指定要傳輸的資料)->下一步-> 選擇目的檔案格式->源(選擇要匯出的表)->用預設的帶分隔符->選第一行包含有列名稱選項->下一步-> 儲存、排程和複製包->時間->立即執行(如果要實現隔一段時間自動匯出到文字檔案,選排程DTS包以便以後執行)-> 儲存(可以不選)-> [儲存DTS包(儲存的時候要輸入DTS的包名及詳細描述)->下一步->]->完成 正在執行包->圖形介面顯示錶到文字檔案的步驟和狀態->完成 如果生成的文字檔案大於1M,要用壓縮工具壓縮後再到Internet上傳輸。 ②、通過FTP或者remote desktop或者pcanywhere等方法把 第①步生成的文字檔案或者其壓縮後的檔案傳到目的SQL Server資料庫,如果有壓縮要解壓。 ③、把文字檔案匯入目的SQL Server資料庫 直接把文字檔案匯入目的SQL Server資料庫裡跟文字檔案同名的新表名時,預設的會把所有欄位型別都變成字串。 所以我們要這樣做: 在源SQL Server資料庫上先生成建立表的sql語句 在SQL Server查詢分析器裡->選中源資料庫裡表名->按右鍵->在新視窗中編寫物件指令碼->建立-> 複製下新視窗內建立表名的sql語句 到目標SQL Server資料庫上查詢分析器裡執行建立表名的sql語句,生成空表結構。 (如果已經存在這樣的表名,修改建表的sql語句,在表名後面加上匯入時間的年月資訊,例如table_0113) 呼叫匯入/匯出工具->彈出資料轉換服務匯入/匯出嚮導視窗->下一步-> 選資料來源-> 資料來源(文字檔案)-> 檔名(已傳到目的SQL Server資料庫下要匯入的文字檔案,字尾可以不是*.txt, 但是常規文字編輯器能開啟的檔案,檔案型別選全部)->下一步-> 選擇檔案格式->用預設的帶分隔符->選第一行包含有列名稱選項->下一步-> 制定列分割符->逗號->下一步-> 選擇目的->目的(用於SQL Server的Microfost OLE DB提供程式)-> 伺服器(可選擇目標區域網內能訪問到的所有SQL Server伺服器)-> 選擇使用windows身份驗證還是使用SQL Serve身份驗證(輸入資料庫的使用者名稱和密碼)-> 資料庫(可選擇上面選中SQL Server伺服器上所有許可權範圍內的資料庫)->下一步-> 選擇源表和檢視->修改目的表名為剛才建立的表名->轉換(在目的表中追加行) ->下一步-> 儲存、排程和複製包-> 時間->立即執行(如果要實現隔一段時間自動把文字檔案匯入,選排程DTS包以便以後執行)-> 儲存(可以不選)-> [儲存DTS包(儲存的時候要輸入DTS的包名及詳細描述)->下一步->]->完成 正在執行包->圖形介面顯示文字檔案到表的步驟和狀態->完成 如果要更改匯入時間的年月資訊的表名,例如table_0113到原來的表名, 在企業管理器裡把原來的表名改成table_old_0113,table_0113改名成table。 這會對應用程式裡頻繁訪問的表照成一定的中斷。 注意:源表上的建的索引和主鍵約束不能用上面介紹的12方法轉移過來,還需要手工來建索引和主鍵。標誌種子和not null的約束可以繼承過來。匯入檢視時會把源視圖裡所有的真實資料匯入成一個新表,而不是檢視。

 三、SQL Server儲存過程或使用者定義的函式匯出匯入

 1、匯出儲存過程或使用者定義的函式成*.sql檔案 在SQL Server企業管理器裡選中源資料庫, 儲存過程->單選或者多選中要轉移的儲存過程-> 使用者定義的函式->單選或者多選中要轉移的函式-> 按滑鼠右鍵,選所有任務->生成SQL指令碼->確定->在自己的電腦硬碟中生成一個自定義的*.sql檔案-> 儲存->正在生成SQL指令碼->成功 2、如果目的資料庫經過防火牆,不在同一個局域網裡, 要通過FTP或者remote desktop或者pcanywhere等方法把第1步生成的*.sql檔案傳到目的SQL Server資料庫伺服器上。 3、用查詢分析器進入SQL Server目的資料庫, 從選單裡選檔案->開啟->開啟查詢檔案->選中第1步生成的*.sql檔案->點執行查詢的綠色倒三角型快捷鍵-> 查詢窗口裡會出現執行後的訊息(有時候可能因為儲存過程和使用者定義的函式之間有一定的依賴關係,會報一些錯。 最好先執行使用者定義的函式的*.sql檔案,再執行儲存過程的*.sql檔案)

四、ORACLE資料庫裡表匯入SQL Server資料庫

 1、在目的SQL Server資料庫伺服器上安裝ORACLEClient軟體或者ORACLEODBC Driver. 在$ORACLE_HOMEnetworkadmintnsnames.ora裡配置ORACLE資料庫的別名(service name)。 具體配置方法可以參考本站文章:客戶端連伺服器的注意事項 2、在WIN2000或者win2003伺服器->管理工具->資料來源(ODBC)-> 系統DSN(本機器上NT域使用者都可以用)->新增->ORACLE ODBC Driver->完成-> data source name 可以自定義,我一般填ORACLE資料庫的sid標誌, description裡可以填ORACLE資料庫詳細描述,也可以不填-> datasource service name 填第1步定義的ORACLE資料庫別名->OK。 (使用者DSN和檔案DSN也可以類似配置,但使用的時候有一些限制) 3、SQL Server的匯入和匯出資料工具裡->選資料來源-> 資料來源(其它(ODBC資料來源))-> 選第2步在ODBC裡定義的系統DSN source name,使用者名稱密碼處填寫ORACLE系統的使用者名稱和密碼-> 下一步->選擇目的,選SQL Server資料庫(跟上面第二點講的一致,就不重複了)。 注意:在ORACLE表和SQL Server表之間'轉換'那步很重要,可以改變預設的欄位資料型別,如image->text,decimal->int

五、SQL Server資料庫裡表匯入ORACLE資料庫

 方法一.匯出目的選通過ODBC資料來源裡定義的ORACLE資料庫, 注意ORACLE裡表名都是大寫的. 我一般在ORACLE這邊先生成好表結構,再選擇SQL SERVER源表往ORACLE目的表裡追加資料. 資料傳輸速度比方法二慢. 方法二.從SQL Server資料庫匯入資料到ORACLE資料庫可以選擇用Windows下ORACLE9i企業或者個人版資料庫做中轉。

( 注意:ORACLE通過訪問SQL Server的資料庫連結時,用select * 的時候欄位名是用雙引號引起來的。) 

MySQL資料庫匯出和匯入

1).MySQLimport的語法介紹:

  MySQLimport位於MySQL/bin目錄中,是MySQL的一個載入(或者說匯入)資料的一個非常有效的工具。這是一個命令列工具。有兩個引數以及大量的選項可供選擇。這個工具把一個文字檔案(text file)匯入到你指定的資料庫和表中。比方說我們要從檔案Customers.txt中把資料匯入到資料庫Meet_A_Geek中的表Custermers中:

  MySQLimportMeet_A_Geek Customers.txt

  注意:這裡Customers.txt是我們要匯入資料的文字檔案,而Meet_A_Geek是我們要操作的資料庫,資料庫中的表名是Customers,這裡文字檔案的資料格式必須與Customers表中的記錄格式一致,否則MySQLimport命令將會出錯。

  其中表的名字是匯入檔案的第一個句號(.)前面檔案字串,另外一個例子:MySQLimport Meet_A_Geek Cus.to.mers.txt

  那麼我們將把檔案中的內容匯入到資料庫Meet_A_Geek 中的Cus表中。

  上面的例子中,都只用到兩個引數,並沒有用到更多的選項,下面介紹MySQLimport的選項

  2).MySQLimport的常用選項介紹:

  選項 功能

  -d or--delete 新資料匯入資料表中之前刪除資料資料表中的所有資訊
  -f or--force 不管是否遇到錯誤,MySQLimport將強制繼續插入資料
  -i or--ignore MySQLimport跳過或者忽略那些有相同唯一關鍵字的行, 匯入檔案中的資料將被忽略。
  -l or-lock-tables 資料被插入之前鎖住表,這樣就防止了,你在更新資料庫時,使用者的查詢和更新受到影響。
  -r or-replace 這個選項與-i選項的作用相反;此選項將替代表中有相同唯一關鍵字的記錄。
  --fields-enclosed-by= char 指定文字檔案中資料的記錄時以什麼括起的, 很多情況下資料以雙引號括起。 預設的情況下資料是沒有被字元括起的。

  --fields-terminated-by=char 指定各個資料的值之間的分隔符,在句號分隔的檔案中,分隔符是句號。您可以用此選項指定資料之間的分隔符。

  預設的分隔符是跳格符(Tab)

  --lines-terminated-by=str 此選項指定文字檔案中行與行之間資料的分隔字串或者字元。 預設的情況下MySQLimport以newline為行分隔符。

  您可以選擇用一個字串來替代一個單個的字元:

  一個新行或者一個回車。

  MySQLimport命令常用的選項還有-v 顯示版本(version),-p 提示輸入密碼(password)等。

  3).例子:匯入一個以逗號為分隔符的檔案

  檔案中行的記錄格式是這樣的:

  "1","ORD89876", "1 Dozen Roses", "19991226"

  我們的任務是要把這個檔案裡面的資料匯入到資料庫Meet_A_Geek中的表格Orders中,我們使用這個命令:

  bin/MySQLimport–prl –fields-enclosed-by=" –fields-terminated-by=, Meet_A_Geek Orders.txt

  這個命令可能看起來很不爽,不過當你熟悉了之後,這是非常簡單的。第一部分,bin/MySQLimport ,告訴作業系統你要執行的命令是MySQL/bin目錄下的MySQLimport,選項p是要求輸入密碼,這樣就要求你在改動資料庫之前輸入密碼,操作起來會更安全。 我們用了r選項是因為我們想要把表中的唯一關鍵字與檔案記錄中有重複唯一關鍵字的記錄替換成檔案中的資料。我們表單中的資料不是最新的,需要用檔案中的資料去更新,因而就用r這個選項,替代資料庫中已經有的記錄。l選項的作用是在我們插入資料的時候鎖住表,這樣就阻止了使用者在我們更新表的時候對錶進行查詢或者更改的操作。
  批處理是一種非互動式執行MySQL程式的方法,如同您在MySQL中使用的命令一樣,你仍然將使用這些命令。

  為了實現批處理,您重定向一個檔案到MySQL程式中,首先我們需要一個文字檔案,這個文字檔案包含有與我們在MySQL中輸入的命令相同的文字。

  比如我們要插入一些資料,使用包含下面文字的檔案(檔名為New_Data.sql,當然我們也可以取名為New_Data.txt及任何其他的合法名字,並不一定要以後綴sql結尾):

  USEMeet_A_Geek;
  INSERT INTOCustomers (Customer_ID, Last_Name) VALUES(NULL, "Block");
  INSERT INTOCustomers (Customer_ID, Last_Name) VALUES(NULL, "Newton");
  INSERT INTOCustomers (Customer_ID, Last_Name) VALUES(NULL, "Simmons");

  注意上面的這些句子的語法都必須是正確的,並且每個句子以分號結束。

  上面的USE命令選擇資料庫,INSERT命令插入資料。

  下面我們要把上面的檔案匯入到資料庫中,匯入之前要確認資料庫已經在執行,即是MySQLd程序(或者說服務,Windows NT下面稱為”服務“,unix下面為”程序“)已經在執行。

  然後執行下面的命令:

  bin/MySQL –p< /home/mark/New_Data.sql

  接著按提示輸入密碼,如果上面的檔案中的語句沒有錯誤,那麼這些資料就被匯入到了資料庫中。

  命令列中使用LOADDATA INFILE 從檔案中匯入資料到資料庫:

  現在您可能會問自己,"究竟為什麼我要輸入所有的這些SQL語句到檔案中,然後通過程式執行它們呢?”
這樣看起來好像需要大量的工作。很好,你這樣想很可能就對了。但是假如你有從所有這些命令中產生的log記錄呢?現在這樣就很棒,嗯,大多數資料庫都會自動產生資料庫中的事件記錄的log。而大部分log都包含有用過的原始的SQL命令。因此,如果您不能從您現在的資料庫中匯出資料到新的MySQL資料庫中使用,那麼您可以使用log和MySQL的批處理特性,來快速且方便地匯入您地資料。當然,這樣就省去了打字的麻煩。

  LOAD DATAINFILE

  這是我們要介紹的最後一個匯入資料到MySQL資料庫中的方法。這個命令與MySQLimport非常相似,但這個方法可以在MySQL命令列中使用。也就是說您可以在所有使用API的程式中使用這個命令。使用這種方法,您就可以在應用程式中匯入您想要匯入的資料。

  使用這個命令之前,MySQLd程序(服務)必須已經在執行。

  啟動MySQL命令列:
  bin/MySQL –p

  按提示輸入密碼,成功進入MySQL命令列之後,輸入下面的命令:

  USEMeet_A_Geek;
  LOAD DATAINFILE "/home/mark/data.sql" INTO TABLE Orders;

  簡單的講,這樣將會把檔案data.sql中的內容匯入到表Orders中,如MySQLimport工具一樣,這個命令也有一些可以選擇的引數。比如您需要把自己的電腦上的資料匯入到遠端的資料庫伺服器中,您可以使用下面的命令:
  LOAD DATALOCAL INFILE "C:MyDocsSQL.txt" INTO TABLE Orders;
  上面的LOCAL引數表示檔案是本地的檔案,伺服器是您所登陸的伺服器。

  這樣就省去了使用ftp來上傳檔案到伺服器,MySQL替你完成了.

  您也可以設定插入語句的優先順序,如果您要把它標記為低優先順序(LOW_PRIORITY),那麼MySQL將會等到沒有其他人讀這個表的時候,才把插入資料。可以使用如下的命令:
   LOAD DATALOW_PRIORITY INFILE "/home/mark/data.sql" INTO TABLE Orders;

  您也可以指定是否在插入資料的時候,取代或者忽略檔案與資料表中重複的鍵值。替代重複的鍵值的語法:

  LOAD DATALOW_PRIORITY INFILE "/home/mark/data.sql" REPLACE INTO TABLE Orders;

  上面的句子看起來有點笨拙,但卻把關鍵字放在了讓您的剖析器可以理解的地方。

  下面的一對選項描述了檔案的記錄格式,這些選項也是在MySQLimport工具中可以用的。他們在這裡看起來有點不同。首先,要用到FIELDS關鍵字,如果用到這個關鍵字,MySQL剖析器希望看到至少有下面的一個選項:

  TERMINATEDBY character
   ENCLOSED BYcharacter
   ESCAPED BYcharacter

  這些關鍵字與它們的引數跟MySQLimport中的用法是一樣的. The
   TERMINATEDBY 描述欄位的分隔符,預設情況下是tab字元(t)
   ENCLOSED BY描述的是欄位的括起字元。比方以引號括起每一個欄位。
   ESCAPED BY 描述的轉義字元。預設的是反些槓(backslash: ).

  下面仍然使用前面的MySQLimport命令的例子,用LOAD DATAINFILE語句把同樣的檔案匯入到資料庫中:

  LOAD DATAINFILE "/home/mark/Orders.txt" REPLACE INTO TABLE Orders FIELDSTERMINATED BY ','   ENCLOSED BY '"';

  LOAD DATAINFILE語句中有一個MySQLimport工具中沒有特點:

  LOAD DATAINFILE 可以按指定的列把檔案匯入到資料庫中。

  當我們要把資料的一部分內容匯入的時候,這個特點就很重要。比方說,我們要從Access資料庫升級到MySQL資料庫的時候,需要加入一些欄目(列/欄位/field)到MySQL資料庫中,以適應一些額外的需要。

  這個時候,我們的Access資料庫中的資料仍然是可用的,但是因為這些資料的欄目(field)與MySQL中的不再匹配,因此而無法再使用MySQLimport工具。儘管如此,我們仍然可以使用LOAD DATAINFILE,下面的例子顯示瞭如何向指定的欄目(field)中匯入資料:

  LOAD DATAINFILE "/home/Order.txt" INTO TABLE Orders(Order_Number, Order_Date,Customer_ID);

  如您所見,我們可以指定需要的欄目(fields)。這些指定的欄位依然是以括號括起,由逗號分隔的,如果您遺漏了其中任何一個,MySQL將會提醒您^_^

  ImportingData from Microsoft Access (從Access中匯入資料,略)

  您可以看到MySQL有很多可以匯入資料的方法,然而這些只是資料傳輸中的一半。另外的一般是從MySQL資料庫中匯出資料。有許多的原因我們需要匯出資料。一個重要的原因是用於備份資料庫。資料的造價常常是昂貴的,需要謹慎處理它們。經常地備份可以幫助防止寶貴資料地丟失;另外一個原因是,也許您希望匯出資料來共享。 在這個資訊科技不斷成長的世界中,共享資料變得越來越常見。

  比方說MacmillanUSA維護護著一個將要出版的書籍的大型資料庫。這個資料庫在許多書店之間共享,這樣他們就知道哪些書將會很快出版。醫院越來越走向採用無紙病歷記錄,這樣這些病歷可以隨時跟著你。世界變得越來越小,資訊也被共享得越來越多。有很多中匯出資料得方法,它們都跟匯入資料很相似。因為,畢竟,這些都只是一種透視得方式。從資料庫匯出的資料就是從另一端匯入的資料。這裡我們並不討論其他的資料庫各種各樣的匯出資料的方法,您將學會如何用MySQL來實現資料匯出。

  使用MySQLdump:
  MySQLdump命令位於MySQL/bin/目錄中

  MySQLdump工具很多方面類似相反作用的工具MySQLimport。它們有一些同樣的選項。但MySQLdump能夠做更多的事情。它可以把整個資料庫裝載到一個單獨的文字檔案中。這個檔案包含有所有重建您的資料庫所需要的SQL命令。這個命令取得所有的模式(Schema,後面有解釋)並且將其轉換成DDL語法(CREATE語句,即資料庫定義語句),取得所有的資料,並且從這些資料中建立INSERT語句。這個工具將您的資料庫中所有的設計倒轉。因為所有的東西都被包含到了一個文字檔案中。這個文字檔案可以用一個簡單的批處理和一個合適SQL語句導回到MySQL中。這個工具令人難以置信地簡單而快速。決不會有半點讓人頭疼地地方。

  因此,如果您像裝載整個資料庫Meet_A_Geek的內容到一個檔案中,可以使用下面的命令:
  bin/MySQLdump –p Meet_A_Geek > MeetAGeek_Dump_File.txt

  這個語句也允許您指定一個表進行dump(備份/匯出/裝載?)。如果您只是希望把資料庫Meet_A_Geek中的表Orders中的整個內容匯出到一個檔案,可以使用下面的命令:
  bin/MySQLdump –p Meet_A_Geek Orders >MeetAGeek_Orders.txt

  這個非常的靈活,您甚至可以使用WHERE從句來選擇您需要的記錄匯出到檔案中。要達到這樣的目的,可以使用類似於下面的命令:
  bin/MySQLdump –p –where="Order_ID > 2000" Meet_A_Geek Orders >Special_Dump.txt

  MySQLdump工具有大量的選項,部分選項如下表:

  選項/Option作用/ActionPerformed

  --add-drop-table
   這個選項將會在每一個表的前面加上DROP TABLEIF EXISTS語句,這樣可以保證導回MySQL資料庫的時候不會出錯,因為每次導回的時候,都會首先檢查表是否存在,存在就刪除

  --add-locks
   這個選項會在INSERT語句中捆上一個LOCK TABLE和UNLOCK TABLE語句。這就防止在這些記錄被再次匯入資料庫時其他使用者對錶進行的操作

  -c or -complete_insert
   這個選項使得MySQLdump命令給每一個產生INSERT語句加上列(field)的名字。當把資料匯出導另外一個數據庫時這個選項很有用。

  --delayed-insert在INSERT命令中加入DELAY選項
   -F or-flush-logs 使用這個選項,在執行匯出之前將會重新整理MySQL伺服器的log.
   -f or-force 使用這個選項,即使有錯誤發生,仍然繼續匯出
   --full 這個選項把附加資訊也加到CREATE TABLE的語句中
   -l or-lock-tables 使用這個選項,匯出表的時候伺服器將會給表加鎖。
   -t or-no-create- info
   這個選項使的MySQLdump命令不建立CREATE TABLE語句,這個選項在您只需要資料而不需要DDL(資料庫定義語句)時很方便。

  -d or-no-data 這個選項使的MySQLdump命令不建立INSERT語句。
   在您只需要DDL語句時,可以使用這個選項。
   --opt 此選項將開啟所有會提高檔案匯出速度和創造一個可以更快匯入的檔案的選項。
   -q or-quick 這個選項使得MySQL不會把整個匯出的內容讀入記憶體再執行匯出,而是在讀到的時候就寫入導檔案中。
   -T path or-tab = path 這個選項將會建立兩個檔案,一個檔案包含DDL語句或者表建立語句,另一個檔案包含資料。DDL檔案被命名為table_name.sql,資料檔案被命名為table_name.txt.路徑名是存放這兩個檔案的目錄。目錄必須已經存在,並且命令的使用者有對檔案的特權。

  -w"WHERE Clause" or -where = "Where clause "
   如前面所講的,您可以使用這一選項來過篩選將要放到匯出檔案的資料。

  假定您需要為一個表單中要用到的帳號建立一個檔案,經理要看今年(2004年)所有的訂單(Orders),它們並不對DDL感興趣,並且需要檔案有逗號分隔,因為這樣就很容易匯入到Excel中。 為了完成這個人物,您可以使用下面的句子:

  bin/MySQLdump–p –where "Order_Date >='2000-01-01'"
   –tab =/home/mark –no-create-info –fields-terminated-by=, Meet_A_Geek Orders
   這將會得到您想要的結果。

  schema:模式The set of statements,expressed in data definition language, that completely describe the structureof a data base.
   一組以資料定義語言來表達的語句集,該語句集完整地描述了資料庫的結構。

  SELECT INTOOUTFILE :

  如果您覺得MySQLdump工具不夠酷,就使用SELECT INTOOUTFILE吧, MySQL同樣提供一個跟LOAD DATAINFILE命令有相反作用的命令,這就是SELECTINTO OUTFILE 命令,這兩個命令有很多的相似之處。首先,它們有所有的選項幾乎相同。現在您需要完成前面用MySQLdump完成的功能,可以依照下面的步驟進行操作:

  1. 確保MySQLd程序(服務)已經在執行
   2. cd/usr/local/MySQL
   3.bin/MySQLadmin ping ;// 如果這個句子通不過,可以用這個:MySQLadmin -u root -p ping
MySQLadmin ping用於檢測MySQLd的狀態,is alive說明正在執行,出錯則可能需要使用者名稱和密碼。
   4. 啟動MySQL 監聽程式.
   5.bin/MySQL –p Meet_A_Geek;// 進入MySQL命令列,並且開啟資料庫Meet_A_Geek,需要輸入密碼
   6. 在命令列中,輸入一下命令:

  SELECT *INTO OUTFILE '/home/mark/Orders.txt'
   FIELDS
   TERMINATEDBY = ','
   FROM Orders
   WHEREOrder_Date >= '2000-01-01'

  在你按了Return(回車)之後,檔案就建立了。這個句子就像一個規則的SELECT語句,只是把想螢幕的輸出重定向到了檔案中。這意味這您可以使用JOIN來實現多表的高階查詢。這個特點也可以被用作一個報表產生器。

  比方說,您可以組合這一章中討論的方法來產生一個非常有趣的查詢,試試這個:

  在MySQL目錄建立一個名為Report_G.rpt的文字檔案,加入下面的行:

  USEMeet_A_Geek;
   INSERT INTOCustomers (Customer_ID, Last_Name, First_Name)
   VALUES(NULL, "Kinnard", "Vicky");
   INSERT INTOCustomers (Customer_ID, Last_Name, First_Name)
   VALUES(NULL, "Kinnard", "Steven");
   INSERT INTOCustomers (Customer_ID, Last_Name, First_Name)
   VALUES(NULL, "Brown", "Sam");
   SELECTLast_Name INTO OUTFILE '/home/mark/Report.rpt'
   FROMCustomers WHERE Customer_ID > 1;

  然後確認MySQL程序在執行,並且您在MySQL目錄中, 輸入下面的命令:

  bin/MySQL< Report_G.rpt檢查您命名作為輸出的檔案,這個檔案將會包含所有您在Customers表中輸入的顧客的姓。 如您所見,您可以使用今天學到的匯入/匯出(import/export)的方法來幫助得到報表。 檢視全文

關於MSSQL資料庫的欄位

資料型別是資料的一種屬性,表示資料所表示資訊的型別。任何一種計算機語言都定義了自己的資料型別。當然,不同的程式語言都具有不同的特點,所定義的資料型別的各類和名稱都或多或少有些不同。SQLServer提供了25種資料型別:
  ·Binary[(n)]
  ·Varbinary[(n)]
  ·Char[(n)]
  ·Varchar[(n)]
  ·Nchar[(n)]
  ·Nvarchar[(n)]
  ·Datetime
  ·Smalldatetime
  ·D