亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 12463 | 回復(fù): 1
打印 上一主題 下一主題

SQL語句大全 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2009-09-27 21:28 |只看該作者 |倒序瀏覽

SQL語句大全
--語 句 功 能
--數(shù)據(jù)操作
SELECT --從數(shù)據(jù)庫表中檢索數(shù)據(jù)行和列-select
INSERT --向數(shù)據(jù)庫表添加新數(shù)據(jù)行-insert
DELETE --從數(shù)據(jù)庫表中刪除數(shù)據(jù)行-delete
UPDATE --更新數(shù)據(jù)庫表中的數(shù)據(jù)-update
--數(shù)據(jù)定義
CREATE TABLE --創(chuàng)建一個數(shù)據(jù)庫表-create table
DROP TABLE --從數(shù)據(jù)庫中刪除表-drop table
ALTER TABLE --修改數(shù)據(jù)庫表結(jié)構(gòu)-alter table
CREATE VIEW --創(chuàng)建一個視圖-create view
DROP VIEW --從數(shù)據(jù)庫中刪除視圖-drop view
CREATE INDEX --為數(shù)據(jù)庫表創(chuàng)建一個索引-create index
DROP INDEX --從數(shù)據(jù)庫中刪除索引-drop index
CREATE PROCEDURE --創(chuàng)建一個存儲過程-create procedure

DROP PROCEDURE --從數(shù)據(jù)庫中刪除存儲過程-drop procedure
CREATE TRIGGER --創(chuàng)建一個觸發(fā)器-create trigger
DROP TRIGGER --從數(shù)據(jù)庫中刪除觸發(fā)器-drop trigger
CREATE SCHEMA --向數(shù)據(jù)庫添加一個新模式-create schema
DROP SCHEMA --從數(shù)據(jù)庫中刪除一個模式-drop schema
CREATE DOMAIN --創(chuàng)建一個數(shù)據(jù)值域-create domain
ALTER DOMAIN --改變域定義-alter domain
DROP DOMAIN --從數(shù)據(jù)庫中刪除一個域-drop domain
--數(shù)據(jù)控制
GRANT --授予用戶訪問權(quán)限-grant
DENY --拒絕用戶訪問-deny
REVOKE --解除用戶訪問權(quán)限-revoke
--事務(wù)控制
COMMIT --結(jié)束當(dāng)前事務(wù)-commit
ROLLBACK --中止當(dāng)前事務(wù)-rollback
SET TRANSACTION --定義當(dāng)前事務(wù)數(shù)據(jù)訪問特征-set transaction
--程序化SQL
DECLARE --為查詢設(shè)定游標(biāo)-declare
EXPLAN --為查詢描述數(shù)據(jù)訪問計劃-explan
OPEN --檢索查詢結(jié)果打開一個游標(biāo)-open
FETCH --檢索一行查詢結(jié)果-fetch
CLOSE --關(guān)閉游標(biāo)-cloce
PREPARE --為動態(tài)執(zhí)行準(zhǔn)備SQL 語句-repare
EXECUTE --動態(tài)地執(zhí)行SQL 語句-execute
DESCRIBE --描述準(zhǔn)備好的查詢 -describe
---局部變量

---必須以@@開頭
--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 ***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關(guān)鍵字的where子句中使用通配符)
or stockpath = 'stock_path'
or stocknumber ***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*** --- 修改數(shù)據(jù)庫表結(jié)構(gòu)
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 ......... ----- 實現(xiàn)刪除列的方法(創(chuàng)建新表)
alter table table_name drop constraint Stockname_default ---- 刪除Stockname的default約束
***function(/*常用函數(shù)*/)***
----統(tǒng)計函數(shù)----
AVG --求平均值
COUNT --統(tǒng)計數(shù)目
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()函數(shù)返回表達(dá)式中所有數(shù)據(jù)的標(biāo)準(zhǔn)差
--STDEVP()
--STDEVP()函數(shù)返回總體標(biāo)準(zhǔn)差
--VAR()
--VAR()函數(shù)返回表達(dá)式中所有值的統(tǒng)計變異數(shù)
--VARP()
--VARP()函數(shù)返回總體變異數(shù)
----算術(shù)函數(shù)----
/***三角函數(shù)***/
SIN(float_expression) --返回以弧度表示的角的正弦
COS(float_expression) --返回以弧度表示的角的余弦
TAN(float_expression) --返回以弧度表示的角的正切
COT(float_expression) --返回以弧度表示的角的余切
/***反三角函數(shù)***/
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)
--把弧度轉(zhuǎn)換為角度返回與表達(dá)式相同的數(shù)據(jù)類型可為
--INTEGER/MONEY/REAL/FLOAT 類型
RADIANS(numeric_expression) --把角度轉(zhuǎn)換為弧度返回與表達(dá)式相同的數(shù)據(jù)類型可為
--INTEGER/MONEY/REAL/FLOAT 類型
EXP(float_expression) --返回表達(dá)式的指數(shù)值
LOG(float_expression) --返回表達(dá)式的自然對數(shù)值
LOG10(float_expression)--返回表達(dá)式的以10 為底的對數(shù)值
SQRT(float_expression) --返回表達(dá)式的平方根
/***取近似值函數(shù)***/
CEILING(numeric_expression) --返回>=表達(dá)式的最小整數(shù)返回的數(shù)據(jù)類型與表達(dá)式相同可為
--INTEGER/MONEY/REAL/FLOAT 類型
FLOOR(numeric_expression) --返回ession) --返回以integer_expression 為精度的四舍五入值返回的數(shù)據(jù)
--類型與表達(dá)式相同可為INTEGER/MONEY/REAL/FLOAT 類型
ABS(numeric_expression) --返回表達(dá)式的絕對值返回的數(shù)據(jù)類型與表達(dá)式相同可為
--INTEGER/MONEY/REAL/FLOAT 類型
SIGN(numeric_expression) --測試參數(shù)的正負(fù)號返回0 零值1 正數(shù)或-1 負(fù)數(shù)返回的數(shù)據(jù)類型
--與表達(dá)式相同可為INTEGER/MONEY/REAL/FLOAT 類型
PI() --返回值為π 即3.1415926535897936
RAND([integer_expression]) --用任選的[integer_expression]做種子值得出0-1 間的隨機(jī)浮點數(shù)
----字符串函數(shù)----
ASCII() --函數(shù)返回字符表達(dá)式最左端字符的ASCII 碼值
CHAR() --函數(shù)用于將ASCII 碼轉(zhuǎn)換為字符
--如果沒有輸入0 ~ 255 之間的ASCII 碼值CHAR 函數(shù)會返回一個NULL 值
LOWER() --函數(shù)把字符串全部轉(zhuǎn)換為小寫
UPPER() --函數(shù)把字符串全部轉(zhuǎn)換為大寫
STR() --函數(shù)把數(shù)值型數(shù)據(jù)轉(zhuǎn)換為字符型數(shù)據(jù)
LTRIM() --函數(shù)把字符串頭部的空格去掉
RTRIM() --函數(shù)把字符串尾部的空格去掉
LEFT(),RIGHT(),SUBSTRING() --函數(shù)返回部分字符串
CHARINDEX(),PATINDEX() --函數(shù)返回字符串中某個指定的子串出現(xiàn)的開始位置
SOUNDEX() --函數(shù)返回一個四位字符碼
--SOUNDEX函數(shù)可用來查找聲音相似的字符串但SOUNDEX函數(shù)對數(shù)字和漢字均只返回0 值
DIFFERENCE() --函數(shù)返回由SOUNDEX 函數(shù)返回的兩個字符表達(dá)式的值的差異
--0 兩個SOUNDEX 函數(shù)返回值的第一個字符不同
--1 兩個SOUNDEX 函數(shù)返回值的第一個字符相同
--2 兩個SOUNDEX 函數(shù)返回值的第一二個字符相同
--3 兩個SOUNDEX 函數(shù)返回值的第一二三個字符相同
--4 兩個SOUNDEX 函數(shù)返回值完全相同
QUOTENAME() --函數(shù)返回被特定字符括起來的字符串
/*select quotename('abc', '{') quotename('abc')
運行結(jié)果如下
----------------------------------{
{abc} [abc]*/
REPLICATE() --函數(shù)返回一個重復(fù)character_expression 指定次數(shù)的字符串
/*select replicate('abc', 3) replicate( 'abc', -2)
運行結(jié)果如下
----------- -----------
abcabcabc NULL*/
REVERSE() --函數(shù)將指定的字符串的字符排列順序顛倒
REPLACE() --函數(shù)返回被替換了指定子串的字符串
/*select replace('abc123g', '123', 'def')
運行結(jié)果如下
----------- -----------
abcdefg*/
SPACE() --函數(shù)返回一個有指定長度的空白字符串
STUFF() --函數(shù)用另一子串替換字符串指定位置長度的子串
----數(shù)據(jù)類型轉(zhuǎn)換函數(shù)----
CAST() 函數(shù)語法如下
CAST() (ession> AS ta_ type>[ length ])
CONVERT() 函數(shù)語法如下
CONVERT() (ta_ type>[ length ], ession> [, style])
select cast(100+99 as char) convert(varchar(12), getdate())
運行結(jié)果如下
------------------------------ ------------
199 Jan 15 2000
----日期函數(shù)----
DAY() --函數(shù)返回date_expression 中的日期值
MONTH() --函數(shù)返回date_expression 中的月份值
YEAR() --函數(shù)返回date_expression 中的年份值
DATEADD( , ,)
--函數(shù)返回指定日期date 加上指定的額外日期間隔number 產(chǎn)生的新日期
DATEDIFF( , ,)
--函數(shù)返回兩個指定日期在datepart 方面的不同之處
DATENAME( , ) --函數(shù)以字符串的形式返回日期的指定部分
DATEPART( , ) --函數(shù)以整數(shù)值的形式返回日期的指定部分
GETDATE() --函數(shù)以DATETIME 的缺省格式返回系統(tǒng)當(dāng)前的日期和時間
----系統(tǒng)函數(shù)----
APP_NAME() --函數(shù)返回當(dāng)前執(zhí)行的應(yīng)用程序的名稱
COALESCE() --函數(shù)返回眾多表達(dá)式中第一個非NULL 表達(dá)式的值
COL_LENGTH(, ) --函數(shù)返回表中指定字段的長度值
COL_NAME(, ) --函數(shù)返回表中指定字段的名稱即列名
DATALENGTH() --函數(shù)返回數(shù)據(jù)表達(dá)式的數(shù)據(jù)的實際長度
DB_ID(['database_name']) --函數(shù)返回數(shù)據(jù)庫的編號
DB_NAME(database_id) --函數(shù)返回數(shù)據(jù)庫的名稱
HOST_ID() --函數(shù)返回服務(wù)器端計算機(jī)的名稱
HOST_NAME() --函數(shù)返回服務(wù)器端計算機(jī)的名稱
IDENTITY(ta_type>[, seed increment]) [AS column_name])
--IDENTITY() 函數(shù)只在SELECT INTO 語句中使用用于插入一個identity column列到新表中
/*select identity(int, 1, 1) as column_name
into newtable
from oldtable*/
ISDATE() --函數(shù)判斷所給定的表達(dá)式是否為合理日期
ISNULL(ession>, ) --函數(shù)將表達(dá)式中的NULL 值用指定值替換
ISNUMERIC() --函數(shù)判斷所給定的表達(dá)式是否為合理的數(shù)值
NEWID() --函數(shù)返回一個UNIQUEIDENTIFIER 類型的數(shù)值
NULLIF(ession1>, ession2>)
--NULLIF 函數(shù)在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編程
在進(jìn)行數(shù)據(jù)庫操作時,無非就是添加、刪除、修改,這得設(shè)計到一些常用的SQL語句,如下:
SQL常用命令使用方法:
(1) 數(shù)據(jù)記錄篩選:
sql="select * from 數(shù)據(jù)表 where 字段名=字段值 order by 字段名 [desc]"
sql="select * from 數(shù)據(jù)表 where 字段名 like %字段值% order by 字段名 [desc]"
sql="select top 10 * from 數(shù)據(jù)表 where 字段名 order by 字段名 [desc]"
sql="select * from 數(shù)據(jù)表 where 字段名 in (值1,值2,值3)"
sql="select * from 數(shù)據(jù)表 where 字段名 between 值1 and 值2"
(2) 更新數(shù)據(jù)記錄:
sql="update 數(shù)據(jù)表 set 字段名=字段值 where 條件表達(dá)式"
sql="update 數(shù)據(jù)表 set 字段1=值1,字段2=值2 …… 字段n=值n where 條件表達(dá)式"
(3) 刪除數(shù)據(jù)記錄:
sql="delete from 數(shù)據(jù)表 where 條件表達(dá)式"
sql="delete from 數(shù)據(jù)表" (將數(shù)據(jù)表所有記錄刪除)
(4) 添加數(shù)據(jù)記錄:
sql="insert into 數(shù)據(jù)表 (字段1,字段2,字段3 …) valuess (值1,值2,值3 …)"
sql="insert into 目標(biāo)數(shù)據(jù)表 select * from 源數(shù)據(jù)表" (把源數(shù)據(jù)表的記錄添加到目標(biāo)數(shù)據(jù)表)
(5) 數(shù)據(jù)記錄統(tǒng)計函數(shù):
AVG(字段名) 得出一個表格欄平均值
COUNT(*|字段名) 對數(shù)據(jù)行數(shù)的統(tǒng)計或?qū)δ骋粰谟兄档臄?shù)據(jù)行數(shù)統(tǒng)計
MAX(字段名) 取得一個表格欄最大的值
MIN(字段名) 取得一個表格欄最小的值
SUM(字段名) 把數(shù)據(jù)欄的值相加
引用以上函數(shù)的方法:
sql="select sum(字段名) as 別名 from 數(shù)據(jù)表 where 條件表達(dá)式"
set rs=conn.excute(sql)
用 rs("別名") 獲取統(tǒng)的計值,其它函數(shù)運用同上。
(6) 數(shù)據(jù)表的建立和刪除:
CREATE TABLE 數(shù)據(jù)表名稱(字段1 類型1(長度),字段2 類型2(長度) …… )
例:CREATE TABLE tab01(name varchar(50),datetime default now())
DROP TABLE 數(shù)據(jù)表名稱 (永久性刪除一個數(shù)據(jù)表)
在ASP編程時,下面這些語句是必須知道的:
1.連接數(shù)據(jù)庫
a. ASP與Access數(shù)據(jù)庫連接:
b. ASP與SQL數(shù)據(jù)庫連接:
TA SOURCE=SQL服務(wù)器名稱或IP地址;UID=sa;PWD=數(shù)據(jù)庫密碼;DATABASE=數(shù)據(jù)庫名稱
%>
建立記錄集對象:
set rs=server.createobject("adodb.recordset")
rs.open SQL語句,conn,3,2
2. 記錄集對象的方法:
rs.movenext 將記錄指針從當(dāng)前的位置向下移一行
rs.moveprevious 將記錄指針從當(dāng)前的位置向上移一行
rs.movefirst 將記錄指針移到數(shù)據(jù)表第一行
rs.movelast 將記錄指針移到數(shù)據(jù)表最后一行
rs.absoluteposition=N 將記錄指針移到數(shù)據(jù)表第N行
rs.absolutepage=N 將記錄指針移到第N頁的第一行
rs.pagesize=N 設(shè)置每頁為N條記錄
rs.pagecount 根據(jù) pagesize 的設(shè)置返回總頁數(shù)
rs.recordcount 返回記錄總數(shù)
rs.bof 返回記錄指針是否超出數(shù)據(jù)表首端,true表示是,false為否
rs.eof 返回記錄指針是否超出數(shù)據(jù)表末端,true表示是,false為否
rs.delete 刪除當(dāng)前記錄,但記錄指針不會向下移動
rs.addnew 添加記錄到數(shù)據(jù)表末端
rs.update 更新數(shù)據(jù)表記錄
附:常數(shù) 常數(shù)值 說明
--------------------------------
adLockReadOnly 1 缺省值,Recordset對象以只讀方式啟動,無法運行AddNew、Update及Delete等方法
adLockPrssimistic 2 當(dāng)數(shù)據(jù)源正在更新時,系統(tǒng)會暫時鎖住其他用戶的動作,以保持?jǐn)?shù)據(jù)一致性。
adLockOptimistic 3 當(dāng)數(shù)據(jù)源正在更新時,系統(tǒng)并不會鎖住其他用戶的動作,其他用戶可以對數(shù)據(jù)進(jìn)行增、刪、改的操作。
adLockBatchOptimistic 4 當(dāng)數(shù)據(jù)源正在更新時,其他用戶必須將CursorLocation屬性改為adUdeClientBatch才能對數(shù)據(jù)進(jìn)行增、刪、改的操作。
MSSQL經(jīng)典語句
1.按姓氏筆畫排序:Select * From TableName Order By CustomerName Collate Chinese_PRC_Stroke_ci_as
2.數(shù)據(jù)庫加密:select encrypt('原始密碼')
select
pwdencrypt('原始密碼')
select pwdcompare('原始密碼','加密后密碼') = 1--相同;否則不相同 encrypt('原始密碼')
select pwdencrypt('原始密碼')
select pwdcompare('原始密碼','加密后密碼') = 1--相同;否則不相同
3.取回表中字段:declare @list varchar(1000),@sql nvarchar(1000)
select @list=@list+','+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.查看硬盤分區(qū):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.殺掉所有的事件探察器進(jìn)程:DECLARE hcforeach CURSOR GLOBAL FOR SELECT 'kill '+RTRIM(spid) FROM master.dbo.sysprocesses
WHERE program_name IN('SQL profiler',N'SQL 事件探查器')
EXEC sp_msforeach_worker '?'
7.記錄搜索:開頭到N條記錄
Select Top N * From
-------------------------------
N到M條記錄(要有主索引ID)Select Top M-N * FromWhere ID in (Select Top M ID From 表) Order by ID Desc
----------------------------------
N到結(jié)尾記錄
Select Top N * FromOrder by ID Desc
8.如何修改數(shù)據(jù)庫的名稱:sp_renamedb 'old_name', 'new_name'
9:獲取當(dāng)前數(shù)據(jù)庫中的所有用戶表select Name from sysobjects where xtype='u' and status>=0
10:獲取某一個表的所有字段select name from syscolumns where id=object_id('表名')
11:查看與某一個表相關(guān)的視圖、存儲過程、函數(shù)select a.* from sysobjects a, syscomments b where a.id = b.id and b.text like '%表名%'
12:查看當(dāng)前數(shù)據(jù)庫中所有存儲過程select name as 存儲過程名稱 from sysobjects where xtype='P'
13:查詢用戶創(chuàng)建的所有數(shù)據(jù)庫select * from master..sysdatabases D where sid not in(select sid from master..syslogins where name='sa')
或者
select dbid, name AS DB_NAME from master..sysdatabases where sid  0x01
14:查詢某一個表的字段和數(shù)據(jù)類型select column_name,data_type from information_schema.columns
where table_name = '表名'
[n].[標(biāo)題]:Select * From TableName Order By CustomerName
[n].[標(biāo)題]:Select * From TableName Order By CustomerName
from:http://tb.blog.csdn.net/TrackBack.aspx?PostId=585515
觸發(fā)器-MSSQL常用操作
發(fā)表人:kendy517 | 發(fā)表時間: 2007年二月09日, 09:18
不再新開文章.
這里只打算講解四部分了,也就最簡單、最常用的四部分。
1、觸發(fā)器。
定義: 何為觸發(fā)器?在SQL Server里面也就是對某一個表的一定的操作,觸發(fā)某種條件,從而執(zhí)行的一段程序。觸發(fā)器是一個特殊的存儲過程。
常見的觸發(fā)器有三種:分別應(yīng)用于Insert , Update , Delete 事件。(SQL Server 2000定義了新的觸發(fā)器,這里不提)
我為什么要使用觸發(fā)器?比如,這么兩個表:
Create Table Student( --學(xué)生表
StudentID int primary key, --學(xué)號
....
)
Create Table BorrowRecord( --學(xué)生借書記錄表
BorrowRecord int identity(1,1), --流水號
StudentID int , --學(xué)號
BorrowDate datetime, --借出時間
ReturnDAte Datetime, --歸還時間
...
)
用到的功能有:
1.如果我更改了學(xué)生的學(xué)號,我希望他的借書記錄仍然與這個學(xué)生相關(guān)(也就是同時更改借書記錄表的學(xué)號);
2.如果該學(xué)生已經(jīng)畢業(yè),我希望刪除他的學(xué)號的同時,也刪除它的借書記錄。
等等。
這時候可以用到觸發(fā)器。對于1,創(chuàng)建一個Update觸發(fā)器:
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
理解觸發(fā)器里面的兩個臨時的表:Deleted , Inserted 。注意Deleted 與Inserted分別表示觸發(fā)事件的表“舊的一條記錄”和“新的一條記錄”。
一個Update 的過程可以看作為:生成新的記錄到Inserted表,復(fù)制舊的記錄到Deleted表,然后刪除Student記錄并寫入新紀(jì)錄。
對于2,創(chuàng)建一個Delete觸發(fā)器
Create trigger trdStudent
On Student
for Delete
As
Delete BorrowRecord
From BorrowRecord br , Delted d
Where br.StudentID=d.StudentID
從這兩個例子我們可以看到了觸發(fā)器的關(guān)鍵:A.2個臨時的表;B.觸發(fā)機(jī)制。
這里我們只講解最簡單的觸發(fā)器。復(fù)雜的容后說明。
事實上,我不鼓勵使用觸發(fā)器。觸發(fā)器的初始設(shè)計思想,已經(jīng)被“級聯(lián)”所替代.
來自:
http://www.innerv.com/blogview.asp?logID=512

MSSQL數(shù)據(jù)庫導(dǎo)出和導(dǎo)入
SQL Server導(dǎo)出導(dǎo)入數(shù)據(jù)方法

一、導(dǎo)出導(dǎo)入SQL Server里某個數(shù)據(jù)庫

1.在SQL Server企業(yè)管理器里選中要轉(zhuǎn)移的數(shù)據(jù)庫,按鼠標(biāo)右鍵,選所有任務(wù)->備份數(shù)據(jù)庫。 2.備份 選數(shù)據(jù)庫-完全, 目的 備份到 按添加按鈕 文件名 在SQL Server服務(wù)器硬盤下輸入一個自定義的備份數(shù)據(jù)庫文件名(后綴一般是bak) 重寫 選重寫現(xiàn)有媒體 最后按確定按鈕。 如果生成的備份數(shù)據(jù)庫文件大于1M,要用壓縮工具壓縮后再到Internet上傳輸。 3.通過FTP或者remote desktop或者pcanywhere等方法 把第二步生成的備份數(shù)據(jù)庫文件或者其壓縮后的文件傳到目的SQL Server數(shù)據(jù)庫,如果有壓縮要解壓。 4.目的SQL Server數(shù)據(jù)庫如果還沒有此數(shù)據(jù)庫,先創(chuàng)建一個新的數(shù)據(jù)庫; 然后選中這個新創(chuàng)建的數(shù)據(jù)庫,按鼠標(biāo)右鍵,選所有任務(wù)->還原數(shù)據(jù)庫 還原->從設(shè)備->選擇設(shè)備->磁盤->添加(找到要導(dǎo)入的備份數(shù)據(jù)庫文件名)->確定 還原備份集->數(shù)據(jù)庫-完全 最后按確定按鈕。完全的數(shù)據(jù)庫導(dǎo)入成功了。 (如果在已經(jīng)存在的SQL Server數(shù)據(jù)庫上還原數(shù)據(jù)庫可能遇到有還有其它人正在使用它而恢復(fù)操做失敗, 可以去看 ->管理->當(dāng)前活動->鎖/對象->找到數(shù)據(jù)庫下鎖的進(jìn)程號->到查詢分析器里用kill 進(jìn)程號殺掉這些鎖, 然后再做還原) 注意:如果在原有的目的SQL Server數(shù)據(jù)庫上從備份文件(*.bak)還原數(shù)據(jù)庫 會把已經(jīng)存在的表、存儲過程等數(shù)據(jù)庫對象全部替換成最近這次導(dǎo)入的備份數(shù)據(jù)庫里的內(nèi)容。 如果一定要還原備份文件(*.bak)里部分?jǐn)?shù)據(jù),需要另外建一個新數(shù)據(jù)庫, 其邏輯名稱和數(shù)量同備份文件(*.bak)里數(shù)據(jù)庫的邏輯名稱和數(shù)量一致; 新數(shù)據(jù)庫的物理文件名稱取得一定要和備份文件(*.bak)里數(shù)據(jù)庫的物理文件不一樣才行。

二、導(dǎo)出導(dǎo)入SQL Server里某個表

1.沒有防火墻,同一個局域網(wǎng)里或不在同一個局域網(wǎng)里,但通過Internet可以互相訪問 在SQL Server企業(yè)管理器里選中目的數(shù)據(jù)庫 ,按鼠標(biāo)右鍵,選所有任務(wù)->導(dǎo)入數(shù)據(jù)-> 彈出數(shù)據(jù)轉(zhuǎn)換服務(wù)導(dǎo)入/導(dǎo)出向?qū)Т翱?>下一步-> 選數(shù)據(jù)源-> 數(shù)據(jù)源(用于SQL Server的Microfost OLE DB提供程序)-> 服務(wù)器(可選擇局域網(wǎng)內(nèi)能訪問到的所有SQL Server服務(wù)器,或者直接輸入IP地址)-> 選擇使用windows身份驗證還是使用SQL Serve身份驗證(輸入數(shù)據(jù)庫的用戶名和密碼)-> 數(shù)據(jù)庫(可選擇上面選中SQL Server服務(wù)器上所有權(quán)限范圍內(nèi)的數(shù)據(jù)庫)->下一步-> 選擇目的->目的(用于SQL Server的Microfost OLE DB提供程序)-> 服務(wù)器(默認(rèn)為上一步里選中的導(dǎo)出服務(wù)器,也可以選其它局域網(wǎng)內(nèi)能訪問到的所有SQL Server服務(wù)器,或者直接輸入IP地址)-> 目的數(shù)據(jù)庫(可選擇上面選中SQL Server服務(wù)器上所有權(quán)限范圍內(nèi)的數(shù)據(jù)庫)->下一步-> 制定表復(fù)制或查詢->選從源數(shù)據(jù)庫復(fù)制表和視圖(也可以選擇用一條查詢指定要傳輸?shù)臄?shù)據(jù))->下一步-> 選擇源表和視圖->在要導(dǎo)入的表和視圖前面選中源->目的出現(xiàn)同樣的表名(可以手工修改成別的表名)-> 轉(zhuǎn)換->列映射和轉(zhuǎn)換里面可以修改源表和目的表之間字段的對應(yīng)關(guān)系,修改目的表字段的類型和長度等, 并可以選擇創(chuàng)建目的表,在目的表中增加行,除去并重新創(chuàng)建目的表,啟用標(biāo)志插入等選項->確定->下一步-> 保存、調(diào)度和復(fù)制包->時間->立即運行(如果要實現(xiàn)隔一段時間自動導(dǎo)出導(dǎo)入數(shù)據(jù),選調(diào)度DTS包以便以后執(zhí)行)-> 保存(可以不選)->[ 保存DTS包(如果以后還要轉(zhuǎn)移這批相同的數(shù)據(jù),可以把本次導(dǎo)出導(dǎo)入的內(nèi)容和步驟保存起來, 存到SQL Server即可,保存的時候要輸入DTS的包名及詳細(xì)描述)->下一步-> ]->完成 正在執(zhí)行包->圖形界面顯示創(chuàng)建表及插入記錄的步驟和狀態(tài)->完成 2.經(jīng)過防火墻,不在同一個局域網(wǎng)里 ①、導(dǎo)出表里的數(shù)據(jù)到文本文件: 在SQL Server企業(yè)管理器里選中目的數(shù)據(jù)庫,按鼠標(biāo)右鍵,選所有任務(wù)-> 導(dǎo)入數(shù)據(jù)->彈出數(shù)據(jù)轉(zhuǎn)換服務(wù)導(dǎo)入/導(dǎo)出向?qū)Т翱?>下一步-> 選數(shù)據(jù)源-> 數(shù)據(jù)源(用于SQL Server的Microfost OLE DB提供程序)-> 服務(wù)器(可選擇局域網(wǎng)內(nèi)能訪問到的所有SQL Server服務(wù)器)-> 選擇使用windows身份驗證還是使用SQL Serve身份驗證(輸入數(shù)據(jù)庫的用戶名和密碼)-> 數(shù)據(jù)庫(可選擇上面選中SQL Server服務(wù)器上所有權(quán)限范圍內(nèi)的數(shù)據(jù)庫)->下一步-> 選擇目的->目的(文本文件)-> 文件名(在自己的電腦硬盤中生成一個自定義的文本文件) ->下一步-> 制定表復(fù)制或查詢->選從源數(shù)據(jù)庫復(fù)制表和視圖(也可以選擇用一條查詢指定要傳輸?shù)臄?shù)據(jù))->下一步-> 選擇目的文件格式->源(選擇要導(dǎo)出的表)->用默認(rèn)的帶分隔符->選第一行包含有列名稱選項->下一步-> 保存、調(diào)度和復(fù)制包->時間->立即運行(如果要實現(xiàn)隔一段時間自動導(dǎo)出到文本文件,選調(diào)度DTS包以便以后執(zhí)行)-> 保存(可以不選)-> [保存DTS包(保存的時候要輸入DTS的包名及詳細(xì)描述)->下一步->]->完成 正在執(zhí)行包->圖形界面顯示表到文本文件的步驟和狀態(tài)->完成 如果生成的文本文件大于1M,要用壓縮工具壓縮后再到Internet上傳輸。 ②、通過FTP或者remote desktop或者pcanywhere等方法把 第①步生成的文本文件或者其壓縮后的文件傳到目的SQL Server數(shù)據(jù)庫,如果有壓縮要解壓。 ③、把文本文件導(dǎo)入目的SQL Server數(shù)據(jù)庫 直接把文本文件導(dǎo)入目的SQL Server數(shù)據(jù)庫里跟文本文件同名的新表名時,默認(rèn)的會把所有字段類型都變成字符串。 所以我們要這樣做: 在源SQL Server數(shù)據(jù)庫上先生成創(chuàng)建表的sql語句 在SQL Server查詢分析器里->選中源數(shù)據(jù)庫里表名->按右鍵->在新窗口中編寫對象腳本->創(chuàng)建-> 復(fù)制下新窗口內(nèi)創(chuàng)建表名的sql語句 到目標(biāo)SQL Server數(shù)據(jù)庫上查詢分析器里執(zhí)行創(chuàng)建表名的sql語句,生成空表結(jié)構(gòu)。 (如果已經(jīng)存在這樣的表名,修改建表的sql語句,在表名后面加上導(dǎo)入時間的年月信息,例如table_0113) 調(diào)用導(dǎo)入/導(dǎo)出工具->彈出數(shù)據(jù)轉(zhuǎn)換服務(wù)導(dǎo)入/導(dǎo)出向?qū)Т翱?>下一步-> 選數(shù)據(jù)源-> 數(shù)據(jù)源(文本文件)-> 文件名(已傳到目的SQL Server數(shù)據(jù)庫下要導(dǎo)入的文本文件,后綴可以不是*.txt, 但是常規(guī)文本編輯器能打開的文件,文件類型選全部)->下一步-> 選擇文件格式->用默認(rèn)的帶分隔符->選第一行包含有列名稱選項->下一步-> 制定列分割符->逗號->下一步-> 選擇目的->目的(用于SQL Server的Microfost OLE DB提供程序)-> 服務(wù)器(可選擇目標(biāo)局域網(wǎng)內(nèi)能訪問到的所有SQL Server服務(wù)器)-> 選擇使用windows身份驗證還是使用SQL Serve身份驗證(輸入數(shù)據(jù)庫的用戶名和密碼)-> 數(shù)據(jù)庫(可選擇上面選中SQL Server服務(wù)器上所有權(quán)限范圍內(nèi)的數(shù)據(jù)庫)->下一步-> 選擇源表和視圖->修改目的表名為剛才創(chuàng)建的表名->轉(zhuǎn)換(在目的表中追加行) ->下一步-> 保存、調(diào)度和復(fù)制包-> 時間->立即運行(如果要實現(xiàn)隔一段時間自動把文本文件導(dǎo)入,選調(diào)度DTS包以便以后執(zhí)行)-> 保存(可以不選)-> [保存DTS包(保存的時候要輸入DTS的包名及詳細(xì)描述)->下一步->]->完成 正在執(zhí)行包->圖形界面顯示文本文件到表的步驟和狀態(tài)->完成 如果要更改導(dǎo)入時間的年月信息的表名,例如table_0113到原來的表名, 在企業(yè)管理器里把原來的表名改成table_old_0113,table_0113改名成table。 這會對應(yīng)用程序里頻繁訪問的表照成一定的中斷。 注意:源表上的建的索引和主鍵約束不能用上面介紹的1和2方法轉(zhuǎn)移過來,還需要手工來建索引和主鍵。 標(biāo)志種子和not null的約束可以繼承過來。 導(dǎo)入視圖時會把源視圖里所有的真實數(shù)據(jù)導(dǎo)入成一個新表,而不是視圖。

三、SQL Server存儲過程或用戶定義的函數(shù)導(dǎo)出導(dǎo)入

1、導(dǎo)出存儲過程或用戶定義的函數(shù)成*.sql文件 在SQL Server企業(yè)管理器里選中源數(shù)據(jù)庫, 存儲過程->單選或者多選中要轉(zhuǎn)移的存儲過程-> 用戶定義的函數(shù)->單選或者多選中要轉(zhuǎn)移的函數(shù)-> 按鼠標(biāo)右鍵,選所有任務(wù)->生成SQL腳本->確定->在自己的電腦硬盤中生成一個自定義的*.sql文件-> 保存->正在生成SQL腳本->成功 2、如果目的數(shù)據(jù)庫經(jīng)過防火墻,不在同一個局域網(wǎng)里, 要通過FTP或者remote desktop或者pcanywhere等方法把第1步生成的*.sql文件傳到目的SQL Server數(shù)據(jù)庫服務(wù)器上。 3、用查詢分析器進(jìn)入SQL Server目的數(shù)據(jù)庫, 從菜單里選文件->打開->打開查詢文件->選中第1步生成的*.sql文件->點執(zhí)行查詢的綠色倒三角型快捷鍵-> 查詢窗口里會出現(xiàn)執(zhí)行后的消息(有時候可能因為存儲過程和用戶定義的函數(shù)之間有一定的依賴關(guān)系,會報一些錯。 最好先執(zhí)行用戶定義的函數(shù)的*.sql文件,再執(zhí)行存儲過程的*.sql文件)

四、ORACLE數(shù)據(jù)庫里表導(dǎo)入SQL Server數(shù)據(jù)庫

1、在目的SQL Server數(shù)據(jù)庫服務(wù)器上安裝ORACLE Client軟件或者ORACLE ODBC Driver. 在$ORACLE_HOMEnetworkadmintnsnames.ora里配置ORACLE數(shù)據(jù)庫的別名(service name)。 具體配置方法可以參考本站文章:
客戶端連服務(wù)器的注意事項
2、在WIN2000或者win2003服務(wù)器->管理工具->數(shù)據(jù)源(ODBC)-> 系統(tǒng)DSN(本機(jī)器上NT域用戶都可以用)->添加->ORACLE ODBC Driver->完成-> data source name 可以自定義,我一般填ORACLE數(shù)據(jù)庫的sid標(biāo)志, description里可以填ORACLE數(shù)據(jù)庫詳細(xì)描述,也可以不填-> data source service name 填第1步定義的ORACLE數(shù)據(jù)庫別名->OK。 (用戶DSN和文件DSN也可以類似配置,但使用的時候有一些限制) 3、SQL Server的導(dǎo)入和導(dǎo)出數(shù)據(jù)工具里->選數(shù)據(jù)源-> 數(shù)據(jù)源(其它(ODBC數(shù)據(jù)源))-> 選第2步在ODBC里定義的系統(tǒng)DSN source name,用戶名密碼處填寫ORACLE系統(tǒng)的用戶名和密碼-> 下一步->選擇目的,選SQL Server數(shù)據(jù)庫(跟上面第二點講的一致,就不重復(fù)了)。 注意:在ORACLE表和SQL Server表之間'轉(zhuǎn)換'那步很重要, 可以改變默認(rèn)的字段數(shù)據(jù)類型,如image->text,decimal->int

五、SQL Server數(shù)據(jù)庫里表導(dǎo)入ORACLE數(shù)據(jù)庫

方法一.導(dǎo)出目的選通過ODBC數(shù)據(jù)源里定義的ORACLE數(shù)據(jù)庫, 注意ORACLE里表名都是大寫的. 我一般在ORACLE這邊先生成好表結(jié)構(gòu),再選擇SQL SERVER源表往ORACLE目的表里追加數(shù)據(jù). 數(shù)據(jù)傳輸速度比方法二慢. 方法二.從SQL Server數(shù)據(jù)庫導(dǎo)入數(shù)據(jù)到ORACLE數(shù)據(jù)庫可以選擇用Windows下ORACLE9i企業(yè)或者個人版數(shù)據(jù)庫做中轉(zhuǎn)。
( 注意:ORACLE通過訪問SQL Server的數(shù)據(jù)庫鏈接時,用select * 的時候字段名是用雙引號引起來的。)
MySQL數(shù)據(jù)庫導(dǎo)出和導(dǎo)入
1).MySQLimport的語法介紹:
  MySQLimport位于MySQL/bin目錄中,是MySQL的一個載入(或者說導(dǎo)入)數(shù)據(jù)的一個非常有效的工具。這是一個命令行工具。有兩個參數(shù)以及大量的選項可供選擇。這個工具把一個文本文件(text file)導(dǎo)入到你指定的數(shù)據(jù)庫和表中。比方說我們要從文件Customers.txt中把數(shù)據(jù)導(dǎo)入到數(shù)據(jù)庫Meet_A_Geek中的表Custermers中:
  MySQLimport Meet_A_Geek Customers.txt
  注意:這里Customers.txt是我們要導(dǎo)入數(shù)據(jù)的文本文件,而Meet_A_Geek是我們要操作的數(shù)據(jù)庫,數(shù)據(jù)庫中的表名是Customers,這里文本文件的數(shù)據(jù)格式必須與Customers表中的記錄格式一致,否則MySQLimport命令將會出錯。
  其中表的名字是導(dǎo)入文件的第一個句號(.)前面文件字符串,另外一個例子:MySQLimport Meet_A_Geek Cus.to.mers.txt
  那么我們將把文件中的內(nèi)容導(dǎo)入到數(shù)據(jù)庫Meet_A_Geek 中的Cus表中。
  上面的例子中,都只用到兩個參數(shù),并沒有用到更多的選項,下面介紹MySQLimport的選項
  2).MySQLimport的常用選項介紹:
  選項 功能
  -d or --delete 新數(shù)據(jù)導(dǎo)入數(shù)據(jù)表中之前刪除數(shù)據(jù)數(shù)據(jù)表中的所有信息
  -f or --force 不管是否遇到錯誤,MySQLimport將強制繼續(xù)插入數(shù)據(jù)
  -i or --ignore MySQLimport跳過或者忽略那些有相同唯一關(guān)鍵字的行, 導(dǎo)入文件中的數(shù)據(jù)將被忽略。
  -l or -lock-tables 數(shù)據(jù)被插入之前鎖住表,這樣就防止了,你在更新數(shù)據(jù)庫時,用戶的查詢和更新受到影響。
  -r or -replace 這個選項與-i選項的作用相反;此選項將替代表中有相同唯一關(guān)鍵字的記錄。
  --fields-enclosed- by= char 指定文本文件中數(shù)據(jù)的記錄時以什么括起的, 很多情況下數(shù)據(jù)以雙引號括起。 默認(rèn)的情況下數(shù)據(jù)是沒有被字符括起的。
  --fields-terminated- by=char 指定各個數(shù)據(jù)的值之間的分隔符,在句號分隔的文件中,分隔符是句號。您可以用此選項指定數(shù)據(jù)之間的分隔符。
  默認(rèn)的分隔符是跳格符(Tab)
  --lines-terminated- by=str 此選項指定文本文件中行與行之間數(shù)據(jù)的分隔字符串或者字符。 默認(rèn)的情況下MySQLimport以newline為行分隔符。
  您可以選擇用一個字符串來替代一個單個的字符:
  一個新行或者一個回車。
  MySQLimport命令常用的選項還有-v 顯示版本(version),-p 提示輸入密碼(password)等。
  3).例子:導(dǎo)入一個以逗號為分隔符的文件
  文件中行的記錄格式是這樣的:
  "1", "ORD89876", "1 Dozen Roses", "19991226"
  我們的任務(wù)是要把這個文件里面的數(shù)據(jù)導(dǎo)入到數(shù)據(jù)庫Meet_A_Geek中的表格Orders中,我們使用這個命令:
  bin/MySQLimport –prl –fields-enclosed-by=" –fields-terminated-by=, Meet_A_Geek Orders.txt
  這個命令可能看起來很不爽,不過當(dāng)你熟悉了之后,這是非常簡單的。第一部分,bin/MySQLimport ,告訴操作系統(tǒng)你要運行的命令是MySQL/bin目錄下的MySQLimport,選項p是要求輸入密碼,這樣就要求你在改動數(shù)據(jù)庫之前輸入密碼,操作起來會更安全。 我們用了r選項是因為我們想要把表中的唯一關(guān)鍵字與文件記錄中有重復(fù)唯一關(guān)鍵字的記錄替換成文件中的數(shù)據(jù)。我們表單中的數(shù)據(jù)不是最新的,需要用文件中的數(shù)據(jù)去更新,因而就用r這個選項,替代數(shù)據(jù)庫中已經(jīng)有的記錄。l選項的作用是在我們插入數(shù)據(jù)的時候鎖住表,這樣就阻止了用戶在我們更新表的時候?qū)Ρ磉M(jìn)行查詢或者更改的操作。
  批處理是一種非交互式運行MySQL程序的方法,如同您在MySQL中使用的命令一樣,你仍然將使用這些命令。
  為了實現(xiàn)批處理,您重定向一個文件到MySQL程序中,首先我們需要一個文本文件,這個文本文件包含有與我們在MySQL中輸入的命令相同的文本。
  比如我們要插入一些數(shù)據(jù),使用包含下面文本的文件(文件名為New_Data.sql,當(dāng)然我們也可以取名為New_Data.txt及任何其他的合法名字,并不一定要以后綴sql結(jié)尾):
  USE Meet_A_Geek;
  INSERT INTO Customers (Customer_ID, Last_Name) VALUES(NULL, "Block");
  INSERT INTO Customers (Customer_ID, Last_Name) VALUES(NULL, "Newton");
  INSERT INTO Customers (Customer_ID, Last_Name) VALUES(NULL, "Simmons");
  注意上面的這些句子的語法都必須是正確的,并且每個句子以分號結(jié)束。
  上面的USE命令選擇數(shù)據(jù)庫,INSERT命令插入數(shù)據(jù)。
  下面我們要把上面的文件導(dǎo)入到數(shù)據(jù)庫中,導(dǎo)入之前要確認(rèn)數(shù)據(jù)庫已經(jīng)在運行,即是MySQLd進(jìn)程(或者說服務(wù),Windows NT下面稱為”服務(wù)“,unix下面為”進(jìn)程“)已經(jīng)在運行。
  然后運行下面的命令:
  bin/MySQL –p ta.sql
  接著按提示輸入密碼,如果上面的文件中的語句沒有錯誤,那么這些數(shù)據(jù)就被導(dǎo)入到了數(shù)據(jù)庫中。
  命令行中使用LOAD DATA INFILE 從文件中導(dǎo)入數(shù)據(jù)到數(shù)據(jù)庫:
  現(xiàn)在您可能會問自己,"究竟為什么我要輸入所有的這些SQL語句到文件中,然后通過程序運行它們呢?”
這樣看起來好像需要大量的工作。很好,你這樣想很可能就對了。但是假如你有從所有這些命令中產(chǎn)生的log記錄呢?現(xiàn)在這樣就很棒,嗯,大多數(shù)數(shù)據(jù)庫都會自動產(chǎn)生數(shù)據(jù)庫中的事件記錄的log。而大部分log都包含有用過的原始的SQL命令。因此,如果您不能從您現(xiàn)在的數(shù)據(jù)庫中導(dǎo)出數(shù)據(jù)到新的MySQL數(shù)據(jù)庫中使用,那么您可以使用log和MySQL的批處理特性,來快速且方便地導(dǎo)入您地數(shù)據(jù)。當(dāng)然,這樣就省去了打字的麻煩。
  LOAD DATA INFILE
  這是我們要介紹的最后一個導(dǎo)入數(shù)據(jù)到MySQL數(shù)據(jù)庫中的方法。這個命令與MySQLimport非常相似,但這個方法可以在MySQL命令行中使用。也就是說您可以在所有使用API的程序中使用這個命令。使用這種方法,您就可以在應(yīng)用程序中導(dǎo)入您想要導(dǎo)入的數(shù)據(jù)。
  使用這個命令之前,MySQLd進(jìn)程(服務(wù))必須已經(jīng)在運行。
  啟動MySQL命令行:
  bin/MySQL –p
  按提示輸入密碼,成功進(jìn)入MySQL命令行之后,輸入下面的命令:
  USE Meet_A_Geek;
  LOAD DATA INFILE "/home/mark/data.sql" INTO TABLE Orders;
  簡單的講,這樣將會把文件data.sql中的內(nèi)容導(dǎo)入到表Orders中,如MySQLimport工具一樣,這個命令也有一些可以選擇的參數(shù)。比如您需要把自己的電腦上的數(shù)據(jù)導(dǎo)入到遠(yuǎn)程的數(shù)據(jù)庫服務(wù)器中,您可以使用下面的命令:
  LOAD DATA LOCAL INFILE "C:MyDocsSQL.txt" INTO TABLE Orders;
  上面的LOCAL參數(shù)表示文件是本地的文件,服務(wù)器是您所登陸的服務(wù)器。
  這樣就省去了使用ftp來上傳文件到服務(wù)器,MySQL替你完成了.
  您也可以設(shè)置插入語句的優(yōu)先級,如果您要把它標(biāo)記為低優(yōu)先級(LOW_PRIORITY),那么MySQL將會等到?jīng)]有其他人讀這個表的時候,才把插入數(shù)據(jù)?梢允褂萌缦碌拿睿
   LOAD DATA LOW_PRIORITY INFILE "/home/mark/data.sql" INTO TABLE Orders;
  您也可以指定是否在插入數(shù)據(jù)的時候,取代或者忽略文件與數(shù)據(jù)表中重復(fù)的鍵值。替代重復(fù)的鍵值的語法:
  LOAD DATA LOW_PRIORITY INFILE "/home/mark/data.sql" REPLACE INTO TABLE Orders;
  上面的句子看起來有點笨拙,但卻把關(guān)鍵字放在了讓您的剖析器可以理解的地方。
  下面的一對選項描述了文件的記錄格式,這些選項也是在MySQLimport工具中可以用的。他們在這里看起來有點不同。首先,要用到FIELDS關(guān)鍵字,如果用到這個關(guān)鍵字,MySQL剖析器希望看到至少有下面的一個選項:
  TERMINATED BY character
   ENCLOSED BY character
   ESCAPED BY character
  這些關(guān)鍵字與它們的參數(shù)跟MySQLimport中的用法是一樣的. The
   TERMINATED BY 描述字段的分隔符,默認(rèn)情況下是tab字符(t)
   ENCLOSED BY描述的是字段的括起字符。比方以引號括起每一個字段。
   ESCAPED BY 描述的轉(zhuǎn)義字符。默認(rèn)的是反些杠(backslash: ).
  下面仍然使用前面的MySQLimport命令的例子,用LOAD DATA INFILE語句把同樣的文件導(dǎo)入到數(shù)據(jù)庫中:
  LOAD DATA INFILE "/home/mark/Orders.txt" REPLACE INTO TABLE Orders FIELDS TERMINATED BY ','   ENCLOSED BY '"';
  LOAD DATA INFILE語句中有一個MySQLimport工具中沒有特點:
  LOAD DATA INFILE 可以按指定的列把文件導(dǎo)入到數(shù)據(jù)庫中。
  當(dāng)我們要把數(shù)據(jù)的一部分內(nèi)容導(dǎo)入的時候,這個特點就很重要。比方說,我們要從Access數(shù)據(jù)庫升級到MySQL數(shù)據(jù)庫的時候,需要加入一些欄目(列/字段/field)到MySQL數(shù)據(jù)庫中,以適應(yīng)一些額外的需要。
  這個時候,我們的Access數(shù)據(jù)庫中的數(shù)據(jù)仍然是可用的,但是因為這些數(shù)據(jù)的欄目(field)與MySQL中的不再匹配,因此而無法再使用MySQLimport工具。盡管如此,我們?nèi)匀豢梢允褂肔OAD DATA INFILE,下面的例子顯示了如何向指定的欄目(field)中導(dǎo)入數(shù)據(jù):
  LOAD DATA INFILE "/home/Order.txt" INTO TABLE Orders(Order_Number, Order_Date, Customer_ID);
  如您所見,我們可以指定需要的欄目(fields)。這些指定的字段依然是以括號括起,由逗號分隔的,如果您遺漏了其中任何一個,MySQL將會提醒您^_^
  Importing Data from Microsoft Access (從Access中導(dǎo)入數(shù)據(jù),略)
  您可以看到MySQL有很多可以導(dǎo)入數(shù)據(jù)的方法,然而這些只是數(shù)據(jù)傳輸中的一半。另外的一般是從MySQL數(shù)據(jù)庫中導(dǎo)出數(shù)據(jù)。有許多的原因我們需要導(dǎo)出數(shù)據(jù)。一個重要的原因是用于備份數(shù)據(jù)庫。數(shù)據(jù)的造價常常是昂貴的,需要謹(jǐn)慎處理它們。經(jīng)常地備份可以幫助防止寶貴數(shù)據(jù)地丟失;另外一個原因是,也許您希望導(dǎo)出數(shù)據(jù)來共享。 在這個信息技術(shù)不斷成長的世界中,共享數(shù)據(jù)變得越來越常見。
  比方說Macmillan USA維護(hù)護(hù)著一個將要出版的書籍的大型數(shù)據(jù)庫。這個數(shù)據(jù)庫在許多書店之間共享,這樣他們就知道哪些書將會很快出版。醫(yī)院越來越走向采用無紙病歷記錄,這樣這些病歷可以隨時跟著你。世界變得越來越小,信息也被共享得越來越多。有很多中導(dǎo)出數(shù)據(jù)得方法,它們都跟導(dǎo)入數(shù)據(jù)很相似。因為,畢竟,這些都只是一種透視得方式。從數(shù)據(jù)庫導(dǎo)出的數(shù)據(jù)就是從另一端導(dǎo)入的數(shù)據(jù)。這里我們并不討論其他的數(shù)據(jù)庫各種各樣的導(dǎo)出數(shù)據(jù)的方法,您將學(xué)會如何用MySQL來實現(xiàn)數(shù)據(jù)導(dǎo)出。
  使用MySQLdump:
  MySQLdump命令位于MySQL/bin/目錄中
  MySQLdump工具很多方面類似相反作用的工具M(jìn)ySQLimport。它們有一些同樣的選項。但MySQLdump能夠做更多的事情。它可以把整個數(shù)據(jù)庫裝載到一個單獨的文本文件中。這個文件包含有所有重建您的數(shù)據(jù)庫所需要的SQL命令。這個命令取得所有的模式(Schema,后面有解釋)并且將其轉(zhuǎn)換成DDL語法(CREATE語句,即數(shù)據(jù)庫定義語句),取得所有的數(shù)據(jù),并且從這些數(shù)據(jù)中創(chuàng)建INSERT語句。這個工具將您的數(shù)據(jù)庫中所有的設(shè)計倒轉(zhuǎn)。因為所有的東西都被包含到了一個文本文件中。這個文本文件可以用一個簡單的批處理和一個合適SQL語句導(dǎo)回到MySQL中。這個工具令人難以置信地簡單而快速。決不會有半點讓人頭疼地地方。
  因此,如果您像裝載整個數(shù)據(jù)庫Meet_A_Geek的內(nèi)容到一個文件中,可以使用下面的命令:
   bin/MySQLdump –p Meet_A_Geek > MeetAGeek_Dump_File.txt
  這個語句也允許您指定一個表進(jìn)行dump(備份/導(dǎo)出/裝載?)。如果您只是希望把數(shù)據(jù)庫Meet_A_Geek中的表Orders中的整個內(nèi)容導(dǎo)出到一個文件,可以使用下面的命令:
   bin/MySQLdump –p Meet_A_Geek Orders >MeetAGeek_Orders.txt
  這個非常的靈活,您甚至可以使用WHERE從句來選擇您需要的記錄導(dǎo)出到文件中。要達(dá)到這樣的目的,可以使用類似于下面的命令:
   bin/MySQLdump –p –where="Order_ID > 2000" Meet_A_Geek Orders > Special_Dump.txt
  MySQLdump工具有大量的選項,部分選項如下表:
  選項/Option 作用/Action Performed
  --add-drop-table
   這個選項將會在每一個表的前面加上DROP TABLE IF EXISTS語句,這樣可以保證導(dǎo)回MySQL數(shù)據(jù)庫的時候不會出錯,因為每次導(dǎo)回的時候,都會首先檢查表是否存在,存在就刪除
  --add-locks
   這個選項會在INSERT語句中捆上一個LOCK TABLE和UNLOCK TABLE語句。這就防止在這些記錄被再次導(dǎo)入數(shù)據(jù)庫時其他用戶對表進(jìn)行的操作
  -c or - complete_insert
   這個選項使得MySQLdump命令給每一個產(chǎn)生INSERT語句加上列(field)的名字。當(dāng)把數(shù)據(jù)導(dǎo)出導(dǎo)另外一個數(shù)據(jù)庫時這個選項很有用。
  --delayed-insert 在INSERT命令中加入DELAY選項
   -F or -flush-logs 使用這個選項,在執(zhí)行導(dǎo)出之前將會刷新MySQL服務(wù)器的log.
   -f or -force 使用這個選項,即使有錯誤發(fā)生,仍然繼續(xù)導(dǎo)出
   --full 這個選項把附加信息也加到CREATE TABLE的語句中
   -l or -lock-tables 使用這個選項,導(dǎo)出表的時候服務(wù)器將會給表加鎖。
   -t or -no-create- info
   這個選項使的MySQLdump命令不創(chuàng)建CREATE TABLE語句,這個選項在您只需要數(shù)據(jù)而不需要DDL(數(shù)據(jù)庫定義語句)時很方便。
  -d or -no-data 這個選項使的MySQLdump命令不創(chuàng)建INSERT語句。
   在您只需要DDL語句時,可以使用這個選項。
   --opt 此選項將打開所有會提高文件導(dǎo)出速度和創(chuàng)造一個可以更快導(dǎo)入的文件的選項。
   -q or -quick 這個選項使得MySQL不會把整個導(dǎo)出的內(nèi)容讀入內(nèi)存再執(zhí)行導(dǎo)出,而是在讀到的時候就寫入導(dǎo)文件中。
   -T path or -tab = path 這個選項將會創(chuàng)建兩個文件,一個文件包含DDL語句或者表創(chuàng)建語句,另一個文件包含數(shù)據(jù)。DDL文件被命名為table_name.sql,數(shù)據(jù)文件被命名為table_name.txt.路徑名是存放這兩個文件的目錄。目錄必須已經(jīng)存在,并且命令的使用者有對文件的特權(quán)。
  -w "WHERE Clause" or -where = "Where clause "
   如前面所講的,您可以使用這一選項來過篩選將要放到導(dǎo)出文件的數(shù)據(jù)。
  假定您需要為一個表單中要用到的帳號建立一個文件,經(jīng)理要看今年(2004年)所有的訂單(Orders),它們并不對DDL感興趣,并且需要文件有逗號分隔,因為這樣就很容易導(dǎo)入到Excel中。 為了完成這個人物,您可以使用下面的句子:
  bin/MySQLdump –p –where "Order_Date >='2000-01-01'"
   –tab = /home/mark –no-create-info –fields-terminated-by=, Meet_A_Geek Orders
   這將會得到您想要的結(jié)果。
  schema:模式The set of statements, expressed in data definition language, that completely describe the structure of a data base.
   一組以數(shù)據(jù)定義語言來表達(dá)的語句集,該語句集完整地描述了數(shù)據(jù)庫的結(jié)構(gòu)。
  SELECT INTO OUTFILE :
  如果您覺得MySQLdump工具不夠酷,就使用SELECT INTO OUTFILE吧, MySQL同樣提供一個跟LOAD DATA INFILE命令有相反作用的命令,這就是SELECT INTO OUTFILE 命令,這兩個命令有很多的相似之處。首先,它們有所有的選項幾乎相同,F(xiàn)在您需要完成前面用MySQLdump完成的功能,可以依照下面的步驟進(jìn)行操作:
  1. 確保MySQLd進(jìn)程(服務(wù))已經(jīng)在運行
   2. cd /usr/local/MySQL
   3. bin/MySQLadmin ping ;// 如果這個句子通不過,可以用這個:MySQLadmin -u root -p ping
MySQLadmin ping用于檢測MySQLd的狀態(tài),is alive說明正在運行,出錯則可能需要用戶名和密碼。
   4. 啟動MySQL 監(jiān)聽程序.
   5. bin/MySQL –p Meet_A_Geek;// 進(jìn)入MySQL命令行,并且打開數(shù)據(jù)庫Meet_A_Geek,需要輸入密碼
   6. 在命令行中,輸入一下命令:
  SELECT * INTO OUTFILE '/home/mark/Orders.txt'
   FIELDS
   TERMINATED BY = ','
   FROM Orders
   WHERE Order_Date >= '2000-01-01'
  在你按了Return(回車)之后,文件就創(chuàng)建了。這個句子就像一個規(guī)則的SELECT語句,只是把想屏幕的輸出重定向到了文件中。這意味這您可以使用JOIN來實現(xiàn)多表的高級查詢。這個特點也可以被用作一個報表產(chǎn)生器。
  比方說,您可以組合這一章中討論的方法來產(chǎn)生一個非常有趣的查詢,試試這個:
  在MySQL目錄建立一個名為Report_G.rpt 的文本文件,加入下面的行:
  USE Meet_A_Geek;
   INSERT INTO Customers (Customer_ID, Last_Name, First_Name)
   VALUES (NULL, "Kinnard", "Vicky");
   INSERT INTO Customers (Customer_ID, Last_Name, First_Name)
   VALUES (NULL, "Kinnard", "Steven");
   INSERT INTO Customers (Customer_ID, Last_Name, First_Name)
   VALUES (NULL, "Brown", "Sam");
   SELECT Last_Name INTO OUTFILE '/home/mark/Report.rpt'
   FROM Customers WHERE Customer_ID > 1;
  然后確認(rèn) MySQL進(jìn)程在運行,并且您在MySQL目錄中, 輸入下面的命令:
  bin/MySQL ort/export)的方法來幫助得到報表。
查看全文

關(guān)于MSSQL數(shù)據(jù)庫的字段
數(shù)據(jù)類型是數(shù)據(jù)的一種屬性,表示數(shù)據(jù)所表示信息的類型。任何一種計算機(jī)語言都定義了自己的數(shù)據(jù)類型。當(dāng)然,不同的程序語言都具有不同的特點,所定義的數(shù)據(jù)類型的各類和名稱都或多或少有些不同。SQLServer提供了25種數(shù)據(jù)類型:
  ·Binary[(n)]
  ·Varbinary[(n)]
  ·Char[(n)]
  ·Varchar[(n)]
  ·Nchar[(n)]
  ·Nvarchar[(n)]
  ·Datetime
  ·Smalldatetime
  ·Decimal[(p[,s])]
  ·Numeric[(p[,s])]
  ·Float[(n)]
  ·Real
  ·Int
  ·Smallint
  ·Tinyint
  ·Money
  ·Smallmoney
  ·Bit
  ·Cursor
  ·Sysname
  ·Timestamp
  ·Uniqueidentifier
  ·Text
  ·Image
  ·Ntext
(1)二進(jìn)制數(shù)據(jù)類型
  二進(jìn)制數(shù)據(jù)包括Binary、Varbinary和Image
  Binary數(shù)據(jù)類型既可以是固定長度的(Binary),也可以是變長度的。
  Binary[(n)]是n位固定的二進(jìn)制數(shù)據(jù)。其中,n的取值范圍是從1到8000。其存儲窨的大小是n+4個字節(jié)。
  Varbinary[(n)]是n位變長度的二進(jìn)制數(shù)據(jù)。其中,n的取值范圍是從1到8000。其存儲窨的大小是n+4個字節(jié),不是n個字節(jié)。
  在Image數(shù)據(jù)類型中存儲的數(shù)據(jù)是以位字符串存儲的,不是由SQLServer解釋的,必須由應(yīng)用程序來解釋。例如,應(yīng)用程序可以使用BMP、TIEF、GIF和JPEG格式把數(shù)據(jù)存儲在Image數(shù)據(jù)類型中。
(2)字符數(shù)據(jù)類型
  字符數(shù)據(jù)的類型包括Char,Varchar和Text
  字符數(shù)據(jù)是由任何字母、符號和數(shù)字任意組合而成的數(shù)據(jù)。
  Varchar是變長字符數(shù)據(jù),其長度不超過8KB。Char是定長字符數(shù)據(jù),其長度最多為8KB。超過8KB的ASCII數(shù)據(jù)可以使用Text數(shù)據(jù)類型存儲。例如,因為Html文檔全部都是ASCII字符,并且在一般情況下長度超過8KB,所以這些文檔可以Text數(shù)據(jù)類型存儲在SQLServer中。
(3)Unicode數(shù)據(jù)類型
  Unicode數(shù)據(jù)類型包括Nchar,Nvarchar和Ntext
  在MicrosoftSQLServer中,傳統(tǒng)的非Unicode數(shù)據(jù)類型允許使用由特定字符集定義的字符。在SQLServer安裝過程中,允許選擇一種字符集。使用Unicode數(shù)據(jù)類型,列中可以存儲任何由Unicode標(biāo)準(zhǔn)定義的字符。在Unicode標(biāo)準(zhǔn)中,包括了以各種字符集定義的全部字符。使用Unicode數(shù)據(jù)類型,所戰(zhàn)勝的窨是使用非Unicode數(shù)據(jù)類型所占用的窨大小的兩倍。
  在SQLServer中,Unicode數(shù)據(jù)以Nchar、Nvarchar和Ntext數(shù)據(jù)類型存儲。使用這種字符類型存儲的列可以存儲多個字符集中的字符。當(dāng)列的長度變化時,應(yīng)該使用Nvarchar字符類型,這時最多可以存儲4000個字符。當(dāng)列的長度固定不變時,應(yīng)該使用Nchar字符類型,同樣,這時最多可以存儲4000個字符。當(dāng)使用Ntext數(shù)據(jù)類型時,該列可以存儲多于4000個字符。
(4)日期和時間數(shù)據(jù)類型
  日期和時間數(shù)據(jù)類型包括Datetime和Smalldatetime兩種類型
  日期和時間數(shù)據(jù)類型由有效的日期和時間組成。例如,有效的日期和時間數(shù)據(jù)包括“4/01/9812:15:00:00:00PM”和“1:28:29:15:01AM8/17/98”。前一個數(shù)據(jù)類型是日期在前,時間在后一個數(shù)據(jù)類型是霎時間在前,日期在后。在MicrosoftSQLServer中,日期和時間數(shù)據(jù)類型包括Datetime和Smalldatetime兩種類型時,所存儲的日期范圍是從1753年1月1日開始,到9999年12月31日結(jié)束(每一個值要求8個存儲字節(jié))。使用Smalldatetime數(shù)據(jù)類型時,所存儲的日期范圍是1900年1月1日開始,到2079年12月31日結(jié)束(每一個值要求4個存儲字節(jié))。
  日期的格式可以設(shè)定。設(shè)置日期格式的命令如下:
  
[email=SetDateFormat%7Bformat%7C@format_var]SetDateFormat{format|@format_var[/email]
|
  其中,
[email=format%7C@format_var]format|@format_var[/email]
是日期的順序。有效的參數(shù)包括MDY、DMY、YMD、YDM、MYD和DYM。在默認(rèn)情況下,日期格式為MDY。
  例如,當(dāng)執(zhí)行SetDateFormatYMD之后,日期的格式為年月日形式;當(dāng)執(zhí)行SetDateFormatDMY之后,日期的格式為日月有年形式
(5)數(shù)字?jǐn)?shù)據(jù)類型
  數(shù)字?jǐn)?shù)據(jù)只包含數(shù)字。數(shù)字?jǐn)?shù)據(jù)類型包括正數(shù)和負(fù)數(shù)、小數(shù)(浮點數(shù))和整數(shù)
  整數(shù)由正整數(shù)和負(fù)整數(shù)組成,例如39、25、0-2和33967。在MicrsoftSQLServer中,整數(shù)存儲的數(shù)據(jù)類型是  Int,Smallint和Tinyint。Int數(shù)據(jù)類型存儲數(shù)據(jù)的范圍大于Smallint數(shù)據(jù)類型存儲數(shù)據(jù)的范圍,而Smallint據(jù)類型存儲數(shù)據(jù)的范圍大于Tinyint數(shù)據(jù)類型存儲數(shù)據(jù)的范圍。使用Int數(shù)據(jù)狗昔存儲數(shù)據(jù)的范圍是從-2147483648到2147483647(每一個值要求4個字節(jié)存儲空間)。使用Smallint數(shù)據(jù)類型時,存儲數(shù)據(jù)的范圍從-32768到32767(每一個值要求2個字節(jié)存儲空間)。使用Tinyint數(shù)據(jù)類型時,存儲數(shù)據(jù)的范圍是從0到255(每一個值要求1個字節(jié)存儲空間)。
  精確小婁數(shù)據(jù)在SQLServer中的數(shù)據(jù)類型是Decimal和Numeric。這種數(shù)據(jù)所占的存儲空間根據(jù)該數(shù)據(jù)的位數(shù)后的位數(shù)來確定。
  在SQLServer中,近似小數(shù)數(shù)據(jù)的數(shù)據(jù)類型是Float和Real。例如,三分之一這個分?jǐn)?shù)記作。3333333,當(dāng)使用近似數(shù)據(jù)類型時能準(zhǔn)確表示。因此,從系統(tǒng)中檢索到的數(shù)據(jù)可能與存儲在該列中數(shù)據(jù)不完全一樣。
(6)貨幣數(shù)據(jù)表示正的或者負(fù)的貨幣數(shù)量。
  在MicrosoftSQLServer中,貨幣數(shù)據(jù)的數(shù)據(jù)類型是Money和Smallmoney
  Money數(shù)據(jù)類型要求8個存儲字節(jié),Smallmoney數(shù)據(jù)類型要求4個存儲字節(jié)。
(7)特殊數(shù)據(jù)類型
  特殊數(shù)據(jù)類型包括前面沒有提過的數(shù)據(jù)類型。特殊的數(shù)據(jù)類型有3種,即  Timestamp、Bit和Uniqueidentifier。
  Timestamp用于表示SQLServer活動的先后順序,以二進(jìn)投影的格式表示。Timestamp數(shù)據(jù)與插入數(shù)據(jù)或者日期和時間沒有關(guān)系。
  Bit由1或者0組成。當(dāng)表示真或者假、ON或者OFF時,使用Bit數(shù)據(jù)類型。例如,詢問是否是每一次訪問的客戶機(jī)請求可以存儲在這種數(shù)據(jù)類型的列中。
  Uniqueidentifier由16字節(jié)的十六進(jìn)制數(shù)字組成,表示一個全局唯一的。當(dāng)表的記錄行要求唯一時,GUID是非常有用。例如,在客戶標(biāo)識號列使用這種數(shù)據(jù)類型可以區(qū)別不同的客戶。
2.用戶定義的數(shù)據(jù)類型
  用戶定義的數(shù)據(jù)類型基于在MicrosoftSQLServer中提供的數(shù)據(jù)類型。當(dāng)幾個表中必須存儲同一種數(shù)據(jù)類型時,并且為保證這些列有相同的數(shù)據(jù)類型、長度和可空性時,可以使用用戶定義的數(shù)據(jù)類型。例如,可定義一種稱為  postal_code的數(shù)據(jù)類型,它基于Char數(shù)據(jù)類型。
  當(dāng)創(chuàng)建用戶定義的數(shù)據(jù)類型時,必須提供三個數(shù):數(shù)據(jù)類型的名稱、所基于的系統(tǒng)數(shù)據(jù)類型和數(shù)據(jù)類型的可空性。
(1)創(chuàng)建用戶定義的數(shù)據(jù)類型
  創(chuàng)建用戶定義的數(shù)據(jù)類型可以使用Transact-SQL語句。系統(tǒng)存儲過程sp_addtype可以來創(chuàng)建用戶定義的數(shù)據(jù)類型。其語法形式如下:
  sp_addtype{type},[,system_data_bype][,'null_type']
  其中,type是用戶定義的數(shù)據(jù)類型的名稱。system_data_type是系統(tǒng)提供的數(shù)據(jù)類型,例如Decimal、Int、Char  等等。null_type表示該數(shù)據(jù)類型是如何處理空值的,必須使用單引號引起來,例如'NULL'、'NOTNULL'或者'NONULL'。
  例子:
  Usecust
  Execsp_addtypessn,'Varchar(11)',"NotNull'
  創(chuàng)建一個用戶定義的數(shù)據(jù)類型ssn,其基于的系統(tǒng)數(shù)據(jù)類型是變長為11的字符,不允許空。
  例子:
  Usecust
  Execsp_addtypebirthday,datetime,'Null'
  創(chuàng)建一個用戶定義的數(shù)據(jù)類型birthday,其基于的系統(tǒng)數(shù)據(jù)類型是DateTime,允許空。
  例子:
  Usemaster
  Execsp_addtypetelephone,'varchar(24),'NotNull'
  Eexcsp_addtypefax,'varchar(24)','Null'
  創(chuàng)建兩個數(shù)據(jù)類型,即telephone和fax
(2)刪除用戶定義的數(shù)據(jù)類型
  當(dāng)用戶定義的數(shù)據(jù)類型不需要時,可刪除。刪除用戶定義的數(shù)據(jù)類型的命令是sp_droptype{'type'}。
  例子:
  Usemaster
  Execsp_droptype'ssn'
  注意:當(dāng)表中的列還正在使用用戶定義的數(shù)據(jù)類型時,或者在其上面還綁定有默認(rèn)或者規(guī)則時,這種用戶定義的數(shù)據(jù)類型不能刪除。
SQLSERVER的字段類型說明
以下為SQL SERVER7.0以上版本的字段類型說明。SQL SERVER6.5的字段類型說明請參考SQL SERVER提供的說明。
  
字段類型
描述
bit
0或1的整型數(shù)字
int
從-2^31(-2,147,483,648)到2^31(2,147,483,647)的整型數(shù)字
smallint
從-2^15(-32,768)到2^15(32,767)的整型數(shù)字
tinyint
從0到255的整型數(shù)字
decimal
從-10^38到10^38-1的定精度與有效位數(shù)的數(shù)字
numeric
decimal的同義詞
money
從-2^63(-922,337,203,685,477.5808)到2^63-1(922,337,203,685,477.5807)的貨幣數(shù)據(jù),最小貨幣單位千分之十
smallmoney
從-214,748.3648到214,748.3647的貨幣數(shù)據(jù),最小貨幣單位千分之十
float
從-1.79E+308到1.79E+308可變精度的數(shù)字
real
從-3.04E+38到3.04E+38可變精度的數(shù)字
datetime
從1753年1月1日到9999年12日31的日期和時間數(shù)據(jù),最小時間單位為百分之三秒或3.33毫秒
smalldatetime
從1900年1月1日到2079年6月6日的日期和時間數(shù)據(jù),最小時間單位為分鐘
timestamp
時間戳,一個數(shù)據(jù)庫寬度的唯一數(shù)字
uniqueidentifier
全球唯一標(biāo)識符GUID
char
定長非Unicode的字符型數(shù)據(jù),最大長度為8000
varchar
變長非Unicode的字符型數(shù)據(jù),最大長度為8000
text
變長非Unicode的字符型數(shù)據(jù),最大長度為2^31-1(2G)
nchar
定長Unicode的字符型數(shù)據(jù),最大長度為8000
nvarchar
變長Unicode的字符型數(shù)據(jù),最大長度為8000
ntext
變長Unicode的字符型數(shù)據(jù),最大長度為2^31-1(2G)
binary
定長二進(jìn)制數(shù)據(jù),最大長度為8000
varbinary
變長二進(jìn)制數(shù)據(jù),最大長度為8000
image
變長二進(jìn)制數(shù)據(jù),最大長度為2^31-1(2G)[down=upload/images/618fmall2.rar]DOWN LOAD THE FILE[/down]
天氣:大雨,ccdot發(fā)表于2006-6-20 14:44:36,閱讀了655次,共有個2回復(fù).
--語 句              功 能
--數(shù)據(jù)操作
SELECT   --從數(shù)據(jù)庫表中檢索數(shù)據(jù)行和列
INSERT   --向數(shù)據(jù)庫表添加新數(shù)據(jù)行
DELETE   --從數(shù)據(jù)庫表中刪除數(shù)據(jù)行
UPDATE   --更新數(shù)據(jù)庫表中的數(shù)據(jù)
--數(shù)據(jù)定義
CREATE TABLE  --創(chuàng)建一個數(shù)據(jù)庫表
DROP TABLE   --從數(shù)據(jù)庫中刪除表
ALTER TABLE   --修改數(shù)據(jù)庫表結(jié)構(gòu)
CREATE VIEW   --創(chuàng)建一個視圖
DROP VIEW   --從數(shù)據(jù)庫中刪除視圖
CREATE INDEX  --為數(shù)據(jù)庫表創(chuàng)建一個索引
DROP INDEX   --從數(shù)據(jù)庫中刪除索引
CREATE PROCEDURE  --創(chuàng)建一個存儲過程
DROP PROCEDURE  --從數(shù)據(jù)庫中刪除存儲過程
CREATE TRIGGER  --創(chuàng)建一個觸發(fā)器
DROP TRIGGER  --從數(shù)據(jù)庫中刪除觸發(fā)器
CREATE SCHEMA  --向數(shù)據(jù)庫添加一個新模式
DROP SCHEMA   --從數(shù)據(jù)庫中刪除一個模式
CREATE DOMAIN  --創(chuàng)建一個數(shù)據(jù)值域
ALTER DOMAIN  --改變域定義
DROP DOMAIN   --從數(shù)據(jù)庫中刪除一個域
--數(shù)據(jù)控制
GRANT   --授予用戶訪問權(quán)限
DENY   --拒絕用戶訪問
REVOKE   --解除用戶訪問權(quán)限
--事務(wù)控制
COMMIT   --結(jié)束當(dāng)前事務(wù)
ROLLBACK   --中止當(dāng)前事務(wù)
SET TRANSACTION  --定義當(dāng)前事務(wù)數(shù)據(jù)訪問特征
--程序化SQL
DECLARE   --為查詢設(shè)定游標(biāo)
EXPLAN   --為查詢描述數(shù)據(jù)訪問計劃
OPEN   --檢索查詢結(jié)果打開一個游標(biāo)
FETCH   --檢索一行查詢結(jié)果
CLOSE   --關(guān)閉游標(biāo)
PREPARE   --為動態(tài)執(zhí)行準(zhǔn)備SQL 語句
EXECUTE   --動態(tài)地執(zhí)行SQL 語句
DESCRIBE   --描述準(zhǔn)備好的查詢
---局部變量
declare @id char(10)
--set @id = ’10010001’
select @id = ’10010001’
---全局變量
---必須以@@開頭
MSSQL常用匯總
下列語句部分是Mssql語句,不可以在access中使用。
SQL分類:
DDL—數(shù)據(jù)定義語言(CREATE,ALTER,DROP,DECLARE)
DML—數(shù)據(jù)操縱語言(SELECT,DELETE,UPDATE,INSERT)
DCL—數(shù)據(jù)控制語言(GRANT,REVOKE,COMMIT,ROLLBACK)
首先,簡要介紹基礎(chǔ)語句:
1、說明:創(chuàng)建數(shù)據(jù)庫
CREATE DATABASE database-name
2、說明:刪除數(shù)據(jù)庫
drop database dbname
3、說明:備份sql server
--- 創(chuàng)建 備份數(shù)據(jù)的 device
USE master
EXEC sp_addumpdevice 'disk', 'testBack', 'c:mssql7backupMyNwind_1.dat'
--- 開始 備份
BACKUP DATABASE pubs TO testBack
4、說明:創(chuàng)建新表
create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..)
根據(jù)已有的表創(chuàng)建新表:
A:create table tab_new like tab_old (使用舊表創(chuàng)建新表)
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中列加上后數(shù)據(jù)類型也不能改變,唯一能改變的是增加varchar類型的長度。
7、說明:添加主鍵: Alter table tabname add primary key(col)
說明:刪除主鍵: Alter table tabname drop primary key(col)
8、說明:創(chuàng)建索引:create [unique] index idxname on tabname(col….)
刪除索引:drop index idxname
注:索引是不可更改的,想更改必須刪除重新建。
9、說明:創(chuàng)建視圖: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]
總數(shù):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
最。簊elect min(field1) as minvalue from table1
11、說明:幾個高級查詢運算詞
A: UNION 運算符
UNION 運算符通過組合其他兩個結(jié)果表(例如 TABLE1 和 TABLE2)并消去表中任何重復(fù)行而派生出一個結(jié)果表。當(dāng) ALL 隨 UNION 一起使用時(即 UNION ALL),不消除重復(fù)行。兩種情況下,派生表的每一行不是來自 TABLE1 就是來自 TABLE2。
B: EXCEPT 運算符
EXCEPT 運算符通過包括所有在 TABLE1 中但不在 TABLE2 中的行并消除所有重復(fù)行而派生出一個結(jié)果表。當(dāng) ALL 隨 EXCEPT 一起使用時 (EXCEPT ALL),不消除重復(fù)行。
C: INTERSECT 運算符
INTERSECT 運算符通過只包括 TABLE1 和 TABLE2 中都有的行并消除所有重復(fù)行而派生出一個結(jié)果表。當(dāng) ALL 隨 INTERSECT 一起使用時 (INTERSECT ALL),不消除重復(fù)行。
注:使用運算詞的幾個查詢結(jié)果行必須是一致的。
12、說明:使用外連接
A、left outer join:
左外連接(左連接):結(jié)果集幾包括連接表的匹配行,也包括左連接表的所有行。
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:
右外連接(右連接):結(jié)果集既包括連接表的匹配連接行,也包括右連接表的所有行。
C:full outer join:
全外連接:不僅包括符號連接表的匹配行,還包括兩個連接表中的所有記錄。
其次,大家來看一些不錯的sql語句
1、說明:復(fù)制表(只復(fù)制結(jié)構(gòu),源表名:a 新表名:b) (Access可用)
法一:select * into b from a where 11
法二:select top 0 * into b from a
2、說明:拷貝表(拷貝數(shù)據(jù),源表名:a 目標(biāo)表名:b) (Access可用)
insert into b(a, b, c) select d,e,f from b;
3、說明:跨數(shù)據(jù)庫之間表的拷貝(具體數(shù)據(jù)使用絕對路徑) (Access可用)
insert into b(a, b, c) select d,e,f from b in ‘具體數(shù)據(jù)庫’ 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、說明:顯示文章、提交人和最后回復(fù)時間
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限制查詢數(shù)據(jù)范圍時包括了邊界值,not between不包括
select * from table1 where time between time1 and time2
select a,b,c, from table1 where a not between 數(shù)值1 and 數(shù)值2
9、說明:in 的使用方法
select * from table1 where a [not] in (‘值1’,’值2’,’值4’,’值6’)
10、說明:兩張關(guān)聯(lián)表,刪除主表中已經(jīng)在副表中沒有的信息
delete from table1 where not exists ( select * from table2 where table1.field1=table2.field1 )
11、說明:四表聯(lián)查問題:
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 語句搞定數(shù)據(jù)庫分頁
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值相同的數(shù)據(jù)中對應(yīng)的a最大的記錄的所有信息(類似這樣的用法可以用于論壇每月排行榜,每月熱銷產(chǎn)品分析,按科目成績排名,等等.)
select a,b,c from tablename ta where a=(select max(a) from tablename tb where tb.b=ta.b)
16、說明:包括所有在 TableA 中但不在 TableB和TableC 中的行并消除所有重復(fù)行而派生出一個結(jié)果表
(select a from tableA ) except (select a from tableB) except (select a from tableC)
17、說明:隨機(jī)取出10條數(shù)據(jù)
select top 10 * from tablename order by newid()
18、說明:隨機(jī)選擇記錄
select newid()
19、說明:刪除重復(fù)記錄
Delete from tablename where id not in (select max(id) from tablename group by col1,col2,...)
20、說明:列出數(shù)據(jù)庫里所有的表名
select name from sysobjects where type='U'
21、說明:列出表里的所有的
select name from syscolumns where id=object_id('TableName')
22、說明:列示type、vender、pcs字段,以type字段排列,case可以方便地實現(xiàn)多重選擇,類似select 中的case。
select type,sum(case vender

本文來自ChinaUnix博客,如果查看原文請點:http://blog.chinaunix.net/u2/62738/showart_2061422.html

論壇徽章:
0
2 [報告]
發(fā)表于 2012-08-25 18:11 |只看該作者
選擇在每一組b值相同的數(shù)據(jù)中對應(yīng)的a最大的記錄的所有信息
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP