[转]SQL语句大全
生活随笔
收集整理的這篇文章主要介紹了
[转]SQL语句大全
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
[轉(zhuǎn)]SQL語句大全
SQL語句大全
--語?句?功?能
--數(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)建一個(gè)數(shù)據(jù)庫表
DROP?TABLE?--從數(shù)據(jù)庫中刪除表
ALTER?TABLE?--修改數(shù)據(jù)庫表結(jié)構(gòu)
CREATE?VIEW?--創(chuàng)建一個(gè)視圖
DROP?VIEW?--從數(shù)據(jù)庫中刪除視圖
CREATE?INDEX?--為數(shù)據(jù)庫表創(chuàng)建一個(gè)索引
DROP?INDEX?--從數(shù)據(jù)庫中刪除索引
CREATE?PROCEDURE?--創(chuàng)建一個(gè)存儲(chǔ)過程
?
DROP?PROCEDURE?--從數(shù)據(jù)庫中刪除存儲(chǔ)過程
CREATE?TRIGGER?--創(chuàng)建一個(gè)觸發(fā)器
DROP?TRIGGER?--從數(shù)據(jù)庫中刪除觸發(fā)器
CREATE?SCHEMA?--向數(shù)據(jù)庫添加一個(gè)新模式
DROP?SCHEMA?--從數(shù)據(jù)庫中刪除一個(gè)模式
CREATE?DOMAIN?--創(chuàng)建一個(gè)數(shù)據(jù)值域
ALTER?DOMAIN?--改變域定義
DROP?DOMAIN?--從數(shù)據(jù)庫中刪除一個(gè)域
--數(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ù)訪問計(jì)劃
OPEN?--檢索查詢結(jié)果打開一個(gè)游標(biāo)
FETCH?--檢索一行查詢結(jié)果
CLOSE?--關(guān)閉游標(biāo)
PREPARE?--為動(dòng)態(tài)執(zhí)行準(zhǔn)備SQL?語句
EXECUTE?--動(dòng)態(tài)地執(zhí)行SQL?語句
DESCRIBE?--描述準(zhǔn)備好的查詢?
---局部變量
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?小時(shí)2?分零3?秒后才執(zhí)行SELECT?語句
waitfor?delay?’01:02:03’
select?*?from?employee
--例?等到晚上11?點(diǎn)零8?分后才執(zhí)行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關(guān)鍵字的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列號(hào)
stockname?=?(select?stockname?from?stock_information?where?stockid?=?4)
---------?子查詢
---------?除非能確保內(nèi)層select只返回一個(gè)行的值,
---------?否則應(yīng)在外層where子句中用一個(gè)in限定符
select?distinct?column_name?form?table_name?---------?distinct指定檢索獨(dú)有的列值,不重復(fù)
select?stocknumber?,"stocknumber?+?10"?=?stocknumber?+?10?from?table_name
select?stockname?,?"stocknumber"?=?count(*)?from?table_name?group?by?stockname
---------?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合并查詢結(jié)果集,all-保留重復(fù)行
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***?---?修改數(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?.........?-----?實(shí)現(xiàn)刪除列的方法(創(chuàng)建新表)
alter?table?table_name?drop?constraint?Stockname_default?----?刪除Stockname的default約束
***function(/*常用函數(shù)*/)***
----統(tǒng)計(jì)函數(shù)----
AVG?--求平均值
COUNT?--統(tǒng)計(jì)數(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)計(jì)變異數(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á)式的自然對(duì)數(shù)值
LOG10(float_expression)--返回表達(dá)式的以10?為底的對(duì)數(shù)值
SQRT(float_expression)?--返回表達(dá)式的平方根
/***取近似值函數(shù)***/
CEILING(numeric_expression)?--返回>=表達(dá)式的最小整數(shù)返回的數(shù)據(jù)類型與表達(dá)式相同可為
--INTEGER/MONEY/REAL/FLOAT?類型
FLOOR(numeric_expression)?--返回<=表達(dá)式的最小整數(shù)返回的數(shù)據(jù)類型與表達(dá)式相同可為
--INTEGER/MONEY/REAL/FLOAT?類型
ROUND(numeric_expression)?--返回以integer_expression?為精度的四舍五入值返回的數(shù)據(jù)
--類型與表達(dá)式相同可為INTEGER/MONEY/REAL/FLOAT?類型
ABS(numeric_expression)?--返回表達(dá)式的絕對(duì)值返回的數(shù)據(jù)類型與表達(dá)式相同可為
--INTEGER/MONEY/REAL/FLOAT?類型
SIGN(numeric_expression)?--測試參數(shù)的正負(fù)號(hào)返回0?零值1?正數(shù)或-1?負(fù)數(shù)返回的數(shù)據(jù)類型
--與表達(dá)式相同可為INTEGER/MONEY/REAL/FLOAT?類型
PI()?--返回值為π?即3.1415926535897936
RAND([integer_expression])?--用任選的[integer_expression]做種子值得出0-1?間的隨機(jī)浮點(diǎn)數(shù)
----字符串函數(shù)----
ASCII()?--函數(shù)返回字符表達(dá)式最左端字符的ASCII?碼值
CHAR()?--函數(shù)用于將ASCII?碼轉(zhuǎn)換為字符
--如果沒有輸入0?~?255?之間的ASCII?碼值CHAR?函數(shù)會(huì)返回一個(gè)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ù)返回字符串中某個(gè)指定的子串出現(xiàn)的開始位置
SOUNDEX()?--函數(shù)返回一個(gè)四位字符碼?
--SOUNDEX函數(shù)可用來查找聲音相似的字符串但SOUNDEX函數(shù)對(duì)數(shù)字和漢字均只返回0?值?
DIFFERENCE()?--函數(shù)返回由SOUNDEX?函數(shù)返回的兩個(gè)字符表達(dá)式的值的差異
--0?兩個(gè)SOUNDEX?函數(shù)返回值的第一個(gè)字符不同
--1?兩個(gè)SOUNDEX?函數(shù)返回值的第一個(gè)字符相同
--2?兩個(gè)SOUNDEX?函數(shù)返回值的第一二個(gè)字符相同
--3?兩個(gè)SOUNDEX?函數(shù)返回值的第一二三個(gè)字符相同
--4?兩個(gè)SOUNDEX?函數(shù)返回值完全相同
QUOTENAME()?--函數(shù)返回被特定字符括起來的字符串
/*select?quotename('abc',?'{')?quotename('abc')
運(yùn)行結(jié)果如下:
----------------------------------
{abc}?[abc]*/
REPLICATE()?--函數(shù)返回一個(gè)重復(fù)character_expression?指定次數(shù)的字符串
/*select?replicate('abc',?3)?replicate(?'abc',?-2)
運(yùn)行結(jié)果如下:
-----------?-----------
abcabcabc?NULL
REVERSE()?--函數(shù)將指定的字符串的字符排列順序顛倒
REPLACE()?--函數(shù)返回被替換了指定子串的字符串
/*select?replace('abc123g',?'123',?'def')
運(yùn)行結(jié)果如下:
-----------?-----------
abcdefg*/
SPACE()?--函數(shù)返回一個(gè)有指定長度的空白字符串
STUFF()?--函數(shù)用另一子串替換字符串指定位置長度的子串
----數(shù)據(jù)類型轉(zhuǎn)換函數(shù)----
CAST()?函數(shù)語法如下
CAST()?(<expression>?AS?<data_?type>[?length?])
CONVERT()?函數(shù)語法如下
CONVERT()?(<data_?type>[?length?],?<expression>?[,?style])
select?cast(100+99?as?char)?convert(varchar(12),?getdate())
運(yùn)行結(jié)果如下
------------------------------?------------
199?Jan?15?2000
----日期函數(shù)----
DAY()?--函數(shù)返回date_expression?中的日期值
MONTH()?--函數(shù)返回date_expression?中的月份值
YEAR()?--函數(shù)返回date_expression?中的年份值
DATEADD(<datepart>?,<number>?,<date>)?
--函數(shù)返回指定日期date?加上指定的額外日期間隔number?產(chǎn)生的新日期
DATEDIFF(<datepart>?,<number>?,<date>)
--函數(shù)返回兩個(gè)指定日期在datepart?方面的不同之處
DATENAME(<datepart>?,?<date>)?--函數(shù)以字符串的形式返回日期的指定部分
DATEPART(<datepart>?,?<date>)?--函數(shù)以整數(shù)值的形式返回日期的指定部分
GETDATE()?--函數(shù)以DATETIME?的缺省格式返回系統(tǒng)當(dāng)前的日期和時(shí)間
----系統(tǒng)函數(shù)----
APP_NAME()?--函數(shù)返回當(dāng)前執(zhí)行的應(yīng)用程序的名稱
COALESCE()?--函數(shù)返回眾多表達(dá)式中第一個(gè)非NULL?表達(dá)式的值
COL_LENGTH(<'table_name'>,?<'column_name'>)?--函數(shù)返回表中指定字段的長度值
COL_NAME(<table_id>,?<column_id>)?--函數(shù)返回表中指定字段的名稱即列名
DATALENGTH()?--函數(shù)返回?cái)?shù)據(jù)表達(dá)式的數(shù)據(jù)的實(shí)際長度
DB_ID(['database_name'])?--函數(shù)返回?cái)?shù)據(jù)庫的編號(hào)
DB_NAME(database_id)?--函數(shù)返回?cái)?shù)據(jù)庫的名稱
HOST_ID()?--函數(shù)返回服務(wù)器端計(jì)算機(jī)的名稱
HOST_NAME()?--函數(shù)返回服務(wù)器端計(jì)算機(jī)的名稱
IDENTITY(<data_type>[,?seed?increment])?[AS?column_name])
--IDENTITY()?函數(shù)只在SELECT?INTO?語句中使用用于插入一個(gè)identity?column列到新表中
/*select?identity(int,?1,?1)?as?column_name
into?newtable
from?oldtable*/
ISDATE()?--函數(shù)判斷所給定的表達(dá)式是否為合理日期
ISNULL(<check_expression>,?<replacement_value>)?--函數(shù)將表達(dá)式中的NULL?值用指定值替換
ISNUMERIC()?--函數(shù)判斷所給定的表達(dá)式是否為合理的數(shù)值
NEWID()?--函數(shù)返回一個(gè)UNIQUEIDENTIFIER?類型的數(shù)值
NULLIF(<expression1>,?<expression2>)
--NULLIF?函數(shù)在expression1?與expression2?相等時(shí)返回NULL?值若不相等時(shí)則返回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í),無非就是添加、刪除、修改,這得設(shè)計(jì)到一些常用的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)計(jì)函數(shù):
AVG(字段名)?得出一個(gè)表格欄平均值
COUNT(*|字段名)?對(duì)數(shù)據(jù)行數(shù)的統(tǒng)計(jì)或?qū)δ骋粰谟兄档臄?shù)據(jù)行數(shù)統(tǒng)計(jì)
MAX(字段名)?取得一個(gè)表格欄最大的值
MIN(字段名)?取得一個(gè)表格欄最小的值
SUM(字段名)?把數(shù)據(jù)欄的值相加
引用以上函數(shù)的方法:
sql="select?sum(字段名)?as?別名?from?數(shù)據(jù)表?where?條件表達(dá)式"
set?rs=conn.excute(sql)
用?rs("別名")?獲取統(tǒng)的計(jì)值,其它函數(shù)運(yùn)用同上。
(6)?數(shù)據(jù)表的建立和刪除:
CREATE?TABLE?數(shù)據(jù)表名稱(字段1?類型1(長度),字段2?類型2(長度)?……?)
例:CREATE?TABLE?tab01(name?varchar(50),datetime?default?now())
DROP?TABLE?數(shù)據(jù)表名稱?(永久性刪除一個(gè)數(shù)據(jù)表)
在ASP編程時(shí),下面這些語句是必須知道的:
1.連接數(shù)據(jù)庫
a.?ASP與Access數(shù)據(jù)庫連接:
<%@?language=VBs?cript%>
<%
dim?conn,mdbfile
mdbfile=server.mappath("數(shù)據(jù)庫名稱.mdb")
set?conn=server.createobject("adodb.connection")
conn.open?"driver={microsoft?access?driver?(*.mdb)};uid=admin;pwd=數(shù)據(jù)庫密碼;dbq="&mdbfile
%>
b.?ASP與SQL數(shù)據(jù)庫連接:
<%@?language=VBs?cript%>
<%
dim?conn
set?conn=server.createobject("ADODB.connection")
con.open?"PROVIDER=SQLOLEDB;DATA?SOURCE=SQL服務(wù)器名稱或IP地址;UID=sa;PWD=數(shù)據(jù)庫密碼;DATABASE=數(shù)據(jù)庫名稱
%>
建立記錄集對(duì)象:
set?rs=server.createobject("adodb.recordset")
rs.open?SQL語句,conn,3,2
2.?記錄集對(duì)象的方法:
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)前記錄,但記錄指針不會(huì)向下移動(dòng)
rs.addnew?添加記錄到數(shù)據(jù)表末端
rs.update?更新數(shù)據(jù)表記錄
附:
常數(shù)?常數(shù)值?說明
--------------------------------
adLockReadOnly?1?缺省值,Recordset對(duì)象以只讀方式啟動(dòng),無法運(yùn)行AddNew、Update及Delete等方法
adLockPrssimistic?2?當(dāng)數(shù)據(jù)源正在更新時(shí),系統(tǒng)會(huì)暫時(shí)鎖住其他用戶的動(dòng)作,以保持?jǐn)?shù)據(jù)一致性。
adLockOptimistic?3?當(dāng)數(shù)據(jù)源正在更新時(shí),系統(tǒng)并不會(huì)鎖住其他用戶的動(dòng)作,其他用戶可以對(duì)數(shù)據(jù)進(jìn)行增、刪、改的操作。
adLockBatchOptimistic?4?當(dāng)數(shù)據(jù)源正在更新時(shí),其他用戶必須將CursorLocation屬性改為adUdeClientBatch才能對(duì)數(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?*?From?表?Where?ID?in?(Select?Top?M?ID?From?表)?Order?by?ID?Desc
----------------------------------
N到結(jié)尾記錄
Select?Top?N?*?From?表?Order?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:獲取某一個(gè)表的所有字段select?name?from?syscolumns?where?id=object_id('表名')
11:查看與某一個(gè)表相關(guān)的視圖、存儲(chǔ)過程、函數(shù)select?a.*?from?sysobjects?a,?syscomments?b?where?a.id?=?b.id?and?b.text?like?'%表名%'
12:查看當(dāng)前數(shù)據(jù)庫中所有存儲(chǔ)過程select?name?as?存儲(chǔ)過程名稱?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:查詢某一個(gè)表的字段和數(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常用操作
?
不再新開文章.
這里只打算講解四部分了,也就最簡單、最常用的四部分。
1、觸發(fā)器。
定義:?何為觸發(fā)器?在SQL?Server里面也就是對(duì)某一個(gè)表的一定的操作,觸發(fā)某種條件,從而執(zhí)行的一段程序。觸發(fā)器是一個(gè)特殊的存儲(chǔ)過程。
常見的觸發(fā)器有三種:分別應(yīng)用于Insert?,?Update?,?Delete?事件。(SQL?Server?2000定義了新的觸發(fā)器,這里不提)
我為什么要使用觸發(fā)器?比如,這么兩個(gè)表:
Create?Table?Student(?--學(xué)生表
StudentID?int?primary?key,?--學(xué)號(hào)
....
)
Create?Table?BorrowRecord(?--學(xué)生借書記錄表
BorrowRecord?int?identity(1,1),?--流水號(hào)?
StudentID?int?,?--學(xué)號(hào)
BorrowDate?datetime,?--借出時(shí)間
ReturnDAte?Datetime,?--歸還時(shí)間
...
)
用到的功能有:
1.如果我更改了學(xué)生的學(xué)號(hào),我希望他的借書記錄仍然與這個(gè)學(xué)生相關(guān)(也就是同時(shí)更改借書記錄表的學(xué)號(hào));
2.如果該學(xué)生已經(jīng)畢業(yè),我希望刪除他的學(xué)號(hào)的同時(shí),也刪除它的借書記錄。
等等。
這時(shí)候可以用到觸發(fā)器。對(duì)于1,創(chuàng)建一個(gè)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ā)器里面的兩個(gè)臨時(shí)的表:Deleted?,?Inserted?。注意Deleted?與Inserted分別表示觸發(fā)事件的表“舊的一條記錄”和“新的一條記錄”。
一個(gè)Update?的過程可以看作為:生成新的記錄到Inserted表,復(fù)制舊的記錄到Deleted表,然后刪除Student記錄并寫入新紀(jì)錄。
對(duì)于2,創(chuàng)建一個(gè)Delete觸發(fā)器
Create?trigger?trdStudent
On?Student
for?Delete
As
Delete?BorrowRecord?
From?BorrowRecord?br?,?Delted?d
Where?br.StudentID=d.StudentID
從這兩個(gè)例子我們可以看到了觸發(fā)器的關(guān)鍵:A.2個(gè)臨時(shí)的表;B.觸發(fā)機(jī)制。
這里我們只講解最簡單的觸發(fā)器。復(fù)雜的容后說明。
事實(shí)上,我不鼓勵(lì)使用觸發(fā)器。觸發(fā)器的初始設(shè)計(jì)思想,已經(jīng)被“級(jí)聯(lián)”所替代.
?
MSSQL數(shù)據(jù)庫導(dǎo)出和導(dǎo)入
?
SQL?Server導(dǎo)出導(dǎo)入數(shù)據(jù)方法
?
?一、導(dǎo)出導(dǎo)入SQL?Server里某個(gè)數(shù)據(jù)庫?
?
1.?在SQL?Server企業(yè)管理器里選中要轉(zhuǎn)移的數(shù)據(jù)庫,按鼠標(biāo)右鍵,選所有任務(wù)->備份數(shù)據(jù)庫。?
2.?備份?選數(shù)據(jù)庫-完全,?目的?備份到?按添加按鈕?文件名?在SQL?Server服務(wù)器硬盤下輸入一個(gè)自定義的備份數(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)建一個(gè)新的數(shù)據(jù)庫;?然后選中這個(gè)新創(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)前活動(dòng)->鎖/對(duì)象->找到數(shù)據(jù)庫下鎖的進(jìn)程號(hào)->到查詢分析器里用kill?進(jìn)程號(hào)殺掉這些鎖,?然后再做還原)?
注意:
如果在原有的目的SQL?Server數(shù)據(jù)庫上從備份文件(*.bak)還原數(shù)據(jù)庫?會(huì)把已經(jīng)存在的表、存儲(chǔ)過程等數(shù)據(jù)庫對(duì):象全部替換成最近這次導(dǎo)入的備份數(shù)據(jù)庫里的內(nèi)容。?如果一定要還原備份文件(*.bak)里部分?jǐn)?shù)據(jù),需要另外建一個(gè)新數(shù)據(jù)庫,?其邏輯名稱和數(shù)量同備份文件(*.bak)里數(shù)據(jù)庫的邏輯名稱和數(shù)量一致;?新數(shù)據(jù)庫的物理文件名稱取得一定要和備份文件(*.bak)里數(shù)據(jù)庫的物理文件不一樣才行。?
?
二、導(dǎo)出導(dǎo)入SQL?Server里某個(gè)表?
?
1.?沒有防火墻,同一個(gè)局域網(wǎng)里或不在同一個(gè)局域網(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ū)Т翱?/span>->下一步->?選數(shù)據(jù)源->?數(shù)據(jù)源(用于SQL?Server的Microfost?OLE?DB提供程序)->?服務(wù)器(可選擇局域網(wǎng)內(nèi)能訪問到的所有SQL?Server服務(wù)器,或者直接輸入IP地址)->?選擇使用windows身份驗(yàn)證還是使用SQL?Serve身份驗(yàn)證(輸入數(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)換里面可以修改源表和目的表之間字段的對(duì)應(yīng)關(guān)系,修改目的表字段的類型和長度等,?并可以選擇創(chuàng)建目的表,在目的表中增加行,除去并重新創(chuàng)建目的表,啟用標(biāo)志插入等選項(xiàng)->確定->下一步->?保存、調(diào)度和復(fù)制包->時(shí)間->立即運(yùn)行(如果要實(shí)現(xiàn)隔一段時(shí)間自動(dòng)導(dǎo)出導(dǎo)入數(shù)據(jù),選調(diào)度DTS包以便以后執(zhí)行)->?保存(可以不選)->[?保存DTS包(如果以后還要轉(zhuǎn)移這批相同的數(shù)據(jù),可以把本次導(dǎo)出導(dǎo)入的內(nèi)容和步驟保存起來,?存到SQL?Server即可,保存的時(shí)候要輸入DTS的包名及詳細(xì)描述)->下一步->?]->完成?正在執(zhí)行包->圖形界面顯示創(chuàng)建表及插入記錄的步驟和狀態(tài)->完成?
2.?經(jīng)過防火墻,不在同一個(gè)局域網(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ū)Т翱?/span>->下一步->?選數(shù)據(jù)源->?數(shù)據(jù)源(用于SQL?Server的Microfost?OLE?DB提供程序)->?服務(wù)器(可選擇局域網(wǎng)內(nèi)能訪問到的所有SQL?Server服務(wù)器)->?選擇使用windows身份驗(yàn)證還是使用SQL?Serve身份驗(yàn)證(輸入數(shù)據(jù)庫的用戶名和密碼)->?數(shù)據(jù)庫(可選擇上面選中SQL?Server服務(wù)器上所有權(quán)限范圍內(nèi)的數(shù)據(jù)庫)->下一步->?選擇目的->目的(文本文件)->?文件名(在自己的電腦硬盤中生成一個(gè)自定義的文本文件)?->下一步->?制定表復(fù)制或查詢->選從源數(shù)據(jù)庫復(fù)制表和視圖(也可以選擇用一條查詢指定要傳輸?shù)臄?shù)據(jù))->下一步->?選擇目的文件格式->源(選擇要導(dǎo)出的表)->用默認(rèn)的帶分隔符->選第一行包含有列名稱選項(xiàng)->下一步->?保存、調(diào)度和復(fù)制包->時(shí)間->立即運(yùn)行(如果要實(shí)現(xiàn)隔一段時(shí)間自動(dòng)導(dǎo)出到文本文件,選調(diào)度DTS包以便以后執(zhí)行)->?保存(可以不選)->?[保存DTS包(保存的時(shí)候要輸入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ù)庫里跟文本文件同名的新表名時(shí),默認(rèn)的會(huì)把所有字段類型都變成字符串。?所以我們要這樣做:?在源SQL?Server數(shù)據(jù)庫上先生成創(chuàng)建表的sql語句?在SQL?Server查詢分析器里->選中源數(shù)據(jù)庫里表名->按右鍵->在新窗口中編寫對(duì)象腳本->創(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)入時(shí)間的年月信息,例如table_0113)?調(diào)用導(dǎo)入/導(dǎo)出工具->彈出數(shù)據(jù)轉(zhuǎn)換服務(wù)導(dǎo)入/導(dǎo)出向?qū)Т翱?/span>->下一步->?選數(shù)據(jù)源->?數(shù)據(jù)源(文本文件)->?文件名(已傳到目的SQL?Server數(shù)據(jù)庫下要導(dǎo)入的文本文件,后綴可以不是*.txt,?但是常規(guī)文本編輯器能打開的文件,文件類型選全部)->下一步->?選擇文件格式->用默認(rèn)的帶分隔符->選第一行包含有列名稱選項(xiàng)->下一步->?制定列分割符->逗號(hào)->下一步->?選擇目的->目的(用于SQL?Server的Microfost?OLE?DB提供程序)->?服務(wù)器(可選擇目標(biāo)局域網(wǎng)內(nèi)能訪問到的所有SQL?Server服務(wù)器)->?選擇使用windows身份驗(yàn)證還是使用SQL?Serve身份驗(yàn)證(輸入數(shù)據(jù)庫的用戶名和密碼)->?數(shù)據(jù)庫(可選擇上面選中SQL?Server服務(wù)器上所有權(quán)限范圍內(nèi)的數(shù)據(jù)庫)->下一步->?選擇源表和視圖->修改目的表名為剛才創(chuàng)建的表名->轉(zhuǎn)換(在目的表中追加行)?->下一步->?保存、調(diào)度和復(fù)制包->?時(shí)間->立即運(yùn)行(如果要實(shí)現(xiàn)隔一段時(shí)間自動(dòng)把文本文件導(dǎo)入,選調(diào)度DTS包以便以后執(zhí)行)->?保存(可以不選)->?[保存DTS包(保存的時(shí)候要輸入DTS的包名及詳細(xì)描述)->下一步->]->完成?正在執(zhí)行包->圖形界面顯示文本文件到表的步驟和狀態(tài)->完成?如果要更改導(dǎo)入時(shí)間的年月信息的表名,例如table_0113到原來的表名,?在企業(yè)管理器里把原來的表名改成table_old_0113,table_0113改名成table。?這會(huì)對(duì)應(yīng)用程序里頻繁訪問的表照成一定的中斷。?
注意:
源表上的建的索引和主鍵約束不能用上面介紹的1和2方法轉(zhuǎn)移過來,還需要手工來建索引和主鍵。?標(biāo)志種子和not?null的約束可以繼承過來。?導(dǎo)入視圖時(shí)會(huì)把源視圖里所有的真實(shí)數(shù)據(jù)導(dǎo)入成一個(gè)新表,而不是視圖。
?
?三、SQL?Server存儲(chǔ)過程或用戶定義的函數(shù)導(dǎo)出導(dǎo)入
?
?1、導(dǎo)出存儲(chǔ)過程或用戶定義的函數(shù)成*.sql文件?在SQL?Server企業(yè)管理器里選中源數(shù)據(jù)庫,?存儲(chǔ)過程->單選或者多選中要轉(zhuǎn)移的存儲(chǔ)過程->?用戶定義的函數(shù)->單選或者多選中要轉(zhuǎn)移的函數(shù)->?按鼠標(biāo)右鍵,選所有任務(wù)->生成SQL腳本->確定->在自己的電腦硬盤中生成一個(gè)自定義的*.sql文件->?保存->正在生成SQL腳本->成功?2、如果目的數(shù)據(jù)庫經(jīng)過防火墻,不在同一個(gè)局域網(wǎng)里,?要通過FTP或者remote?desktop或者pcanywhere等方法把第1步生成的*.sql文件傳到目的SQL?Server數(shù)據(jù)庫服務(wù)器上。?3、用查詢分析器進(jìn)入SQL?Server目的數(shù)據(jù)庫,?從菜單里選文件->打開->打開查詢文件->選中第1步生成的*.sql文件->點(diǎn)執(zhí)行查詢的綠色倒三角型快捷鍵->?查詢窗口里會(huì)出現(xiàn)執(zhí)行后的消息(有時(shí)候可能因?yàn)榇鎯?chǔ)過程和用戶定義的函數(shù)之間有一定的依賴關(guān)系,會(huì)報(bào)一些錯(cuò)。?最好先執(zhí)行用戶定義的函數(shù)的*.sql文件,再執(zhí)行存儲(chǔ)過程的*.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)。?
?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也可以類似配置,但使用的時(shí)候有一些限制)
?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ù)庫(跟上面第二點(diǎn)講的一致,就不重復(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è)或者個(gè)人版數(shù)據(jù)庫做中轉(zhuǎn)。?
(?注意:ORACLE通過訪問SQL?Server的數(shù)據(jù)庫鏈接時(shí),用select?*?的時(shí)候字段名是用雙引號(hào)引起來的。)?
?
MySQL數(shù)據(jù)庫導(dǎo)出和導(dǎo)入
1).MySQLimport的語法介紹:?
MySQLimport位于MySQL/bin目錄中,是MySQL的一個(gè)載入(或者說導(dǎo)入)數(shù)據(jù)的一個(gè)非常有效的工具。這是一個(gè)命令行工具。有兩個(gè)參數(shù)以及大量的選項(xiàng)可供選擇。這個(gè)工具把一個(gè)文本文件(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命令將會(huì)出錯(cuò)。
其中表的名字是導(dǎo)入文件的第一個(gè)句號(hào)(.)前面文件字符串,另外一個(gè)例子:MySQLimport?Meet_A_Geek?Cus.to.mers.txt
那么我們將把文件中的內(nèi)容導(dǎo)入到數(shù)據(jù)庫Meet_A_Geek?中的Cus表中。?
上面的例子中,都只用到兩個(gè)參數(shù),并沒有用到更多的選項(xiàng),下面介紹MySQLimport的選項(xiàng)?
2).MySQLimport的常用選項(xiàng)介紹:?
選項(xiàng)?功能?
-d?or?--delete?新數(shù)據(jù)導(dǎo)入數(shù)據(jù)表中之前刪除數(shù)據(jù)數(shù)據(jù)表中的所有信息?
-f?or?--force?不管是否遇到錯(cuò)誤,MySQLimport將強(qiáng)制繼續(xù)插入數(shù)據(jù)?
-i?or?--ignore?MySQLimport跳過或者忽略那些有相同唯一關(guān)鍵字的行,?導(dǎo)入文件中的數(shù)據(jù)將被忽略。?
-l?or?-lock-tables?數(shù)據(jù)被插入之前鎖住表,這樣就防止了,你在更新數(shù)據(jù)庫時(shí),用戶的查詢和更新受到影響。?
-r?or?-replace?這個(gè)選項(xiàng)與-i選項(xiàng)的作用相反;此選項(xiàng)將替代表中有相同唯一關(guān)鍵字的記錄。?
--fields-enclosed-?by=?char?指定文本文件中數(shù)據(jù)的記錄時(shí)以什么括起的,?很多情況下數(shù)據(jù)以雙引號(hào)括起。?默認(rèn)的情況下數(shù)據(jù)是沒有被字符括起的。?
--fields-terminated-?by=char?指定各個(gè)數(shù)據(jù)的值之間的分隔符,在句號(hào)分隔的文件中,分隔符是句號(hào)。您可以用此選項(xiàng)指定數(shù)據(jù)之間的分隔符。
默認(rèn)的分隔符是跳格符(Tab)?
--lines-terminated-?by=str?此選項(xiàng)指定文本文件中行與行之間數(shù)據(jù)的分隔字符串或者字符。?默認(rèn)的情況下MySQLimport以newline為行分隔符。?
您可以選擇用一個(gè)字符串來替代一個(gè)單個(gè)的字符:?
一個(gè)新行或者一個(gè)回車。?
MySQLimport命令常用的選項(xiàng)還有-v?顯示版本(version),-p?提示輸入密碼(password)等。?
3).例子:導(dǎo)入一個(gè)以逗號(hào)為分隔符的文件?
文件中行的記錄格式是這樣的:?
"1",?"ORD89876",?"1?Dozen?Roses",?"19991226"?
我們的任務(wù)是要把這個(gè)文件里面的數(shù)據(jù)導(dǎo)入到數(shù)據(jù)庫Meet_A_Geek中的表格Orders中,我們使用這個(gè)命令:?
bin/MySQLimport?–prl?–fields-enclosed-by="?–fields-terminated-by=,?Meet_A_Geek?Orders.txt?
這個(gè)命令可能看起來很不爽,不過當(dāng)你熟悉了之后,這是非常簡單的。第一部分,bin/MySQLimport?,告訴操作系統(tǒng)你要運(yùn)行的命令是MySQL/bin目錄下的MySQLimport,選項(xiàng)p是要求輸入密碼,這樣就要求你在改動(dòng)數(shù)據(jù)庫之前輸入密碼,操作起來會(huì)更安全。?我們用了r選項(xiàng)是因?yàn)槲覀兿胍驯碇械奈ㄒ魂P(guān)鍵字與文件記錄中有重復(fù)唯一關(guān)鍵字的記錄替換成文件中的數(shù)據(jù)。我們表單中的數(shù)據(jù)不是最新的,需要用文件中的數(shù)據(jù)去更新,因而就用r這個(gè)選項(xiàng),替代數(shù)據(jù)庫中已經(jīng)有的記錄。l選項(xiàng)的作用是在我們插入數(shù)據(jù)的時(shí)候鎖住表,這樣就阻止了用戶在我們更新表的時(shí)候?qū)Ρ磉M(jìn)行查詢或者更改的操作。
批處理是一種非交互式運(yùn)行MySQL程序的方法,如同您在MySQL中使用的命令一樣,你仍然將使用這些命令。?
為了實(shí)現(xiàn)批處理,您重定向一個(gè)文件到MySQL程序中,首先我們需要一個(gè)文本文件,這個(gè)文本文件包含有與我們在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");?
注意上面的這些句子的語法都必須是正確的,并且每個(gè)句子以分號(hào)結(jié)束。?
上面的USE命令選擇數(shù)據(jù)庫,INSERT命令插入數(shù)據(jù)。?
下面我們要把上面的文件導(dǎo)入到數(shù)據(jù)庫中,導(dǎo)入之前要確認(rèn)數(shù)據(jù)庫已經(jīng)在運(yùn)行,即是MySQLd進(jìn)程(或者說服務(wù),Windows?NT下面稱為”服務(wù)“,unix下面為”進(jìn)程“)已經(jīng)在運(yùn)行。?
然后運(yùn)行下面的命令:?
bin/MySQL?–p?<?/home/mark/New_Data.sql?
接著按提示輸入密碼,如果上面的文件中的語句沒有錯(cuò)誤,那么這些數(shù)據(jù)就被導(dǎo)入到了數(shù)據(jù)庫中。?
命令行中使用LOAD?DATA?INFILE?從文件中導(dǎo)入數(shù)據(jù)到數(shù)據(jù)庫:?
現(xiàn)在您可能會(huì)問自己,"究竟為什么我要輸入所有的這些SQL語句到文件中,然后通過程序運(yùn)行它們呢?”?
這樣看起來好像需要大量的工作。很好,你這樣想很可能就對(duì)了。但是假如你有從所有這些命令中產(chǎn)生的log記錄呢?現(xiàn)在這樣就很棒,嗯,大多數(shù)數(shù)據(jù)庫都會(huì)自動(dòng)產(chǎn)生數(shù)據(jù)庫中的事件記錄的log。而大部分log都包含有用過的原始的SQL命令。因此,如果您不能從您現(xiàn)在的數(shù)據(jù)庫中導(dǎo)出數(shù)據(jù)到新的MySQL數(shù)據(jù)庫中使用,那么您可以使用log和MySQL的批處理特性,來快速且方便地導(dǎo)入您地?cái)?shù)據(jù)。當(dāng)然,這樣就省去了打字的麻煩。?
LOAD?DATA?INFILE?
這是我們要介紹的最后一個(gè)導(dǎo)入數(shù)據(jù)到MySQL數(shù)據(jù)庫中的方法。這個(gè)命令與MySQLimport非常相似,但這個(gè)方法可以在MySQL命令行中使用。也就是說您可以在所有使用API的程序中使用這個(gè)命令。使用這種方法,您就可以在應(yīng)用程序中導(dǎo)入您想要導(dǎo)入的數(shù)據(jù)。?
使用這個(gè)命令之前,MySQLd進(jìn)程(服務(wù))必須已經(jīng)在運(yùn)行。
啟動(dòng)MySQL命令行:
bin/MySQL?–p?
按提示輸入密碼,成功進(jìn)入MySQL命令行之后,輸入下面的命令:
USE?Meet_A_Geek;?
LOAD?DATA?INFILE?"/home/mark/data.sql"?INTO?TABLE?Orders;?
簡單的講,這樣將會(huì)把文件data.sql中的內(nèi)容導(dǎo)入到表Orders中,如MySQLimport工具一樣,這個(gè)命令也有一些可以選擇的參數(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)先級(jí),如果您要把它標(biāo)記為低優(yōu)先級(jí)(LOW_PRIORITY),那么MySQL將會(huì)等到?jīng)]有其他人讀這個(gè)表的時(shí)候,才把插入數(shù)據(jù)。可以使用如下的命令:?
?LOAD?DATA?LOW_PRIORITY?INFILE?"/home/mark/data.sql"?INTO?TABLE?Orders;?
您也可以指定是否在插入數(shù)據(jù)的時(shí)候,取代或者忽略文件與數(shù)據(jù)表中重復(fù)的鍵值。替代重復(fù)的鍵值的語法:?
LOAD?DATA?LOW_PRIORITY?INFILE?"/home/mark/data.sql"?REPLACE?INTO?TABLE?Orders;?
上面的句子看起來有點(diǎn)笨拙,但卻把關(guān)鍵字放在了讓您的剖析器可以理解的地方。?
下面的一對(duì)選項(xiàng)描述了文件的記錄格式,這些選項(xiàng)也是在MySQLimport工具中可以用的。他們在這里看起來有點(diǎn)不同。首先,要用到FIELDS關(guān)鍵字,如果用到這個(gè)關(guān)鍵字,MySQL剖析器希望看到至少有下面的一個(gè)選項(xiàng):
TERMINATED?BY?character?
?ENCLOSED?BY?character?
?ESCAPED?BY?character?
這些關(guān)鍵字與它們的參數(shù)跟MySQLimport中的用法是一樣的.?The?
?TERMINATED?BY?描述字段的分隔符,默認(rèn)情況下是tab字符(t)?
?ENCLOSED?BY描述的是字段的括起字符。比方以引號(hào)括起每一個(gè)字段。?
?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語句中有一個(gè)MySQLimport工具中沒有特點(diǎn):?
LOAD?DATA?INFILE?可以按指定的列把文件導(dǎo)入到數(shù)據(jù)庫中。?
當(dāng)我們要把數(shù)據(jù)的一部分內(nèi)容導(dǎo)入的時(shí)候,這個(gè)特點(diǎn)就很重要。比方說,我們要從Access數(shù)據(jù)庫升級(jí)到MySQL數(shù)據(jù)庫的時(shí)候,需要加入一些欄目(列/字段/field)到MySQL數(shù)據(jù)庫中,以適應(yīng)一些額外的需要。?
這個(gè)時(shí)候,我們的Access數(shù)據(jù)庫中的數(shù)據(jù)仍然是可用的,但是因?yàn)檫@些數(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)。這些指定的字段依然是以括號(hào)括起,由逗號(hào)分隔的,如果您遺漏了其中任何一個(gè),MySQL將會(huì)提醒您^_^?
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ù)。一個(gè)重要的原因是用于備份數(shù)據(jù)庫。數(shù)據(jù)的造價(jià)常常是昂貴的,需要謹(jǐn)慎處理它們。經(jīng)常地備份可以幫助防止寶貴數(shù)據(jù)地丟失;另外一個(gè)原因是,也許您希望導(dǎo)出數(shù)據(jù)來共享。?在這個(gè)信息技術(shù)不斷成長的世界中,共享數(shù)據(jù)變得越來越常見。?
比方說Macmillan?USA維護(hù)護(hù)著一個(gè)將要出版的書籍的大型數(shù)據(jù)庫。這個(gè)數(shù)據(jù)庫在許多書店之間共享,這樣他們就知道哪些書將會(huì)很快出版。醫(yī)院越來越走向采用無紙病歷記錄,這樣這些病歷可以隨時(shí)跟著你。世界變得越來越小,信息也被共享得越來越多。有很多中導(dǎo)出數(shù)據(jù)得方法,它們都跟導(dǎo)入數(shù)據(jù)很相似。因?yàn)?#xff0c;畢竟,這些都只是一種透視得方式。從數(shù)據(jù)庫導(dǎo)出的數(shù)據(jù)就是從另一端導(dǎo)入的數(shù)據(jù)。這里我們并不討論其他的數(shù)據(jù)庫各種各樣的導(dǎo)出數(shù)據(jù)的方法,您將學(xué)會(huì)如何用MySQL來實(shí)現(xiàn)數(shù)據(jù)導(dǎo)出。
使用MySQLdump:?
MySQLdump命令位于MySQL/bin/目錄中?
MySQLdump工具很多方面類似相反作用的工具M(jìn)ySQLimport。它們有一些同樣的選項(xiàng)。但MySQLdump能夠做更多的事情。它可以把整個(gè)數(shù)據(jù)庫裝載到一個(gè)單獨(dú)的文本文件中。這個(gè)文件包含有所有重建您的數(shù)據(jù)庫所需要的SQL命令。這個(gè)命令取得所有的模式(Schema,后面有解釋)并且將其轉(zhuǎn)換成DDL語法(CREATE語句,即數(shù)據(jù)庫定義語句),取得所有的數(shù)據(jù),并且從這些數(shù)據(jù)中創(chuàng)建INSERT語句。這個(gè)工具將您的數(shù)據(jù)庫中所有的設(shè)計(jì)倒轉(zhuǎn)。因?yàn)樗械臇|西都被包含到了一個(gè)文本文件中。這個(gè)文本文件可以用一個(gè)簡單的批處理和一個(gè)合適SQL語句導(dǎo)回到MySQL中。這個(gè)工具令人難以置信地簡單而快速。決不會(huì)有半點(diǎn)讓人頭疼地地方。?
因此,如果您像裝載整個(gè)數(shù)據(jù)庫Meet_A_Geek的內(nèi)容到一個(gè)文件中,可以使用下面的命令:?
?bin/MySQLdump?–p?Meet_A_Geek?>?MeetAGeek_Dump_File.txt?
這個(gè)語句也允許您指定一個(gè)表進(jìn)行dump(備份/導(dǎo)出/裝載?)。如果您只是希望把數(shù)據(jù)庫Meet_A_Geek中的表Orders中的整個(gè)內(nèi)容導(dǎo)出到一個(gè)文件,可以使用下面的命令:?
?bin/MySQLdump?–p?Meet_A_Geek?Orders?>MeetAGeek_Orders.txt?
這個(gè)非常的靈活,您甚至可以使用WHERE從句來選擇您需要的記錄導(dǎo)出到文件中。要達(dá)到這樣的目的,可以使用類似于下面的命令:?
?bin/MySQLdump?–p?–where="Order_ID?>?2000"?Meet_A_Geek?Orders?>?Special_Dump.txt?
MySQLdump工具有大量的選項(xiàng),部分選項(xiàng)如下表:?
選項(xiàng)/Option?作用/Action?Performed?
--add-drop-table?
?這個(gè)選項(xiàng)將會(huì)在每一個(gè)表的前面加上DROP?TABLE?IF?EXISTS語句,這樣可以保證導(dǎo)回MySQL數(shù)據(jù)庫的時(shí)候不會(huì)出錯(cuò),因?yàn)槊看螌?dǎo)回的時(shí)候,都會(huì)首先檢查表是否存在,存在就刪除?
--add-locks?
?這個(gè)選項(xiàng)會(huì)在INSERT語句中捆上一個(gè)LOCK?TABLE和UNLOCK?TABLE語句。這就防止在這些記錄被再次導(dǎo)入數(shù)據(jù)庫時(shí)其他用戶對(duì)表進(jìn)行的操作?
-c?or?-?complete_insert?
?這個(gè)選項(xiàng)使得MySQLdump命令給每一個(gè)產(chǎn)生INSERT語句加上列(field)的名字。當(dāng)把數(shù)據(jù)導(dǎo)出導(dǎo)另外一個(gè)數(shù)據(jù)庫時(shí)這個(gè)選項(xiàng)很有用。?
--delayed-insert?在INSERT命令中加入DELAY選項(xiàng)?
?-F?or?-flush-logs?使用這個(gè)選項(xiàng),在執(zhí)行導(dǎo)出之前將會(huì)刷新MySQL服務(wù)器的log.?
?-f?or?-force?使用這個(gè)選項(xiàng),即使有錯(cuò)誤發(fā)生,仍然繼續(xù)導(dǎo)出?
?--full?這個(gè)選項(xiàng)把附加信息也加到CREATE?TABLE的語句中?
?-l?or?-lock-tables?使用這個(gè)選項(xiàng),導(dǎo)出表的時(shí)候服務(wù)器將會(huì)給表加鎖。?
?-t?or?-no-create-?info?
?這個(gè)選項(xiàng)使的MySQLdump命令不創(chuàng)建CREATE?TABLE語句,這個(gè)選項(xiàng)在您只需要數(shù)據(jù)而不需要DDL(數(shù)據(jù)庫定義語句)時(shí)很方便。?
-d?or?-no-data?這個(gè)選項(xiàng)使的MySQLdump命令不創(chuàng)建INSERT語句。?
?在您只需要DDL語句時(shí),可以使用這個(gè)選項(xiàng)。?
?--opt?此選項(xiàng)將打開所有會(huì)提高文件導(dǎo)出速度和創(chuàng)造一個(gè)可以更快導(dǎo)入的文件的選項(xiàng)。?
?-q?or?-quick?這個(gè)選項(xiàng)使得MySQL不會(huì)把整個(gè)導(dǎo)出的內(nèi)容讀入內(nèi)存再執(zhí)行導(dǎo)出,而是在讀到的時(shí)候就寫入導(dǎo)文件中。?
?-T?path?or?-tab?=?path?這個(gè)選項(xiàng)將會(huì)創(chuàng)建兩個(gè)文件,一個(gè)文件包含DDL語句或者表創(chuàng)建語句,另一個(gè)文件包含數(shù)據(jù)。DDL文件被命名為table_name.sql,數(shù)據(jù)文件被命名為table_name.txt.路徑名是存放這兩個(gè)文件的目錄。目錄必須已經(jīng)存在,并且命令的使用者有對(duì)文件的特權(quán)。?
-w?"WHERE?Clause"?or?-where?=?"Where?clause?"?
?如前面所講的,您可以使用這一選項(xiàng)來過篩選將要放到導(dǎo)出文件的數(shù)據(jù)。?
假定您需要為一個(gè)表單中要用到的帳號(hào)建立一個(gè)文件,經(jīng)理要看今年(2004年)所有的訂單(Orders),它們并不對(duì)DDL感興趣,并且需要文件有逗號(hào)分隔,因?yàn)檫@樣就很容易導(dǎo)入到Excel中。?為了完成這個(gè)人物,您可以使用下面的句子:?
bin/MySQLdump?–p?–where?"Order_Date?>='2000-01-01'"?
?–tab?=?/home/mark?–no-create-info?–fields-terminated-by=,?Meet_A_Geek?Orders?
?這將會(huì)得到您想要的結(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同樣提供一個(gè)跟LOAD?DATA?INFILE命令有相反作用的命令,這就是SELECT?INTO?OUTFILE?命令,這兩個(gè)命令有很多的相似之處。首先,它們有所有的選項(xiàng)幾乎相同。現(xiàn)在您需要完成前面用MySQLdump完成的功能,可以依照下面的步驟進(jìn)行操作:?
1.?確保MySQLd進(jìn)程(服務(wù))已經(jīng)在運(yùn)行?
?2.?cd?/usr/local/MySQL?
?3.?bin/MySQLadmin?ping?;//?如果這個(gè)句子通不過,可以用這個(gè):MySQLadmin?-u?root?-p?ping?
MySQLadmin?ping用于檢測MySQLd的狀態(tài),is?alive說明正在運(yùn)行,出錯(cuò)則可能需要用戶名和密碼。?
?4.?啟動(dòng)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)建了。這個(gè)句子就像一個(gè)規(guī)則的SELECT語句,只是把想屏幕的輸出重定向到了文件中。這意味這您可以使用JOIN來實(shí)現(xiàn)多表的高級(jí)查詢。這個(gè)特點(diǎn)也可以被用作一個(gè)報(bào)表產(chǎn)生器。?
比方說,您可以組合這一章中討論的方法來產(chǎn)生一個(gè)非常有趣的查詢,試試這個(gè):?
在MySQL目錄建立一個(gè)名為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)程在運(yùn)行,并且您在MySQL目錄中,?輸入下面的命令:?
bin/MySQL?<?Report_G.rpt檢查您命名作為輸出的文件,這個(gè)文件將會(huì)包含所有您在Customers表中輸入的顧客的姓。?如您所見,您可以使用今天學(xué)到的導(dǎo)入/導(dǎo)出(import/export)的方法來幫助得到報(bào)表。?查看全文?
關(guān)于MSSQL數(shù)據(jù)庫的字段
?
數(shù)據(jù)類型是數(shù)據(jù)的一種屬性,表示數(shù)據(jù)所表示信息的類型。任何一種計(jì)算機(jī)語言都定義了自己的數(shù)據(jù)類型。當(dāng)然,不同的程序語言都具有不同的特點(diǎn),所定義的數(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。其存儲(chǔ)窨的大小是n+4個(gè)字節(jié)。
Varbinary[(n)]是n位變長度的二進(jìn)制數(shù)據(jù)。其中,n的取值范圍是從1到8000。其存儲(chǔ)窨的大小是n+4個(gè)字節(jié),不是n個(gè)字節(jié)。
在Image數(shù)據(jù)類型中存儲(chǔ)的數(shù)據(jù)是以位字符串存儲(chǔ)的,不是由SQLServer解釋的,必須由應(yīng)用程序來解釋。例如,應(yīng)用程序可以使用BMP、TIEF、GIF和JPEG格式把數(shù)據(jù)存儲(chǔ)在Image數(shù)據(jù)類型中。
(2)字符數(shù)據(jù)類型
字符數(shù)據(jù)的類型包括Char,Varchar和Text
字符數(shù)據(jù)是由任何字母、符號(hào)和數(shù)字任意組合而成的數(shù)據(jù)。
Varchar是變長字符數(shù)據(jù),其長度不超過8KB。Char是定長字符數(shù)據(jù),其長度最多為8KB。超過8KB的ASCII數(shù)據(jù)可以使用Text數(shù)據(jù)類型存儲(chǔ)。例如,因?yàn)镠tml文檔全部都是ASCII字符,并且在一般情況下長度超過8KB,所以這些文檔可以Text數(shù)據(jù)類型存儲(chǔ)在SQLServer中。
(3)Unicode數(shù)據(jù)類型
Unicode數(shù)據(jù)類型包括Nchar,Nvarchar和Ntext
在MicrosoftSQLServer中,傳統(tǒng)的非Unicode數(shù)據(jù)類型允許使用由特定字符集定義的字符。在SQLServer安裝過程中,允許選擇一種字符集。使用Unicode數(shù)據(jù)類型,列中可以存儲(chǔ)任何由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ù)類型存儲(chǔ)。使用這種字符類型存儲(chǔ)的列可以存儲(chǔ)多個(gè)字符集中的字符。當(dāng)列的長度變化時(shí),應(yīng)該使用Nvarchar字符類型,這時(shí)最多可以存儲(chǔ)4000個(gè)字符。當(dāng)列的長度固定不變時(shí),應(yīng)該使用Nchar字符類型,同樣,這時(shí)最多可以存儲(chǔ)4000個(gè)字符。當(dāng)使用Ntext數(shù)據(jù)類型時(shí),該列可以存儲(chǔ)多于4000個(gè)字符。
(4)日期和時(shí)間數(shù)據(jù)類型
日期和時(shí)間數(shù)據(jù)類型包括Datetime和Smalldatetime兩種類型
日期和時(shí)間數(shù)據(jù)類型由有效的日期和時(shí)間組成。例如,有效的日期和時(shí)間數(shù)據(jù)包括“4/01/9812:15:00:00:00PM”和“1:28:29:15:01AM8/17/98”。前一個(gè)數(shù)據(jù)類型是日期在前,時(shí)間在后一個(gè)數(shù)據(jù)類型是霎時(shí)間在前,日期在后。在MicrosoftSQLServer中,日期和時(shí)間數(shù)據(jù)類型包括Datetime和Smalldatetime兩種類型時(shí),所存儲(chǔ)的日期范圍是從1753年1月1日開始,到9999年12月31日結(jié)束(每一個(gè)值要求8個(gè)存儲(chǔ)字節(jié))。使用Smalldatetime數(shù)據(jù)類型時(shí),所存儲(chǔ)的日期范圍是1900年1月1日開始,到2079年12月31日結(jié)束(每一個(gè)值要求4個(gè)存儲(chǔ)字節(jié))。
日期的格式可以設(shè)定。設(shè)置日期格式的命令如下:
SetDateFormat{format|@format_var|
其中,format|@format_var是日期的順序。有效的參數(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ù)(浮點(diǎn)數(shù))和整數(shù)
整數(shù)由正整數(shù)和負(fù)整數(shù)組成,例如39、25、0-2和33967。在MicrsoftSQLServer中,整數(shù)存儲(chǔ)的數(shù)據(jù)類型是 Int,Smallint和Tinyint。Int數(shù)據(jù)類型存儲(chǔ)數(shù)據(jù)的范圍大于Smallint數(shù)據(jù)類型存儲(chǔ)數(shù)據(jù)的范圍,而Smallint據(jù)類型存儲(chǔ)數(shù)據(jù)的范圍大于Tinyint數(shù)據(jù)類型存儲(chǔ)數(shù)據(jù)的范圍。使用Int數(shù)據(jù)狗昔存儲(chǔ)數(shù)據(jù)的范圍是從-2147483648到2147483647(每一個(gè)值要求4個(gè)字節(jié)存儲(chǔ)空間)。使用Smallint數(shù)據(jù)類型時(shí),存儲(chǔ)數(shù)據(jù)的范圍從-32768到32767(每一個(gè)值要求2個(gè)字節(jié)存儲(chǔ)空間)。使用Tinyint數(shù)據(jù)類型時(shí),存儲(chǔ)數(shù)據(jù)的范圍是從0到255(每一個(gè)值要求1個(gè)字節(jié)存儲(chǔ)空間)。
精確小婁數(shù)據(jù)在SQLServer中的數(shù)據(jù)類型是Decimal和Numeric。這種數(shù)據(jù)所占的存儲(chǔ)空間根據(jù)該數(shù)據(jù)的位數(shù)后的位數(shù)來確定。
在SQLServer中,近似小數(shù)數(shù)據(jù)的數(shù)據(jù)類型是Float和Real。例如,三分之一這個(gè)分?jǐn)?shù)記作。3333333,當(dāng)使用近似數(shù)據(jù)類型時(shí)能準(zhǔn)確表示。因此,從系統(tǒng)中檢索到的數(shù)據(jù)可能與存儲(chǔ)在該列中數(shù)據(jù)不完全一樣。
(6)貨幣數(shù)據(jù)表示正的或者負(fù)的貨幣數(shù)量。
在MicrosoftSQLServer中,貨幣數(shù)據(jù)的數(shù)據(jù)類型是Money和Smallmoney
Money數(shù)據(jù)類型要求8個(gè)存儲(chǔ)字節(jié),Smallmoney數(shù)據(jù)類型要求4個(gè)存儲(chǔ)字節(jié)。
(7)特殊數(shù)據(jù)類型
特殊數(shù)據(jù)類型包括前面沒有提過的數(shù)據(jù)類型。特殊的數(shù)據(jù)類型有3種,即 Timestamp、Bit和Uniqueidentifier。
Timestamp用于表示SQLServer活動(dòng)的先后順序,以二進(jìn)投影的格式表示。Timestamp數(shù)據(jù)與插入數(shù)據(jù)或者日期和時(shí)間沒有關(guān)系。
Bit由1或者0組成。當(dāng)表示真或者假、ON或者OFF時(shí),使用Bit數(shù)據(jù)類型。例如,詢問是否是每一次訪問的客戶機(jī)請求可以存儲(chǔ)在這種數(shù)據(jù)類型的列中。
Uniqueidentifier由16字節(jié)的十六進(jìn)制數(shù)字組成,表示一個(gè)全局唯一的。當(dāng)表的記錄行要求唯一時(shí),GUID是非常有用。例如,在客戶標(biāo)識(shí)號(hào)列使用這種數(shù)據(jù)類型可以區(qū)別不同的客戶。
2.用戶定義的數(shù)據(jù)類型
用戶定義的數(shù)據(jù)類型基于在MicrosoftSQLServer中提供的數(shù)據(jù)類型。當(dāng)幾個(gè)表中必須存儲(chǔ)同一種數(shù)據(jù)類型時(shí),并且為保證這些列有相同的數(shù)據(jù)類型、長度和可空性時(shí),可以使用用戶定義的數(shù)據(jù)類型。例如,可定義一種稱為 postal_code的數(shù)據(jù)類型,它基于Char數(shù)據(jù)類型。
當(dāng)創(chuàng)建用戶定義的數(shù)據(jù)類型時(shí),必須提供三個(gè)數(shù):數(shù)據(jù)類型的名稱、所基于的系統(tǒng)數(shù)據(jù)類型和數(shù)據(jù)類型的可空性。
(1)創(chuàng)建用戶定義的數(shù)據(jù)類型
創(chuàng)建用戶定義的數(shù)據(jù)類型可以使用Transact-SQL語句。系統(tǒng)存儲(chǔ)過程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ù)類型是如何處理空值的,必須使用單引號(hào)引起來,例如'NULL'、'NOTNULL'或者'NONULL'。
例子:
Usecust
Execsp_addtypessn,'Varchar(11)',"NotNull'
創(chuàng)建一個(gè)用戶定義的數(shù)據(jù)類型ssn,其基于的系統(tǒng)數(shù)據(jù)類型是變長為11的字符,不允許空。
例子:
Usecust
Execsp_addtypebirthday,datetime,'Null'
創(chuàng)建一個(gè)用戶定義的數(shù)據(jù)類型birthday,其基于的系統(tǒng)數(shù)據(jù)類型是DateTime,允許空。
例子:
Usemaster
Execsp_addtypetelephone,'varchar(24),'NotNull'
Eexcsp_addtypefax,'varchar(24)','Null'
創(chuàng)建兩個(gè)數(shù)據(jù)類型,即telephone和fax
(2)刪除用戶定義的數(shù)據(jù)類型
當(dāng)用戶定義的數(shù)據(jù)類型不需要時(shí),可刪除。刪除用戶定義的數(shù)據(jù)類型的命令是sp_droptype{'type'}。
例子:
Usemaster
Execsp_droptype'ssn'
注意:當(dāng)表中的列還正在使用用戶定義的數(shù)據(jù)類型時(shí),或者在其上面還綁定有默認(rèn)或者規(guī)則時(shí),這種用戶定義的數(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í)間數(shù)據(jù),最小時(shí)間單位為百分之三秒或3.33毫秒?
smalldatetime?從1900年1月1日到2079年6月6日的日期和時(shí)間數(shù)據(jù),最小時(shí)間單位為分鐘?
?
?
timestamp?時(shí)間戳,一個(gè)數(shù)據(jù)庫寬度的唯一數(shù)字?
uniqueidentifier?全球唯一標(biāo)識(shí)符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)?
--語?句 功?能
--數(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)建一個(gè)數(shù)據(jù)庫表
DROP?TABLE ?--從數(shù)據(jù)庫中刪除表?
ALTER?TABLE ?--修改數(shù)據(jù)庫表結(jié)構(gòu)
CREATE?VIEW ?--創(chuàng)建一個(gè)視圖?
DROP?VIEW ?--從數(shù)據(jù)庫中刪除視圖
CREATE?INDEX --為數(shù)據(jù)庫表創(chuàng)建一個(gè)索引
DROP?INDEX ?--從數(shù)據(jù)庫中刪除索引?
CREATE?PROCEDURE ?--創(chuàng)建一個(gè)存儲(chǔ)過程?
DROP?PROCEDURE --從數(shù)據(jù)庫中刪除存儲(chǔ)過程
CREATE?TRIGGER --創(chuàng)建一個(gè)觸發(fā)器?
DROP?TRIGGER --從數(shù)據(jù)庫中刪除觸發(fā)器
CREATE?SCHEMA --向數(shù)據(jù)庫添加一個(gè)新模式
DROP?SCHEMA ?--從數(shù)據(jù)庫中刪除一個(gè)模式
CREATE?DOMAIN --創(chuàng)建一個(gè)數(shù)據(jù)值域
ALTER?DOMAIN --改變域定義
DROP?DOMAIN ?--從數(shù)據(jù)庫中刪除一個(gè)域
--數(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ù)訪問計(jì)劃
OPEN --檢索查詢結(jié)果打開一個(gè)游標(biāo)
FETCH --檢索一行查詢結(jié)果?
CLOSE --關(guān)閉游標(biāo)
PREPARE --為動(dòng)態(tài)執(zhí)行準(zhǔn)備SQL?語句?
EXECUTE --動(dòng)態(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、說明:增加一個(gè)列
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、說明:幾個(gè)簡單的基本的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
最小:select?min(field1)?as?minvalue?from?table1
11、說明:幾個(gè)高級(jí)查詢運(yùn)算詞
A:?UNION?運(yùn)算符?
UNION?運(yùn)算符通過組合其他兩個(gè)結(jié)果表(例如?TABLE1?和?TABLE2)并消去表中任何重復(fù)行而派生出一個(gè)結(jié)果表。當(dāng)?ALL?隨?UNION?一起使用時(shí)(即?UNION?ALL),不消除重復(fù)行。兩種情況下,派生表的每一行不是來自?TABLE1?就是來自?TABLE2。?
B:?EXCEPT?運(yùn)算符?
EXCEPT?運(yùn)算符通過包括所有在?TABLE1?中但不在?TABLE2?中的行并消除所有重復(fù)行而派生出一個(gè)結(jié)果表。當(dāng)?ALL?隨?EXCEPT?一起使用時(shí)?(EXCEPT?ALL),不消除重復(fù)行。?
C:?INTERSECT?運(yùn)算符
INTERSECT?運(yùn)算符通過只包括?TABLE1?和?TABLE2?中都有的行并消除所有重復(fù)行而派生出一個(gè)結(jié)果表。當(dāng)?ALL?隨?INTERSECT?一起使用時(shí)?(INTERSECT?ALL),不消除重復(fù)行。?
注:使用運(yùn)算詞的幾個(gè)查詢結(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:?
全外連接:不僅包括符號(hào)連接表的匹配行,還包括兩個(gè)連接表中的所有記錄。
其次,大家來看一些不錯(cuò)的sql語句
1、說明:復(fù)制表(只復(fù)制結(jié)構(gòu),源表名:a?新表名:b)?(Access可用)
法一:select?*?into?b?from?a?where?1<>1
法二: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ù)使用絕對(duì)路徑)?(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ù)時(shí)間
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ù)范圍時(shí)包括了邊界值,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開始時(shí)間,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ù)中對(duì)應(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ù)行而派生出一個(gè)結(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可以方便地實(shí)現(xiàn)多重選擇,類似select?中的case。
select?type,sum(case?vender
SELECT??表名=case?when?a.colorder=1?then?d.name?else?''?end,?
???????字段序號(hào)=a.colorder,?字段名=a.name,?標(biāo)識(shí)=case?when?COLUMNPROPERTY(?a.id,a.name,'IsIdentity')=1?then?'√'else?''?end,?
????????主鍵=case?when?exists(SELECT?1?FROM?sysobjects?where?xtype='PK'?and?name?in?
?????????????????????????????(??SELECT?name?FROM?sysindexes?WHERE?indid?in
?????????????????????????????(???SELECT?indid?FROM?sysindexkeys?WHERE?id?=?a.id?AND?colid=a.colid??)))?then?'√'?else?''?end,?
??????????????????????????????類型=b.name,?占用字節(jié)數(shù)=a.length,?長度=COLUMNPROPERTY(a.id,a.name,'PRECISION'),?
?????????????????小數(shù)位數(shù)=isnull(COLUMNPROPERTY(a.id,a.name,'Scale'),0),?允許空=case?when?a.isnullable=1?then?'√'else?''?end,?
??????????????????默認(rèn)值=isnull(e.text,''),?字段說明=isnull(g.[value],'')
?FROM?syscolumns?a?left?join?systypes?b?on?a.xtype=b.xusertype?inner?join?sysobjects?d?on?a.id=d.id??
?and?d.xtype='U'?and??d.name<>'dtproperties'?left?join?syscomments?e?on?a.cdefault=e.id?
?left?join?sysproperties?g?on?a.id=g.id?and?a.colid=g.smallid??order?by?a.id,a.colorder
?
??SQL語句大全
--語?句?功?能
--數(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)建一個(gè)數(shù)據(jù)庫表
DROP?TABLE?--從數(shù)據(jù)庫中刪除表
ALTER?TABLE?--修改數(shù)據(jù)庫表結(jié)構(gòu)
CREATE?VIEW?--創(chuàng)建一個(gè)視圖
DROP?VIEW?--從數(shù)據(jù)庫中刪除視圖
CREATE?INDEX?--為數(shù)據(jù)庫表創(chuàng)建一個(gè)索引
DROP?INDEX?--從數(shù)據(jù)庫中刪除索引
CREATE?PROCEDURE?--創(chuàng)建一個(gè)存儲(chǔ)過程
?
DROP?PROCEDURE?--從數(shù)據(jù)庫中刪除存儲(chǔ)過程
CREATE?TRIGGER?--創(chuàng)建一個(gè)觸發(fā)器
DROP?TRIGGER?--從數(shù)據(jù)庫中刪除觸發(fā)器
CREATE?SCHEMA?--向數(shù)據(jù)庫添加一個(gè)新模式
DROP?SCHEMA?--從數(shù)據(jù)庫中刪除一個(gè)模式
CREATE?DOMAIN?--創(chuàng)建一個(gè)數(shù)據(jù)值域
ALTER?DOMAIN?--改變域定義
DROP?DOMAIN?--從數(shù)據(jù)庫中刪除一個(gè)域
--數(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ù)訪問計(jì)劃
OPEN?--檢索查詢結(jié)果打開一個(gè)游標(biāo)
FETCH?--檢索一行查詢結(jié)果
CLOSE?--關(guān)閉游標(biāo)
PREPARE?--為動(dòng)態(tài)執(zhí)行準(zhǔn)備SQL?語句
EXECUTE?--動(dòng)態(tài)地執(zhí)行SQL?語句
DESCRIBE?--描述準(zhǔn)備好的查詢?
---局部變量
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?小時(shí)2?分零3?秒后才執(zhí)行SELECT?語句
waitfor?delay?’01:02:03’
select?*?from?employee
--例?等到晚上11?點(diǎn)零8?分后才執(zhí)行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關(guān)鍵字的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列號(hào)
stockname?=?(select?stockname?from?stock_information?where?stockid?=?4)
---------?子查詢
---------?除非能確保內(nèi)層select只返回一個(gè)行的值,
---------?否則應(yīng)在外層where子句中用一個(gè)in限定符
select?distinct?column_name?form?table_name?---------?distinct指定檢索獨(dú)有的列值,不重復(fù)
select?stocknumber?,"stocknumber?+?10"?=?stocknumber?+?10?from?table_name
select?stockname?,?"stocknumber"?=?count(*)?from?table_name?group?by?stockname
---------?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合并查詢結(jié)果集,all-保留重復(fù)行
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***?---?修改數(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?.........?-----?實(shí)現(xiàn)刪除列的方法(創(chuàng)建新表)
alter?table?table_name?drop?constraint?Stockname_default?----?刪除Stockname的default約束
***function(/*常用函數(shù)*/)***
----統(tǒng)計(jì)函數(shù)----
AVG?--求平均值
COUNT?--統(tǒng)計(jì)數(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)計(jì)變異數(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á)式的自然對(duì)數(shù)值
LOG10(float_expression)--返回表達(dá)式的以10?為底的對(duì)數(shù)值
SQRT(float_expression)?--返回表達(dá)式的平方根
/***取近似值函數(shù)***/
CEILING(numeric_expression)?--返回>=表達(dá)式的最小整數(shù)返回的數(shù)據(jù)類型與表達(dá)式相同可為
--INTEGER/MONEY/REAL/FLOAT?類型
FLOOR(numeric_expression)?--返回<=表達(dá)式的最小整數(shù)返回的數(shù)據(jù)類型與表達(dá)式相同可為
--INTEGER/MONEY/REAL/FLOAT?類型
ROUND(numeric_expression)?--返回以integer_expression?為精度的四舍五入值返回的數(shù)據(jù)
--類型與表達(dá)式相同可為INTEGER/MONEY/REAL/FLOAT?類型
ABS(numeric_expression)?--返回表達(dá)式的絕對(duì)值返回的數(shù)據(jù)類型與表達(dá)式相同可為
--INTEGER/MONEY/REAL/FLOAT?類型
SIGN(numeric_expression)?--測試參數(shù)的正負(fù)號(hào)返回0?零值1?正數(shù)或-1?負(fù)數(shù)返回的數(shù)據(jù)類型
--與表達(dá)式相同可為INTEGER/MONEY/REAL/FLOAT?類型
PI()?--返回值為π?即3.1415926535897936
RAND([integer_expression])?--用任選的[integer_expression]做種子值得出0-1?間的隨機(jī)浮點(diǎn)數(shù)
----字符串函數(shù)----
ASCII()?--函數(shù)返回字符表達(dá)式最左端字符的ASCII?碼值
CHAR()?--函數(shù)用于將ASCII?碼轉(zhuǎn)換為字符
--如果沒有輸入0?~?255?之間的ASCII?碼值CHAR?函數(shù)會(huì)返回一個(gè)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ù)返回字符串中某個(gè)指定的子串出現(xiàn)的開始位置
SOUNDEX()?--函數(shù)返回一個(gè)四位字符碼?
--SOUNDEX函數(shù)可用來查找聲音相似的字符串但SOUNDEX函數(shù)對(duì)數(shù)字和漢字均只返回0?值?
DIFFERENCE()?--函數(shù)返回由SOUNDEX?函數(shù)返回的兩個(gè)字符表達(dá)式的值的差異
--0?兩個(gè)SOUNDEX?函數(shù)返回值的第一個(gè)字符不同
--1?兩個(gè)SOUNDEX?函數(shù)返回值的第一個(gè)字符相同
--2?兩個(gè)SOUNDEX?函數(shù)返回值的第一二個(gè)字符相同
--3?兩個(gè)SOUNDEX?函數(shù)返回值的第一二三個(gè)字符相同
--4?兩個(gè)SOUNDEX?函數(shù)返回值完全相同
QUOTENAME()?--函數(shù)返回被特定字符括起來的字符串
/*select?quotename('abc',?'{')?quotename('abc')
運(yùn)行結(jié)果如下:
----------------------------------
{abc}?[abc]*/
REPLICATE()?--函數(shù)返回一個(gè)重復(fù)character_expression?指定次數(shù)的字符串
/*select?replicate('abc',?3)?replicate(?'abc',?-2)
運(yùn)行結(jié)果如下:
-----------?-----------
abcabcabc?NULL
REVERSE()?--函數(shù)將指定的字符串的字符排列順序顛倒
REPLACE()?--函數(shù)返回被替換了指定子串的字符串
/*select?replace('abc123g',?'123',?'def')
運(yùn)行結(jié)果如下:
-----------?-----------
abcdefg*/
SPACE()?--函數(shù)返回一個(gè)有指定長度的空白字符串
STUFF()?--函數(shù)用另一子串替換字符串指定位置長度的子串
----數(shù)據(jù)類型轉(zhuǎn)換函數(shù)----
CAST()?函數(shù)語法如下
CAST()?(<expression>?AS?<data_?type>[?length?])
CONVERT()?函數(shù)語法如下
CONVERT()?(<data_?type>[?length?],?<expression>?[,?style])
select?cast(100+99?as?char)?convert(varchar(12),?getdate())
運(yùn)行結(jié)果如下
------------------------------?------------
199?Jan?15?2000
----日期函數(shù)----
DAY()?--函數(shù)返回date_expression?中的日期值
MONTH()?--函數(shù)返回date_expression?中的月份值
YEAR()?--函數(shù)返回date_expression?中的年份值
DATEADD(<datepart>?,<number>?,<date>)?
--函數(shù)返回指定日期date?加上指定的額外日期間隔number?產(chǎn)生的新日期
DATEDIFF(<datepart>?,<number>?,<date>)
--函數(shù)返回兩個(gè)指定日期在datepart?方面的不同之處
DATENAME(<datepart>?,?<date>)?--函數(shù)以字符串的形式返回日期的指定部分
DATEPART(<datepart>?,?<date>)?--函數(shù)以整數(shù)值的形式返回日期的指定部分
GETDATE()?--函數(shù)以DATETIME?的缺省格式返回系統(tǒng)當(dāng)前的日期和時(shí)間
----系統(tǒng)函數(shù)----
APP_NAME()?--函數(shù)返回當(dāng)前執(zhí)行的應(yīng)用程序的名稱
COALESCE()?--函數(shù)返回眾多表達(dá)式中第一個(gè)非NULL?表達(dá)式的值
COL_LENGTH(<'table_name'>,?<'column_name'>)?--函數(shù)返回表中指定字段的長度值
COL_NAME(<table_id>,?<column_id>)?--函數(shù)返回表中指定字段的名稱即列名
DATALENGTH()?--函數(shù)返回?cái)?shù)據(jù)表達(dá)式的數(shù)據(jù)的實(shí)際長度
DB_ID(['database_name'])?--函數(shù)返回?cái)?shù)據(jù)庫的編號(hào)
DB_NAME(database_id)?--函數(shù)返回?cái)?shù)據(jù)庫的名稱
HOST_ID()?--函數(shù)返回服務(wù)器端計(jì)算機(jī)的名稱
HOST_NAME()?--函數(shù)返回服務(wù)器端計(jì)算機(jī)的名稱
IDENTITY(<data_type>[,?seed?increment])?[AS?column_name])
--IDENTITY()?函數(shù)只在SELECT?INTO?語句中使用用于插入一個(gè)identity?column列到新表中
/*select?identity(int,?1,?1)?as?column_name
into?newtable
from?oldtable*/
ISDATE()?--函數(shù)判斷所給定的表達(dá)式是否為合理日期
ISNULL(<check_expression>,?<replacement_value>)?--函數(shù)將表達(dá)式中的NULL?值用指定值替換
ISNUMERIC()?--函數(shù)判斷所給定的表達(dá)式是否為合理的數(shù)值
NEWID()?--函數(shù)返回一個(gè)UNIQUEIDENTIFIER?類型的數(shù)值
NULLIF(<expression1>,?<expression2>)
--NULLIF?函數(shù)在expression1?與expression2?相等時(shí)返回NULL?值若不相等時(shí)則返回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í),無非就是添加、刪除、修改,這得設(shè)計(jì)到一些常用的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)計(jì)函數(shù):
AVG(字段名)?得出一個(gè)表格欄平均值
COUNT(*|字段名)?對(duì)數(shù)據(jù)行數(shù)的統(tǒng)計(jì)或?qū)δ骋粰谟兄档臄?shù)據(jù)行數(shù)統(tǒng)計(jì)
MAX(字段名)?取得一個(gè)表格欄最大的值
MIN(字段名)?取得一個(gè)表格欄最小的值
SUM(字段名)?把數(shù)據(jù)欄的值相加
引用以上函數(shù)的方法:
sql="select?sum(字段名)?as?別名?from?數(shù)據(jù)表?where?條件表達(dá)式"
set?rs=conn.excute(sql)
用?rs("別名")?獲取統(tǒng)的計(jì)值,其它函數(shù)運(yùn)用同上。
(6)?數(shù)據(jù)表的建立和刪除:
CREATE?TABLE?數(shù)據(jù)表名稱(字段1?類型1(長度),字段2?類型2(長度)?……?)
例:CREATE?TABLE?tab01(name?varchar(50),datetime?default?now())
DROP?TABLE?數(shù)據(jù)表名稱?(永久性刪除一個(gè)數(shù)據(jù)表)
在ASP編程時(shí),下面這些語句是必須知道的:
1.連接數(shù)據(jù)庫
a.?ASP與Access數(shù)據(jù)庫連接:
<%@?language=VBs?cript%>
<%
dim?conn,mdbfile
mdbfile=server.mappath("數(shù)據(jù)庫名稱.mdb")
set?conn=server.createobject("adodb.connection")
conn.open?"driver={microsoft?access?driver?(*.mdb)};uid=admin;pwd=數(shù)據(jù)庫密碼;dbq="&mdbfile
%>
b.?ASP與SQL數(shù)據(jù)庫連接:
<%@?language=VBs?cript%>
<%
dim?conn
set?conn=server.createobject("ADODB.connection")
con.open?"PROVIDER=SQLOLEDB;DATA?SOURCE=SQL服務(wù)器名稱或IP地址;UID=sa;PWD=數(shù)據(jù)庫密碼;DATABASE=數(shù)據(jù)庫名稱
%>
建立記錄集對(duì)象:
set?rs=server.createobject("adodb.recordset")
rs.open?SQL語句,conn,3,2
2.?記錄集對(duì)象的方法:
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)前記錄,但記錄指針不會(huì)向下移動(dòng)
rs.addnew?添加記錄到數(shù)據(jù)表末端
rs.update?更新數(shù)據(jù)表記錄
附:
常數(shù)?常數(shù)值?說明
--------------------------------
adLockReadOnly?1?缺省值,Recordset對(duì)象以只讀方式啟動(dòng),無法運(yùn)行AddNew、Update及Delete等方法
adLockPrssimistic?2?當(dāng)數(shù)據(jù)源正在更新時(shí),系統(tǒng)會(huì)暫時(shí)鎖住其他用戶的動(dòng)作,以保持?jǐn)?shù)據(jù)一致性。
adLockOptimistic?3?當(dāng)數(shù)據(jù)源正在更新時(shí),系統(tǒng)并不會(huì)鎖住其他用戶的動(dòng)作,其他用戶可以對(duì)數(shù)據(jù)進(jìn)行增、刪、改的操作。
adLockBatchOptimistic?4?當(dāng)數(shù)據(jù)源正在更新時(shí),其他用戶必須將CursorLocation屬性改為adUdeClientBatch才能對(duì)數(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?*?From?表?Where?ID?in?(Select?Top?M?ID?From?表)?Order?by?ID?Desc
----------------------------------
N到結(jié)尾記錄
Select?Top?N?*?From?表?Order?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:獲取某一個(gè)表的所有字段select?name?from?syscolumns?where?id=object_id('表名')
11:查看與某一個(gè)表相關(guān)的視圖、存儲(chǔ)過程、函數(shù)select?a.*?from?sysobjects?a,?syscomments?b?where?a.id?=?b.id?and?b.text?like?'%表名%'
12:查看當(dāng)前數(shù)據(jù)庫中所有存儲(chǔ)過程select?name?as?存儲(chǔ)過程名稱?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:查詢某一個(gè)表的字段和數(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常用操作
?
不再新開文章.
這里只打算講解四部分了,也就最簡單、最常用的四部分。
1、觸發(fā)器。
定義:?何為觸發(fā)器?在SQL?Server里面也就是對(duì)某一個(gè)表的一定的操作,觸發(fā)某種條件,從而執(zhí)行的一段程序。觸發(fā)器是一個(gè)特殊的存儲(chǔ)過程。
常見的觸發(fā)器有三種:分別應(yīng)用于Insert?,?Update?,?Delete?事件。(SQL?Server?2000定義了新的觸發(fā)器,這里不提)
我為什么要使用觸發(fā)器?比如,這么兩個(gè)表:
Create?Table?Student(?--學(xué)生表
StudentID?int?primary?key,?--學(xué)號(hào)
....
)
Create?Table?BorrowRecord(?--學(xué)生借書記錄表
BorrowRecord?int?identity(1,1),?--流水號(hào)?
StudentID?int?,?--學(xué)號(hào)
BorrowDate?datetime,?--借出時(shí)間
ReturnDAte?Datetime,?--歸還時(shí)間
...
)
用到的功能有:
1.如果我更改了學(xué)生的學(xué)號(hào),我希望他的借書記錄仍然與這個(gè)學(xué)生相關(guān)(也就是同時(shí)更改借書記錄表的學(xué)號(hào));
2.如果該學(xué)生已經(jīng)畢業(yè),我希望刪除他的學(xué)號(hào)的同時(shí),也刪除它的借書記錄。
等等。
這時(shí)候可以用到觸發(fā)器。對(duì)于1,創(chuàng)建一個(gè)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ā)器里面的兩個(gè)臨時(shí)的表:Deleted?,?Inserted?。注意Deleted?與Inserted分別表示觸發(fā)事件的表“舊的一條記錄”和“新的一條記錄”。
一個(gè)Update?的過程可以看作為:生成新的記錄到Inserted表,復(fù)制舊的記錄到Deleted表,然后刪除Student記錄并寫入新紀(jì)錄。
對(duì)于2,創(chuàng)建一個(gè)Delete觸發(fā)器
Create?trigger?trdStudent
On?Student
for?Delete
As
Delete?BorrowRecord?
From?BorrowRecord?br?,?Delted?d
Where?br.StudentID=d.StudentID
從這兩個(gè)例子我們可以看到了觸發(fā)器的關(guān)鍵:A.2個(gè)臨時(shí)的表;B.觸發(fā)機(jī)制。
這里我們只講解最簡單的觸發(fā)器。復(fù)雜的容后說明。
事實(shí)上,我不鼓勵(lì)使用觸發(fā)器。觸發(fā)器的初始設(shè)計(jì)思想,已經(jīng)被“級(jí)聯(lián)”所替代.
?
MSSQL數(shù)據(jù)庫導(dǎo)出和導(dǎo)入
?
SQL?Server導(dǎo)出導(dǎo)入數(shù)據(jù)方法
?
?一、導(dǎo)出導(dǎo)入SQL?Server里某個(gè)數(shù)據(jù)庫?
?
1.?在SQL?Server企業(yè)管理器里選中要轉(zhuǎn)移的數(shù)據(jù)庫,按鼠標(biāo)右鍵,選所有任務(wù)->備份數(shù)據(jù)庫。?
2.?備份?選數(shù)據(jù)庫-完全,?目的?備份到?按添加按鈕?文件名?在SQL?Server服務(wù)器硬盤下輸入一個(gè)自定義的備份數(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)建一個(gè)新的數(shù)據(jù)庫;?然后選中這個(gè)新創(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)前活動(dòng)->鎖/對(duì)象->找到數(shù)據(jù)庫下鎖的進(jìn)程號(hào)->到查詢分析器里用kill?進(jìn)程號(hào)殺掉這些鎖,?然后再做還原)?
注意:
如果在原有的目的SQL?Server數(shù)據(jù)庫上從備份文件(*.bak)還原數(shù)據(jù)庫?會(huì)把已經(jīng)存在的表、存儲(chǔ)過程等數(shù)據(jù)庫對(duì):象全部替換成最近這次導(dǎo)入的備份數(shù)據(jù)庫里的內(nèi)容。?如果一定要還原備份文件(*.bak)里部分?jǐn)?shù)據(jù),需要另外建一個(gè)新數(shù)據(jù)庫,?其邏輯名稱和數(shù)量同備份文件(*.bak)里數(shù)據(jù)庫的邏輯名稱和數(shù)量一致;?新數(shù)據(jù)庫的物理文件名稱取得一定要和備份文件(*.bak)里數(shù)據(jù)庫的物理文件不一樣才行。?
?
二、導(dǎo)出導(dǎo)入SQL?Server里某個(gè)表?
?
1.?沒有防火墻,同一個(gè)局域網(wǎng)里或不在同一個(gè)局域網(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ū)Т翱?/span>->下一步->?選數(shù)據(jù)源->?數(shù)據(jù)源(用于SQL?Server的Microfost?OLE?DB提供程序)->?服務(wù)器(可選擇局域網(wǎng)內(nèi)能訪問到的所有SQL?Server服務(wù)器,或者直接輸入IP地址)->?選擇使用windows身份驗(yàn)證還是使用SQL?Serve身份驗(yàn)證(輸入數(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)換里面可以修改源表和目的表之間字段的對(duì)應(yīng)關(guān)系,修改目的表字段的類型和長度等,?并可以選擇創(chuàng)建目的表,在目的表中增加行,除去并重新創(chuàng)建目的表,啟用標(biāo)志插入等選項(xiàng)->確定->下一步->?保存、調(diào)度和復(fù)制包->時(shí)間->立即運(yùn)行(如果要實(shí)現(xiàn)隔一段時(shí)間自動(dòng)導(dǎo)出導(dǎo)入數(shù)據(jù),選調(diào)度DTS包以便以后執(zhí)行)->?保存(可以不選)->[?保存DTS包(如果以后還要轉(zhuǎn)移這批相同的數(shù)據(jù),可以把本次導(dǎo)出導(dǎo)入的內(nèi)容和步驟保存起來,?存到SQL?Server即可,保存的時(shí)候要輸入DTS的包名及詳細(xì)描述)->下一步->?]->完成?正在執(zhí)行包->圖形界面顯示創(chuàng)建表及插入記錄的步驟和狀態(tài)->完成?
2.?經(jīng)過防火墻,不在同一個(gè)局域網(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ū)Т翱?/span>->下一步->?選數(shù)據(jù)源->?數(shù)據(jù)源(用于SQL?Server的Microfost?OLE?DB提供程序)->?服務(wù)器(可選擇局域網(wǎng)內(nèi)能訪問到的所有SQL?Server服務(wù)器)->?選擇使用windows身份驗(yàn)證還是使用SQL?Serve身份驗(yàn)證(輸入數(shù)據(jù)庫的用戶名和密碼)->?數(shù)據(jù)庫(可選擇上面選中SQL?Server服務(wù)器上所有權(quán)限范圍內(nèi)的數(shù)據(jù)庫)->下一步->?選擇目的->目的(文本文件)->?文件名(在自己的電腦硬盤中生成一個(gè)自定義的文本文件)?->下一步->?制定表復(fù)制或查詢->選從源數(shù)據(jù)庫復(fù)制表和視圖(也可以選擇用一條查詢指定要傳輸?shù)臄?shù)據(jù))->下一步->?選擇目的文件格式->源(選擇要導(dǎo)出的表)->用默認(rèn)的帶分隔符->選第一行包含有列名稱選項(xiàng)->下一步->?保存、調(diào)度和復(fù)制包->時(shí)間->立即運(yùn)行(如果要實(shí)現(xiàn)隔一段時(shí)間自動(dòng)導(dǎo)出到文本文件,選調(diào)度DTS包以便以后執(zhí)行)->?保存(可以不選)->?[保存DTS包(保存的時(shí)候要輸入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ù)庫里跟文本文件同名的新表名時(shí),默認(rèn)的會(huì)把所有字段類型都變成字符串。?所以我們要這樣做:?在源SQL?Server數(shù)據(jù)庫上先生成創(chuàng)建表的sql語句?在SQL?Server查詢分析器里->選中源數(shù)據(jù)庫里表名->按右鍵->在新窗口中編寫對(duì)象腳本->創(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)入時(shí)間的年月信息,例如table_0113)?調(diào)用導(dǎo)入/導(dǎo)出工具->彈出數(shù)據(jù)轉(zhuǎn)換服務(wù)導(dǎo)入/導(dǎo)出向?qū)Т翱?/span>->下一步->?選數(shù)據(jù)源->?數(shù)據(jù)源(文本文件)->?文件名(已傳到目的SQL?Server數(shù)據(jù)庫下要導(dǎo)入的文本文件,后綴可以不是*.txt,?但是常規(guī)文本編輯器能打開的文件,文件類型選全部)->下一步->?選擇文件格式->用默認(rèn)的帶分隔符->選第一行包含有列名稱選項(xiàng)->下一步->?制定列分割符->逗號(hào)->下一步->?選擇目的->目的(用于SQL?Server的Microfost?OLE?DB提供程序)->?服務(wù)器(可選擇目標(biāo)局域網(wǎng)內(nèi)能訪問到的所有SQL?Server服務(wù)器)->?選擇使用windows身份驗(yàn)證還是使用SQL?Serve身份驗(yàn)證(輸入數(shù)據(jù)庫的用戶名和密碼)->?數(shù)據(jù)庫(可選擇上面選中SQL?Server服務(wù)器上所有權(quán)限范圍內(nèi)的數(shù)據(jù)庫)->下一步->?選擇源表和視圖->修改目的表名為剛才創(chuàng)建的表名->轉(zhuǎn)換(在目的表中追加行)?->下一步->?保存、調(diào)度和復(fù)制包->?時(shí)間->立即運(yùn)行(如果要實(shí)現(xiàn)隔一段時(shí)間自動(dòng)把文本文件導(dǎo)入,選調(diào)度DTS包以便以后執(zhí)行)->?保存(可以不選)->?[保存DTS包(保存的時(shí)候要輸入DTS的包名及詳細(xì)描述)->下一步->]->完成?正在執(zhí)行包->圖形界面顯示文本文件到表的步驟和狀態(tài)->完成?如果要更改導(dǎo)入時(shí)間的年月信息的表名,例如table_0113到原來的表名,?在企業(yè)管理器里把原來的表名改成table_old_0113,table_0113改名成table。?這會(huì)對(duì)應(yīng)用程序里頻繁訪問的表照成一定的中斷。?
注意:
源表上的建的索引和主鍵約束不能用上面介紹的1和2方法轉(zhuǎn)移過來,還需要手工來建索引和主鍵。?標(biāo)志種子和not?null的約束可以繼承過來。?導(dǎo)入視圖時(shí)會(huì)把源視圖里所有的真實(shí)數(shù)據(jù)導(dǎo)入成一個(gè)新表,而不是視圖。
?
?三、SQL?Server存儲(chǔ)過程或用戶定義的函數(shù)導(dǎo)出導(dǎo)入
?
?1、導(dǎo)出存儲(chǔ)過程或用戶定義的函數(shù)成*.sql文件?在SQL?Server企業(yè)管理器里選中源數(shù)據(jù)庫,?存儲(chǔ)過程->單選或者多選中要轉(zhuǎn)移的存儲(chǔ)過程->?用戶定義的函數(shù)->單選或者多選中要轉(zhuǎn)移的函數(shù)->?按鼠標(biāo)右鍵,選所有任務(wù)->生成SQL腳本->確定->在自己的電腦硬盤中生成一個(gè)自定義的*.sql文件->?保存->正在生成SQL腳本->成功?2、如果目的數(shù)據(jù)庫經(jīng)過防火墻,不在同一個(gè)局域網(wǎng)里,?要通過FTP或者remote?desktop或者pcanywhere等方法把第1步生成的*.sql文件傳到目的SQL?Server數(shù)據(jù)庫服務(wù)器上。?3、用查詢分析器進(jìn)入SQL?Server目的數(shù)據(jù)庫,?從菜單里選文件->打開->打開查詢文件->選中第1步生成的*.sql文件->點(diǎn)執(zhí)行查詢的綠色倒三角型快捷鍵->?查詢窗口里會(huì)出現(xiàn)執(zhí)行后的消息(有時(shí)候可能因?yàn)榇鎯?chǔ)過程和用戶定義的函數(shù)之間有一定的依賴關(guān)系,會(huì)報(bào)一些錯(cuò)。?最好先執(zhí)行用戶定義的函數(shù)的*.sql文件,再執(zhí)行存儲(chǔ)過程的*.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)。?
?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也可以類似配置,但使用的時(shí)候有一些限制)
?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ù)庫(跟上面第二點(diǎn)講的一致,就不重復(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è)或者個(gè)人版數(shù)據(jù)庫做中轉(zhuǎn)。?
(?注意:ORACLE通過訪問SQL?Server的數(shù)據(jù)庫鏈接時(shí),用select?*?的時(shí)候字段名是用雙引號(hào)引起來的。)?
?
MySQL數(shù)據(jù)庫導(dǎo)出和導(dǎo)入
1).MySQLimport的語法介紹:?
MySQLimport位于MySQL/bin目錄中,是MySQL的一個(gè)載入(或者說導(dǎo)入)數(shù)據(jù)的一個(gè)非常有效的工具。這是一個(gè)命令行工具。有兩個(gè)參數(shù)以及大量的選項(xiàng)可供選擇。這個(gè)工具把一個(gè)文本文件(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命令將會(huì)出錯(cuò)。
其中表的名字是導(dǎo)入文件的第一個(gè)句號(hào)(.)前面文件字符串,另外一個(gè)例子:MySQLimport?Meet_A_Geek?Cus.to.mers.txt
那么我們將把文件中的內(nèi)容導(dǎo)入到數(shù)據(jù)庫Meet_A_Geek?中的Cus表中。?
上面的例子中,都只用到兩個(gè)參數(shù),并沒有用到更多的選項(xiàng),下面介紹MySQLimport的選項(xiàng)?
2).MySQLimport的常用選項(xiàng)介紹:?
選項(xiàng)?功能?
-d?or?--delete?新數(shù)據(jù)導(dǎo)入數(shù)據(jù)表中之前刪除數(shù)據(jù)數(shù)據(jù)表中的所有信息?
-f?or?--force?不管是否遇到錯(cuò)誤,MySQLimport將強(qiáng)制繼續(xù)插入數(shù)據(jù)?
-i?or?--ignore?MySQLimport跳過或者忽略那些有相同唯一關(guān)鍵字的行,?導(dǎo)入文件中的數(shù)據(jù)將被忽略。?
-l?or?-lock-tables?數(shù)據(jù)被插入之前鎖住表,這樣就防止了,你在更新數(shù)據(jù)庫時(shí),用戶的查詢和更新受到影響。?
-r?or?-replace?這個(gè)選項(xiàng)與-i選項(xiàng)的作用相反;此選項(xiàng)將替代表中有相同唯一關(guān)鍵字的記錄。?
--fields-enclosed-?by=?char?指定文本文件中數(shù)據(jù)的記錄時(shí)以什么括起的,?很多情況下數(shù)據(jù)以雙引號(hào)括起。?默認(rèn)的情況下數(shù)據(jù)是沒有被字符括起的。?
--fields-terminated-?by=char?指定各個(gè)數(shù)據(jù)的值之間的分隔符,在句號(hào)分隔的文件中,分隔符是句號(hào)。您可以用此選項(xiàng)指定數(shù)據(jù)之間的分隔符。
默認(rèn)的分隔符是跳格符(Tab)?
--lines-terminated-?by=str?此選項(xiàng)指定文本文件中行與行之間數(shù)據(jù)的分隔字符串或者字符。?默認(rèn)的情況下MySQLimport以newline為行分隔符。?
您可以選擇用一個(gè)字符串來替代一個(gè)單個(gè)的字符:?
一個(gè)新行或者一個(gè)回車。?
MySQLimport命令常用的選項(xiàng)還有-v?顯示版本(version),-p?提示輸入密碼(password)等。?
3).例子:導(dǎo)入一個(gè)以逗號(hào)為分隔符的文件?
文件中行的記錄格式是這樣的:?
"1",?"ORD89876",?"1?Dozen?Roses",?"19991226"?
我們的任務(wù)是要把這個(gè)文件里面的數(shù)據(jù)導(dǎo)入到數(shù)據(jù)庫Meet_A_Geek中的表格Orders中,我們使用這個(gè)命令:?
bin/MySQLimport?–prl?–fields-enclosed-by="?–fields-terminated-by=,?Meet_A_Geek?Orders.txt?
這個(gè)命令可能看起來很不爽,不過當(dāng)你熟悉了之后,這是非常簡單的。第一部分,bin/MySQLimport?,告訴操作系統(tǒng)你要運(yùn)行的命令是MySQL/bin目錄下的MySQLimport,選項(xiàng)p是要求輸入密碼,這樣就要求你在改動(dòng)數(shù)據(jù)庫之前輸入密碼,操作起來會(huì)更安全。?我們用了r選項(xiàng)是因?yàn)槲覀兿胍驯碇械奈ㄒ魂P(guān)鍵字與文件記錄中有重復(fù)唯一關(guān)鍵字的記錄替換成文件中的數(shù)據(jù)。我們表單中的數(shù)據(jù)不是最新的,需要用文件中的數(shù)據(jù)去更新,因而就用r這個(gè)選項(xiàng),替代數(shù)據(jù)庫中已經(jīng)有的記錄。l選項(xiàng)的作用是在我們插入數(shù)據(jù)的時(shí)候鎖住表,這樣就阻止了用戶在我們更新表的時(shí)候?qū)Ρ磉M(jìn)行查詢或者更改的操作。
批處理是一種非交互式運(yùn)行MySQL程序的方法,如同您在MySQL中使用的命令一樣,你仍然將使用這些命令。?
為了實(shí)現(xiàn)批處理,您重定向一個(gè)文件到MySQL程序中,首先我們需要一個(gè)文本文件,這個(gè)文本文件包含有與我們在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");?
注意上面的這些句子的語法都必須是正確的,并且每個(gè)句子以分號(hào)結(jié)束。?
上面的USE命令選擇數(shù)據(jù)庫,INSERT命令插入數(shù)據(jù)。?
下面我們要把上面的文件導(dǎo)入到數(shù)據(jù)庫中,導(dǎo)入之前要確認(rèn)數(shù)據(jù)庫已經(jīng)在運(yùn)行,即是MySQLd進(jìn)程(或者說服務(wù),Windows?NT下面稱為”服務(wù)“,unix下面為”進(jìn)程“)已經(jīng)在運(yùn)行。?
然后運(yùn)行下面的命令:?
bin/MySQL?–p?<?/home/mark/New_Data.sql?
接著按提示輸入密碼,如果上面的文件中的語句沒有錯(cuò)誤,那么這些數(shù)據(jù)就被導(dǎo)入到了數(shù)據(jù)庫中。?
命令行中使用LOAD?DATA?INFILE?從文件中導(dǎo)入數(shù)據(jù)到數(shù)據(jù)庫:?
現(xiàn)在您可能會(huì)問自己,"究竟為什么我要輸入所有的這些SQL語句到文件中,然后通過程序運(yùn)行它們呢?”?
這樣看起來好像需要大量的工作。很好,你這樣想很可能就對(duì)了。但是假如你有從所有這些命令中產(chǎn)生的log記錄呢?現(xiàn)在這樣就很棒,嗯,大多數(shù)數(shù)據(jù)庫都會(huì)自動(dòng)產(chǎn)生數(shù)據(jù)庫中的事件記錄的log。而大部分log都包含有用過的原始的SQL命令。因此,如果您不能從您現(xiàn)在的數(shù)據(jù)庫中導(dǎo)出數(shù)據(jù)到新的MySQL數(shù)據(jù)庫中使用,那么您可以使用log和MySQL的批處理特性,來快速且方便地導(dǎo)入您地?cái)?shù)據(jù)。當(dāng)然,這樣就省去了打字的麻煩。?
LOAD?DATA?INFILE?
這是我們要介紹的最后一個(gè)導(dǎo)入數(shù)據(jù)到MySQL數(shù)據(jù)庫中的方法。這個(gè)命令與MySQLimport非常相似,但這個(gè)方法可以在MySQL命令行中使用。也就是說您可以在所有使用API的程序中使用這個(gè)命令。使用這種方法,您就可以在應(yīng)用程序中導(dǎo)入您想要導(dǎo)入的數(shù)據(jù)。?
使用這個(gè)命令之前,MySQLd進(jìn)程(服務(wù))必須已經(jīng)在運(yùn)行。
啟動(dòng)MySQL命令行:
bin/MySQL?–p?
按提示輸入密碼,成功進(jìn)入MySQL命令行之后,輸入下面的命令:
USE?Meet_A_Geek;?
LOAD?DATA?INFILE?"/home/mark/data.sql"?INTO?TABLE?Orders;?
簡單的講,這樣將會(huì)把文件data.sql中的內(nèi)容導(dǎo)入到表Orders中,如MySQLimport工具一樣,這個(gè)命令也有一些可以選擇的參數(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)先級(jí),如果您要把它標(biāo)記為低優(yōu)先級(jí)(LOW_PRIORITY),那么MySQL將會(huì)等到?jīng)]有其他人讀這個(gè)表的時(shí)候,才把插入數(shù)據(jù)。可以使用如下的命令:?
?LOAD?DATA?LOW_PRIORITY?INFILE?"/home/mark/data.sql"?INTO?TABLE?Orders;?
您也可以指定是否在插入數(shù)據(jù)的時(shí)候,取代或者忽略文件與數(shù)據(jù)表中重復(fù)的鍵值。替代重復(fù)的鍵值的語法:?
LOAD?DATA?LOW_PRIORITY?INFILE?"/home/mark/data.sql"?REPLACE?INTO?TABLE?Orders;?
上面的句子看起來有點(diǎn)笨拙,但卻把關(guān)鍵字放在了讓您的剖析器可以理解的地方。?
下面的一對(duì)選項(xiàng)描述了文件的記錄格式,這些選項(xiàng)也是在MySQLimport工具中可以用的。他們在這里看起來有點(diǎn)不同。首先,要用到FIELDS關(guān)鍵字,如果用到這個(gè)關(guān)鍵字,MySQL剖析器希望看到至少有下面的一個(gè)選項(xiàng):
TERMINATED?BY?character?
?ENCLOSED?BY?character?
?ESCAPED?BY?character?
這些關(guān)鍵字與它們的參數(shù)跟MySQLimport中的用法是一樣的.?The?
?TERMINATED?BY?描述字段的分隔符,默認(rèn)情況下是tab字符(t)?
?ENCLOSED?BY描述的是字段的括起字符。比方以引號(hào)括起每一個(gè)字段。?
?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語句中有一個(gè)MySQLimport工具中沒有特點(diǎn):?
LOAD?DATA?INFILE?可以按指定的列把文件導(dǎo)入到數(shù)據(jù)庫中。?
當(dāng)我們要把數(shù)據(jù)的一部分內(nèi)容導(dǎo)入的時(shí)候,這個(gè)特點(diǎn)就很重要。比方說,我們要從Access數(shù)據(jù)庫升級(jí)到MySQL數(shù)據(jù)庫的時(shí)候,需要加入一些欄目(列/字段/field)到MySQL數(shù)據(jù)庫中,以適應(yīng)一些額外的需要。?
這個(gè)時(shí)候,我們的Access數(shù)據(jù)庫中的數(shù)據(jù)仍然是可用的,但是因?yàn)檫@些數(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)。這些指定的字段依然是以括號(hào)括起,由逗號(hào)分隔的,如果您遺漏了其中任何一個(gè),MySQL將會(huì)提醒您^_^?
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ù)。一個(gè)重要的原因是用于備份數(shù)據(jù)庫。數(shù)據(jù)的造價(jià)常常是昂貴的,需要謹(jǐn)慎處理它們。經(jīng)常地備份可以幫助防止寶貴數(shù)據(jù)地丟失;另外一個(gè)原因是,也許您希望導(dǎo)出數(shù)據(jù)來共享。?在這個(gè)信息技術(shù)不斷成長的世界中,共享數(shù)據(jù)變得越來越常見。?
比方說Macmillan?USA維護(hù)護(hù)著一個(gè)將要出版的書籍的大型數(shù)據(jù)庫。這個(gè)數(shù)據(jù)庫在許多書店之間共享,這樣他們就知道哪些書將會(huì)很快出版。醫(yī)院越來越走向采用無紙病歷記錄,這樣這些病歷可以隨時(shí)跟著你。世界變得越來越小,信息也被共享得越來越多。有很多中導(dǎo)出數(shù)據(jù)得方法,它們都跟導(dǎo)入數(shù)據(jù)很相似。因?yàn)?#xff0c;畢竟,這些都只是一種透視得方式。從數(shù)據(jù)庫導(dǎo)出的數(shù)據(jù)就是從另一端導(dǎo)入的數(shù)據(jù)。這里我們并不討論其他的數(shù)據(jù)庫各種各樣的導(dǎo)出數(shù)據(jù)的方法,您將學(xué)會(huì)如何用MySQL來實(shí)現(xiàn)數(shù)據(jù)導(dǎo)出。
使用MySQLdump:?
MySQLdump命令位于MySQL/bin/目錄中?
MySQLdump工具很多方面類似相反作用的工具M(jìn)ySQLimport。它們有一些同樣的選項(xiàng)。但MySQLdump能夠做更多的事情。它可以把整個(gè)數(shù)據(jù)庫裝載到一個(gè)單獨(dú)的文本文件中。這個(gè)文件包含有所有重建您的數(shù)據(jù)庫所需要的SQL命令。這個(gè)命令取得所有的模式(Schema,后面有解釋)并且將其轉(zhuǎn)換成DDL語法(CREATE語句,即數(shù)據(jù)庫定義語句),取得所有的數(shù)據(jù),并且從這些數(shù)據(jù)中創(chuàng)建INSERT語句。這個(gè)工具將您的數(shù)據(jù)庫中所有的設(shè)計(jì)倒轉(zhuǎn)。因?yàn)樗械臇|西都被包含到了一個(gè)文本文件中。這個(gè)文本文件可以用一個(gè)簡單的批處理和一個(gè)合適SQL語句導(dǎo)回到MySQL中。這個(gè)工具令人難以置信地簡單而快速。決不會(huì)有半點(diǎn)讓人頭疼地地方。?
因此,如果您像裝載整個(gè)數(shù)據(jù)庫Meet_A_Geek的內(nèi)容到一個(gè)文件中,可以使用下面的命令:?
?bin/MySQLdump?–p?Meet_A_Geek?>?MeetAGeek_Dump_File.txt?
這個(gè)語句也允許您指定一個(gè)表進(jìn)行dump(備份/導(dǎo)出/裝載?)。如果您只是希望把數(shù)據(jù)庫Meet_A_Geek中的表Orders中的整個(gè)內(nèi)容導(dǎo)出到一個(gè)文件,可以使用下面的命令:?
?bin/MySQLdump?–p?Meet_A_Geek?Orders?>MeetAGeek_Orders.txt?
這個(gè)非常的靈活,您甚至可以使用WHERE從句來選擇您需要的記錄導(dǎo)出到文件中。要達(dá)到這樣的目的,可以使用類似于下面的命令:?
?bin/MySQLdump?–p?–where="Order_ID?>?2000"?Meet_A_Geek?Orders?>?Special_Dump.txt?
MySQLdump工具有大量的選項(xiàng),部分選項(xiàng)如下表:?
選項(xiàng)/Option?作用/Action?Performed?
--add-drop-table?
?這個(gè)選項(xiàng)將會(huì)在每一個(gè)表的前面加上DROP?TABLE?IF?EXISTS語句,這樣可以保證導(dǎo)回MySQL數(shù)據(jù)庫的時(shí)候不會(huì)出錯(cuò),因?yàn)槊看螌?dǎo)回的時(shí)候,都會(huì)首先檢查表是否存在,存在就刪除?
--add-locks?
?這個(gè)選項(xiàng)會(huì)在INSERT語句中捆上一個(gè)LOCK?TABLE和UNLOCK?TABLE語句。這就防止在這些記錄被再次導(dǎo)入數(shù)據(jù)庫時(shí)其他用戶對(duì)表進(jìn)行的操作?
-c?or?-?complete_insert?
?這個(gè)選項(xiàng)使得MySQLdump命令給每一個(gè)產(chǎn)生INSERT語句加上列(field)的名字。當(dāng)把數(shù)據(jù)導(dǎo)出導(dǎo)另外一個(gè)數(shù)據(jù)庫時(shí)這個(gè)選項(xiàng)很有用。?
--delayed-insert?在INSERT命令中加入DELAY選項(xiàng)?
?-F?or?-flush-logs?使用這個(gè)選項(xiàng),在執(zhí)行導(dǎo)出之前將會(huì)刷新MySQL服務(wù)器的log.?
?-f?or?-force?使用這個(gè)選項(xiàng),即使有錯(cuò)誤發(fā)生,仍然繼續(xù)導(dǎo)出?
?--full?這個(gè)選項(xiàng)把附加信息也加到CREATE?TABLE的語句中?
?-l?or?-lock-tables?使用這個(gè)選項(xiàng),導(dǎo)出表的時(shí)候服務(wù)器將會(huì)給表加鎖。?
?-t?or?-no-create-?info?
?這個(gè)選項(xiàng)使的MySQLdump命令不創(chuàng)建CREATE?TABLE語句,這個(gè)選項(xiàng)在您只需要數(shù)據(jù)而不需要DDL(數(shù)據(jù)庫定義語句)時(shí)很方便。?
-d?or?-no-data?這個(gè)選項(xiàng)使的MySQLdump命令不創(chuàng)建INSERT語句。?
?在您只需要DDL語句時(shí),可以使用這個(gè)選項(xiàng)。?
?--opt?此選項(xiàng)將打開所有會(huì)提高文件導(dǎo)出速度和創(chuàng)造一個(gè)可以更快導(dǎo)入的文件的選項(xiàng)。?
?-q?or?-quick?這個(gè)選項(xiàng)使得MySQL不會(huì)把整個(gè)導(dǎo)出的內(nèi)容讀入內(nèi)存再執(zhí)行導(dǎo)出,而是在讀到的時(shí)候就寫入導(dǎo)文件中。?
?-T?path?or?-tab?=?path?這個(gè)選項(xiàng)將會(huì)創(chuàng)建兩個(gè)文件,一個(gè)文件包含DDL語句或者表創(chuàng)建語句,另一個(gè)文件包含數(shù)據(jù)。DDL文件被命名為table_name.sql,數(shù)據(jù)文件被命名為table_name.txt.路徑名是存放這兩個(gè)文件的目錄。目錄必須已經(jīng)存在,并且命令的使用者有對(duì)文件的特權(quán)。?
-w?"WHERE?Clause"?or?-where?=?"Where?clause?"?
?如前面所講的,您可以使用這一選項(xiàng)來過篩選將要放到導(dǎo)出文件的數(shù)據(jù)。?
假定您需要為一個(gè)表單中要用到的帳號(hào)建立一個(gè)文件,經(jīng)理要看今年(2004年)所有的訂單(Orders),它們并不對(duì)DDL感興趣,并且需要文件有逗號(hào)分隔,因?yàn)檫@樣就很容易導(dǎo)入到Excel中。?為了完成這個(gè)人物,您可以使用下面的句子:?
bin/MySQLdump?–p?–where?"Order_Date?>='2000-01-01'"?
?–tab?=?/home/mark?–no-create-info?–fields-terminated-by=,?Meet_A_Geek?Orders?
?這將會(huì)得到您想要的結(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同樣提供一個(gè)跟LOAD?DATA?INFILE命令有相反作用的命令,這就是SELECT?INTO?OUTFILE?命令,這兩個(gè)命令有很多的相似之處。首先,它們有所有的選項(xiàng)幾乎相同。現(xiàn)在您需要完成前面用MySQLdump完成的功能,可以依照下面的步驟進(jìn)行操作:?
1.?確保MySQLd進(jìn)程(服務(wù))已經(jīng)在運(yùn)行?
?2.?cd?/usr/local/MySQL?
?3.?bin/MySQLadmin?ping?;//?如果這個(gè)句子通不過,可以用這個(gè):MySQLadmin?-u?root?-p?ping?
MySQLadmin?ping用于檢測MySQLd的狀態(tài),is?alive說明正在運(yùn)行,出錯(cuò)則可能需要用戶名和密碼。?
?4.?啟動(dòng)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)建了。這個(gè)句子就像一個(gè)規(guī)則的SELECT語句,只是把想屏幕的輸出重定向到了文件中。這意味這您可以使用JOIN來實(shí)現(xiàn)多表的高級(jí)查詢。這個(gè)特點(diǎn)也可以被用作一個(gè)報(bào)表產(chǎn)生器。?
比方說,您可以組合這一章中討論的方法來產(chǎn)生一個(gè)非常有趣的查詢,試試這個(gè):?
在MySQL目錄建立一個(gè)名為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)程在運(yùn)行,并且您在MySQL目錄中,?輸入下面的命令:?
bin/MySQL?<?Report_G.rpt檢查您命名作為輸出的文件,這個(gè)文件將會(huì)包含所有您在Customers表中輸入的顧客的姓。?如您所見,您可以使用今天學(xué)到的導(dǎo)入/導(dǎo)出(import/export)的方法來幫助得到報(bào)表。?查看全文?
關(guān)于MSSQL數(shù)據(jù)庫的字段
?
數(shù)據(jù)類型是數(shù)據(jù)的一種屬性,表示數(shù)據(jù)所表示信息的類型。任何一種計(jì)算機(jī)語言都定義了自己的數(shù)據(jù)類型。當(dāng)然,不同的程序語言都具有不同的特點(diǎn),所定義的數(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。其存儲(chǔ)窨的大小是n+4個(gè)字節(jié)。
Varbinary[(n)]是n位變長度的二進(jìn)制數(shù)據(jù)。其中,n的取值范圍是從1到8000。其存儲(chǔ)窨的大小是n+4個(gè)字節(jié),不是n個(gè)字節(jié)。
在Image數(shù)據(jù)類型中存儲(chǔ)的數(shù)據(jù)是以位字符串存儲(chǔ)的,不是由SQLServer解釋的,必須由應(yīng)用程序來解釋。例如,應(yīng)用程序可以使用BMP、TIEF、GIF和JPEG格式把數(shù)據(jù)存儲(chǔ)在Image數(shù)據(jù)類型中。
(2)字符數(shù)據(jù)類型
字符數(shù)據(jù)的類型包括Char,Varchar和Text
字符數(shù)據(jù)是由任何字母、符號(hào)和數(shù)字任意組合而成的數(shù)據(jù)。
Varchar是變長字符數(shù)據(jù),其長度不超過8KB。Char是定長字符數(shù)據(jù),其長度最多為8KB。超過8KB的ASCII數(shù)據(jù)可以使用Text數(shù)據(jù)類型存儲(chǔ)。例如,因?yàn)镠tml文檔全部都是ASCII字符,并且在一般情況下長度超過8KB,所以這些文檔可以Text數(shù)據(jù)類型存儲(chǔ)在SQLServer中。
(3)Unicode數(shù)據(jù)類型
Unicode數(shù)據(jù)類型包括Nchar,Nvarchar和Ntext
在MicrosoftSQLServer中,傳統(tǒng)的非Unicode數(shù)據(jù)類型允許使用由特定字符集定義的字符。在SQLServer安裝過程中,允許選擇一種字符集。使用Unicode數(shù)據(jù)類型,列中可以存儲(chǔ)任何由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ù)類型存儲(chǔ)。使用這種字符類型存儲(chǔ)的列可以存儲(chǔ)多個(gè)字符集中的字符。當(dāng)列的長度變化時(shí),應(yīng)該使用Nvarchar字符類型,這時(shí)最多可以存儲(chǔ)4000個(gè)字符。當(dāng)列的長度固定不變時(shí),應(yīng)該使用Nchar字符類型,同樣,這時(shí)最多可以存儲(chǔ)4000個(gè)字符。當(dāng)使用Ntext數(shù)據(jù)類型時(shí),該列可以存儲(chǔ)多于4000個(gè)字符。
(4)日期和時(shí)間數(shù)據(jù)類型
日期和時(shí)間數(shù)據(jù)類型包括Datetime和Smalldatetime兩種類型
日期和時(shí)間數(shù)據(jù)類型由有效的日期和時(shí)間組成。例如,有效的日期和時(shí)間數(shù)據(jù)包括“4/01/9812:15:00:00:00PM”和“1:28:29:15:01AM8/17/98”。前一個(gè)數(shù)據(jù)類型是日期在前,時(shí)間在后一個(gè)數(shù)據(jù)類型是霎時(shí)間在前,日期在后。在MicrosoftSQLServer中,日期和時(shí)間數(shù)據(jù)類型包括Datetime和Smalldatetime兩種類型時(shí),所存儲(chǔ)的日期范圍是從1753年1月1日開始,到9999年12月31日結(jié)束(每一個(gè)值要求8個(gè)存儲(chǔ)字節(jié))。使用Smalldatetime數(shù)據(jù)類型時(shí),所存儲(chǔ)的日期范圍是1900年1月1日開始,到2079年12月31日結(jié)束(每一個(gè)值要求4個(gè)存儲(chǔ)字節(jié))。
日期的格式可以設(shè)定。設(shè)置日期格式的命令如下:
SetDateFormat{format|@format_var|
其中,format|@format_var是日期的順序。有效的參數(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ù)(浮點(diǎn)數(shù))和整數(shù)
整數(shù)由正整數(shù)和負(fù)整數(shù)組成,例如39、25、0-2和33967。在MicrsoftSQLServer中,整數(shù)存儲(chǔ)的數(shù)據(jù)類型是 Int,Smallint和Tinyint。Int數(shù)據(jù)類型存儲(chǔ)數(shù)據(jù)的范圍大于Smallint數(shù)據(jù)類型存儲(chǔ)數(shù)據(jù)的范圍,而Smallint據(jù)類型存儲(chǔ)數(shù)據(jù)的范圍大于Tinyint數(shù)據(jù)類型存儲(chǔ)數(shù)據(jù)的范圍。使用Int數(shù)據(jù)狗昔存儲(chǔ)數(shù)據(jù)的范圍是從-2147483648到2147483647(每一個(gè)值要求4個(gè)字節(jié)存儲(chǔ)空間)。使用Smallint數(shù)據(jù)類型時(shí),存儲(chǔ)數(shù)據(jù)的范圍從-32768到32767(每一個(gè)值要求2個(gè)字節(jié)存儲(chǔ)空間)。使用Tinyint數(shù)據(jù)類型時(shí),存儲(chǔ)數(shù)據(jù)的范圍是從0到255(每一個(gè)值要求1個(gè)字節(jié)存儲(chǔ)空間)。
精確小婁數(shù)據(jù)在SQLServer中的數(shù)據(jù)類型是Decimal和Numeric。這種數(shù)據(jù)所占的存儲(chǔ)空間根據(jù)該數(shù)據(jù)的位數(shù)后的位數(shù)來確定。
在SQLServer中,近似小數(shù)數(shù)據(jù)的數(shù)據(jù)類型是Float和Real。例如,三分之一這個(gè)分?jǐn)?shù)記作。3333333,當(dāng)使用近似數(shù)據(jù)類型時(shí)能準(zhǔn)確表示。因此,從系統(tǒng)中檢索到的數(shù)據(jù)可能與存儲(chǔ)在該列中數(shù)據(jù)不完全一樣。
(6)貨幣數(shù)據(jù)表示正的或者負(fù)的貨幣數(shù)量。
在MicrosoftSQLServer中,貨幣數(shù)據(jù)的數(shù)據(jù)類型是Money和Smallmoney
Money數(shù)據(jù)類型要求8個(gè)存儲(chǔ)字節(jié),Smallmoney數(shù)據(jù)類型要求4個(gè)存儲(chǔ)字節(jié)。
(7)特殊數(shù)據(jù)類型
特殊數(shù)據(jù)類型包括前面沒有提過的數(shù)據(jù)類型。特殊的數(shù)據(jù)類型有3種,即 Timestamp、Bit和Uniqueidentifier。
Timestamp用于表示SQLServer活動(dòng)的先后順序,以二進(jìn)投影的格式表示。Timestamp數(shù)據(jù)與插入數(shù)據(jù)或者日期和時(shí)間沒有關(guān)系。
Bit由1或者0組成。當(dāng)表示真或者假、ON或者OFF時(shí),使用Bit數(shù)據(jù)類型。例如,詢問是否是每一次訪問的客戶機(jī)請求可以存儲(chǔ)在這種數(shù)據(jù)類型的列中。
Uniqueidentifier由16字節(jié)的十六進(jìn)制數(shù)字組成,表示一個(gè)全局唯一的。當(dāng)表的記錄行要求唯一時(shí),GUID是非常有用。例如,在客戶標(biāo)識(shí)號(hào)列使用這種數(shù)據(jù)類型可以區(qū)別不同的客戶。
2.用戶定義的數(shù)據(jù)類型
用戶定義的數(shù)據(jù)類型基于在MicrosoftSQLServer中提供的數(shù)據(jù)類型。當(dāng)幾個(gè)表中必須存儲(chǔ)同一種數(shù)據(jù)類型時(shí),并且為保證這些列有相同的數(shù)據(jù)類型、長度和可空性時(shí),可以使用用戶定義的數(shù)據(jù)類型。例如,可定義一種稱為 postal_code的數(shù)據(jù)類型,它基于Char數(shù)據(jù)類型。
當(dāng)創(chuàng)建用戶定義的數(shù)據(jù)類型時(shí),必須提供三個(gè)數(shù):數(shù)據(jù)類型的名稱、所基于的系統(tǒng)數(shù)據(jù)類型和數(shù)據(jù)類型的可空性。
(1)創(chuàng)建用戶定義的數(shù)據(jù)類型
創(chuàng)建用戶定義的數(shù)據(jù)類型可以使用Transact-SQL語句。系統(tǒng)存儲(chǔ)過程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ù)類型是如何處理空值的,必須使用單引號(hào)引起來,例如'NULL'、'NOTNULL'或者'NONULL'。
例子:
Usecust
Execsp_addtypessn,'Varchar(11)',"NotNull'
創(chuàng)建一個(gè)用戶定義的數(shù)據(jù)類型ssn,其基于的系統(tǒng)數(shù)據(jù)類型是變長為11的字符,不允許空。
例子:
Usecust
Execsp_addtypebirthday,datetime,'Null'
創(chuàng)建一個(gè)用戶定義的數(shù)據(jù)類型birthday,其基于的系統(tǒng)數(shù)據(jù)類型是DateTime,允許空。
例子:
Usemaster
Execsp_addtypetelephone,'varchar(24),'NotNull'
Eexcsp_addtypefax,'varchar(24)','Null'
創(chuàng)建兩個(gè)數(shù)據(jù)類型,即telephone和fax
(2)刪除用戶定義的數(shù)據(jù)類型
當(dāng)用戶定義的數(shù)據(jù)類型不需要時(shí),可刪除。刪除用戶定義的數(shù)據(jù)類型的命令是sp_droptype{'type'}。
例子:
Usemaster
Execsp_droptype'ssn'
注意:當(dāng)表中的列還正在使用用戶定義的數(shù)據(jù)類型時(shí),或者在其上面還綁定有默認(rèn)或者規(guī)則時(shí),這種用戶定義的數(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í)間數(shù)據(jù),最小時(shí)間單位為百分之三秒或3.33毫秒?
smalldatetime?從1900年1月1日到2079年6月6日的日期和時(shí)間數(shù)據(jù),最小時(shí)間單位為分鐘?
?
?
timestamp?時(shí)間戳,一個(gè)數(shù)據(jù)庫寬度的唯一數(shù)字?
uniqueidentifier?全球唯一標(biāo)識(shí)符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)?
--語?句 功?能
--數(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)建一個(gè)數(shù)據(jù)庫表
DROP?TABLE ?--從數(shù)據(jù)庫中刪除表?
ALTER?TABLE ?--修改數(shù)據(jù)庫表結(jié)構(gòu)
CREATE?VIEW ?--創(chuàng)建一個(gè)視圖?
DROP?VIEW ?--從數(shù)據(jù)庫中刪除視圖
CREATE?INDEX --為數(shù)據(jù)庫表創(chuàng)建一個(gè)索引
DROP?INDEX ?--從數(shù)據(jù)庫中刪除索引?
CREATE?PROCEDURE ?--創(chuàng)建一個(gè)存儲(chǔ)過程?
DROP?PROCEDURE --從數(shù)據(jù)庫中刪除存儲(chǔ)過程
CREATE?TRIGGER --創(chuàng)建一個(gè)觸發(fā)器?
DROP?TRIGGER --從數(shù)據(jù)庫中刪除觸發(fā)器
CREATE?SCHEMA --向數(shù)據(jù)庫添加一個(gè)新模式
DROP?SCHEMA ?--從數(shù)據(jù)庫中刪除一個(gè)模式
CREATE?DOMAIN --創(chuàng)建一個(gè)數(shù)據(jù)值域
ALTER?DOMAIN --改變域定義
DROP?DOMAIN ?--從數(shù)據(jù)庫中刪除一個(gè)域
--數(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ù)訪問計(jì)劃
OPEN --檢索查詢結(jié)果打開一個(gè)游標(biāo)
FETCH --檢索一行查詢結(jié)果?
CLOSE --關(guān)閉游標(biāo)
PREPARE --為動(dòng)態(tài)執(zhí)行準(zhǔn)備SQL?語句?
EXECUTE --動(dòng)態(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、說明:增加一個(gè)列
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、說明:幾個(gè)簡單的基本的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
最小:select?min(field1)?as?minvalue?from?table1
11、說明:幾個(gè)高級(jí)查詢運(yùn)算詞
A:?UNION?運(yùn)算符?
UNION?運(yùn)算符通過組合其他兩個(gè)結(jié)果表(例如?TABLE1?和?TABLE2)并消去表中任何重復(fù)行而派生出一個(gè)結(jié)果表。當(dāng)?ALL?隨?UNION?一起使用時(shí)(即?UNION?ALL),不消除重復(fù)行。兩種情況下,派生表的每一行不是來自?TABLE1?就是來自?TABLE2。?
B:?EXCEPT?運(yùn)算符?
EXCEPT?運(yùn)算符通過包括所有在?TABLE1?中但不在?TABLE2?中的行并消除所有重復(fù)行而派生出一個(gè)結(jié)果表。當(dāng)?ALL?隨?EXCEPT?一起使用時(shí)?(EXCEPT?ALL),不消除重復(fù)行。?
C:?INTERSECT?運(yùn)算符
INTERSECT?運(yùn)算符通過只包括?TABLE1?和?TABLE2?中都有的行并消除所有重復(fù)行而派生出一個(gè)結(jié)果表。當(dāng)?ALL?隨?INTERSECT?一起使用時(shí)?(INTERSECT?ALL),不消除重復(fù)行。?
注:使用運(yùn)算詞的幾個(gè)查詢結(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:?
全外連接:不僅包括符號(hào)連接表的匹配行,還包括兩個(gè)連接表中的所有記錄。
其次,大家來看一些不錯(cuò)的sql語句
1、說明:復(fù)制表(只復(fù)制結(jié)構(gòu),源表名:a?新表名:b)?(Access可用)
法一:select?*?into?b?from?a?where?1<>1
法二: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ù)使用絕對(duì)路徑)?(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ù)時(shí)間
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ù)范圍時(shí)包括了邊界值,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開始時(shí)間,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ù)中對(duì)應(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ù)行而派生出一個(gè)結(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可以方便地實(shí)現(xiàn)多重選擇,類似select?中的case。
select?type,sum(case?vender
?
?
代碼 --使用Sql語句從數(shù)據(jù)庫讀出數(shù)據(jù)字典SELECT??表名=case?when?a.colorder=1?then?d.name?else?''?end,?
???????字段序號(hào)=a.colorder,?字段名=a.name,?標(biāo)識(shí)=case?when?COLUMNPROPERTY(?a.id,a.name,'IsIdentity')=1?then?'√'else?''?end,?
????????主鍵=case?when?exists(SELECT?1?FROM?sysobjects?where?xtype='PK'?and?name?in?
?????????????????????????????(??SELECT?name?FROM?sysindexes?WHERE?indid?in
?????????????????????????????(???SELECT?indid?FROM?sysindexkeys?WHERE?id?=?a.id?AND?colid=a.colid??)))?then?'√'?else?''?end,?
??????????????????????????????類型=b.name,?占用字節(jié)數(shù)=a.length,?長度=COLUMNPROPERTY(a.id,a.name,'PRECISION'),?
?????????????????小數(shù)位數(shù)=isnull(COLUMNPROPERTY(a.id,a.name,'Scale'),0),?允許空=case?when?a.isnullable=1?then?'√'else?''?end,?
??????????????????默認(rèn)值=isnull(e.text,''),?字段說明=isnull(g.[value],'')
?FROM?syscolumns?a?left?join?systypes?b?on?a.xtype=b.xusertype?inner?join?sysobjects?d?on?a.id=d.id??
?and?d.xtype='U'?and??d.name<>'dtproperties'?left?join?syscomments?e?on?a.cdefault=e.id?
?left?join?sysproperties?g?on?a.id=g.id?and?a.colid=g.smallid??order?by?a.id,a.colorder
?
?
posted on 2009-12-19 12:12 DotNet編程 閱讀(...) 評(píng)論(...) 編輯 收藏轉(zhuǎn)載于:https://www.cnblogs.com/furenjun/archive/2009/12/19/sql.html
總結(jié)
以上是生活随笔為你收集整理的[转]SQL语句大全的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 不知道对象的传递那些参数
- 下一篇: 用SqlDataAdapter.Upda