建表注意事項:對于建表大家都不陌生,這里主要說(shuō)明一下幾點(diǎn)注意實(shí)現:1、大數據字段最好剝離出單獨的表,以便影響性能2、使用varchar,代替char,這是因為varchar會(huì )動(dòng)態(tài)分配長(cháng)度,char指定為20,即時(shí)你存儲字符“1”,它依然是20的長(cháng)度 3、給表建立主鍵,看到好多表沒(méi)主鍵,這在查詢(xún)和索引定義上將有一定的影響4、避免表字段運行為null,如果不知道添加什么值,建議設置默認值,特別int類(lèi)型,比如默認值為0,在索引查詢(xún)上,效率立顯。
5、建立索引,聚集索引則意味著(zhù)數據的物理存儲順序,最好在唯一的,非空的字段上建立,其它索引也不是越多越好,索引在查詢(xún)上優(yōu)勢顯著(zhù),在頻繁更新數據的字段上建立聚集索引,后果很?chē)乐兀迦敫孪喈斆Α?、組合索引和單索引的建立,要考慮查詢(xún)實(shí)際和具體模式。
建表注意事項:
對于建表大家都不陌生,這里主要說(shuō)明一下幾點(diǎn)注意實(shí)現:
1、大數據字段最好剝離出單獨的表,以便影響性能
2、使用varchar,代替char,這是因為varchar會(huì )動(dòng)態(tài)分配長(cháng)度,char指定為20,即時(shí)你存儲字符“1”,它依然是20的長(cháng)度
3、給表建立主鍵,看到好多表沒(méi)主鍵,這在查詢(xún)和索引定義上將有一定的影響
4、避免表字段運行為null,如果不知道添加什么值,建議設置默認值,特別int類(lèi)型,比如默認值為0,在索引查詢(xún)上,效率立顯。
5、建立索引,聚集索引則意味著(zhù)數據的物理存儲順序,最好在唯一的,非空的字段上建立,其它索引也不是越多越好,索引在查詢(xún)上優(yōu)勢顯著(zhù),在頻繁更新數據的字段上建立聚集索引,后果很?chē)乐兀迦敫孪喈斆Α?/p>
6、組合索引和單索引的建立,要考慮查詢(xún)實(shí)際和具體模式.
1.在創(chuàng )建數據庫時(shí)應該注意哪些問(wèn)題?數據庫在創(chuàng )建的時(shí)候可以設置他的擴展大小,但是數據庫的大小不是固定的 它的數據實(shí)時(shí)地不斷的增大.注意不要到MASTER數據庫中創(chuàng )建用用戶(hù)對象.2.怎樣確定數據庫的大小?創(chuàng )建數據庫時(shí)可以創(chuàng )建其大小3.比較用不同方法創(chuàng )建數據庫時(shí),確定數據文件和日志文件的方法。
4.可以在MASTER數據庫中創(chuàng )建用戶(hù)對象嗎?為什么?不要在MASTER數據庫中創(chuàng )建任何用戶(hù)對象,因為MASTER數據庫包含系統表,這些系統表存儲SQL SERVER所用的系統信息5.可以用哪些方法修改數據庫?1)打開(kāi)企業(yè)管理器,展開(kāi)服務(wù)器組,然后展開(kāi)SQL SERVER服務(wù)器.2)在”數據庫”文件夾中,右擊要更改的數據庫(如:bbsdb),然后單擊”屬性”命令,打開(kāi)數據庫屬性對話(huà)框用TRANSANCT-SQL也能修改數據庫語(yǔ)句為:ALTER DATABASE。
如果你正在負責一個(gè)基于SQL Server的項目,或者你剛剛接觸SQL Server,你都有可能要面臨一些數據庫性能的問(wèn)題,這篇文章會(huì )為你提供一些有用的指導(其中大多數也可以用于其它的DBMS)。
在這里,我不打算介紹使用SQL Server的竅門(mén),也不能提供一個(gè)包治百病的方案,我所做的是總結一些經(jīng)驗----關(guān)于如何形成一個(gè)好的設計。 這些經(jīng)驗來(lái)自我過(guò)去幾年中經(jīng)受的教訓,一直來(lái),我看到許多同樣的設計錯誤被一次又一次的重復。
你了解你用的工具嗎?不要輕視這一點(diǎn),這是我在這篇文章中講述的最關(guān)鍵的一條。也許你也看到有很多的SQL Server程序員沒(méi)有掌握全部的T-SQL命令和SQL Server提供的那些有用的工具。
“什么?我要浪費一個(gè)月的時(shí)間來(lái)學(xué)習那些我永遠也不會(huì )用到的SQL命令???”,你也許會(huì )這樣說(shuō)。對的,你不需要這樣做。
但是你應該用一個(gè)周末瀏覽所有的T-SQL命令。在這里,你的任務(wù)是了解,將來(lái),當你設計一個(gè)查詢(xún)時(shí),你會(huì )記起來(lái):“對了,這里有一個(gè)命令可以完全實(shí)現我需要的功能”,于是,到MSDN查看這個(gè)命令的確切語(yǔ)法。
不要使用游標讓我再重復一遍:不要使用游標。如果你想破壞整個(gè)系統的性能的話(huà),它們倒是你最有效的首選辦法。
大多數的初學(xué)者都使用游標,而沒(méi)有意識到它們對性能造成的影響。它們占用內存,還用它們那些不可思議的方式鎖定表,另外,它們簡(jiǎn)直就像蝸牛。
而最糟糕的是,它們可以使你的DBA所能做的一切性能優(yōu)化等于沒(méi)做。 不知你是否知道每執行一次FETCH就等于執行一次SELECT命令?這意味著(zhù)如果你的游標有10000條記錄,它將執行10000次SELECT!如果你使用一組SELECT、UPDATE或者DELETE來(lái)完成相應的工作,那將有效率的多。
初學(xué)者一般認為使用游標是一種比較熟悉和舒適的編程方式,可很不幸,這會(huì )導致糟糕的性能。 顯然,SQL的總體目的是你要實(shí)現什么,而不是怎樣實(shí)現。
我曾經(jīng)用T-SQL重寫(xiě)了一個(gè)基于游標的存儲過(guò)程,那個(gè)表只有100,000條記錄,原來(lái)的存儲過(guò)程用了40分鐘才執行完畢,而新的存儲過(guò)程只用了10秒鐘。在這里,我想你應該可以看到一個(gè)不稱(chēng)職的程序員究竟在干了什么!!!我們可以寫(xiě)一個(gè)小程序來(lái)取得和處理數據并且更新數據庫,這樣做有時(shí)會(huì )更有效。
記住:對于循環(huán),T-SQL無(wú)能為力。
新建表命令: create table yg1 ( 姓名 varchar (8), 性別 char (2), 年齡 int, 籍貫 varchar (5), 電話(huà) varchar (11), 工資 money, 婚否 bit ) 引入: 數據類(lèi)型: 1。
數值型:數字 2。整形:整數 a。
Bigint 大整形 -2^63→2^63-1 八個(gè)字節 b。 int 普通整形 -2^31→2^31-1 四個(gè)字節 c。
smallint 小整形 -2^15→2^15-1 二個(gè)字節 d。 tinyint 短整形 0→255 一個(gè)字節 3。
字符串型: a。 char(n) 固定字符型 n代表字符串的長(cháng)度,不足n位,系統自動(dòng)補充空格,滿(mǎn)足,則截除。
b。 varchar (n) 可變字符型 n代表字符串的長(cháng)度,不足n位,系統以實(shí)際錄入為準,多余自動(dòng)截除。
4。時(shí)間日期型: a。
datetime 表示范圍 時(shí) 分 秒 毫秒 b。 smalldatetime 時(shí) 分 秒 5。
貨幣型: a。 money b。
smallmoney 6。邏輯型: bit 位 0或1 (1位) 習慣用0代表"真"1代表"假" 接下來(lái)繼續 1。
增加字段: alter table yg add 郵編 char (6) --注:數據類(lèi)型必須包括 2。 刪除字段: alter table yg drop column 年齡 3。
修改字段屬性: alter table yg alter column 性別 char (10) 4。 字段改名: sp_rename 例如: 將年齡改為age sp_reneme 'yg。
年齡','age' 表改名: sp_rename yg,newyg --yg為現有表名,newyg為新表名 刪除表: drop table 表名 例如: drop table yg 刪除多個(gè)表: drop table yg,yg1,yg2。
首先說(shuō)說(shuō)怎么用SQL語(yǔ)句創(chuàng )建數據庫,創(chuàng )建數據庫的語(yǔ)句有如下幾種:1. CREATE TABLE(創(chuàng )建新表)2. CREATE INDEX(增加索引)3. DROP INDEX(刪除索引)4. CONSTRAINT(約束語(yǔ)句)5. ALTER TABLE(修改表)6. DROP TABLE(刪除表) CREATE TABLE語(yǔ)句:在數據庫中生成新表,表中字段的類(lèi)型能夠為:INTEGER(整型)、LONG(長(cháng)整型)、SINGLE(單精度浮點(diǎn)數)、DOUBLE(雙精度浮點(diǎn)數)、DATETIME(日期型,也能夠寫(xiě)成DATE)、BIT(布爾型)、TEXT(字符串型,最大255個(gè)字節)、MEMO(字符串型,最大可達1.2G字節)、COUNTER(自動(dòng)遞增長(cháng)整型,可確定記錄的唯一性)、CURRENCY(貨幣型,精確到小數點(diǎn)左邊15位,右邊4位)、BINARY(字節型,最大255個(gè))、LONGBINARY(用于OLE對象)、GUID(全局唯一標識符)。
生成表NewTable,該表有文本字段Field1和整型字段Field2,表名和字段名能夠隨便您取,不區分大小寫(xiě),但是,有些保留字不能用作表名字段名,比如Number CREATE TABLE NewTable(Field1 TEXT(30), Field2 INTEGER); CREATE INDEX語(yǔ)句:INDEX是為了加快查找記錄的速度,或是為了增加字段約束關(guān)系而配置的。創(chuàng )建索引語(yǔ)句執行前表中能夠有記錄,但存在的記錄必須滿(mǎn)足該索引語(yǔ)句的約束關(guān)系,否則語(yǔ)句不能執行,另外要注意的是在同一個(gè)數據庫中(而不但僅是在同一個(gè)表中),索引名不能相同,否則語(yǔ)句也會(huì )失敗。
生成字段Field1的索引字段NewIndex,兩條語(yǔ)句作用相同 生成后Field1字段能夠有相同的值,能夠有空值(NULL) CREATE INDEX NewIndex ON NewTable (Field1); CREATE INDEX NewIndex ON NewTable (Field1) WITH IGNORE NULL; 生成字段Field1的索引字段NewIndex,注意,每個(gè)表里只能有一個(gè)主索引(PRIMARY)。生成后Field1字段不能有相同的值,不能有空值(當然,假如是TEXT類(lèi)型,能夠有一個(gè)空串,但是空串不是空值) CREATE INDEX NewIndex ON NewTable(Field1) WITH PRIMARY; 字段Field1不能有相同的值,但能夠有空值(兩個(gè)空值不算相同的值) CREATE UNIQUE INDEX NewIndex ON NewTable(Field1); 字段Field1能夠有相同的值,但不能有空值 CREATE INDEX NewIndex ON NewTable(Field2) WITH DISALLOW NULL 能夠在索引語(yǔ)句中加入ASC(升序)或DESC(降序)來(lái)控制記錄排列順序假如不使用順序字,SQL則默認使用ASC順序 CREATE INDEX NewIndex ON NewTable(Field1 ASC, Field2 DESC); DROP INDEX語(yǔ)句:刪除表NewTable中的索引NewIndex,語(yǔ)句執行前索引NewIndex必須存在 DROP INDEX NewIndex ON NewTable; CONSTRAINT語(yǔ)句:CONSTRAINT子句用于創(chuàng )建數據庫完整性的索引,他和INDEX語(yǔ)句作用相同,有些地方能夠互相替代,他能夠使用PRIMARY KEY(主關(guān)鍵字),UNIQUE(唯一)和FOREIGN KEY(外部關(guān)鍵字),和INDEX相比不能使用IGNOR NULL和DISALLOW NULL,但多了FOREIGN KEY(這也是他最強大的地方)。
另外, CONSTRAINT語(yǔ)句必須和CREATE TABLE或ALTER TABLE語(yǔ)句一起使用。生成表NewTable,主關(guān)鍵字段是Field1,主索引是NewPK CREATE TABLE NewTable(Field1 LONG CONSTRAINT NewPK PRIMARY KEY, Field2 MEMO, Field3 DATETIME); 生成索引為NewUK的表NewTable,Field1不能有相同值,能夠有空值 CREATE TABLE NewTable(Field1 INTEGER CONSTRAINT NewUK UNIQUE); 生成多列的主索引,兩條記錄的Field1和Field2不能全部相同,也不能為空值 CREATE TABLE NewTable(Field1 INTEGER, Field2 CURRENCY, CONSTRAINT NewPK PRIMARY KEY(Field1, Field2)); 生成多列的UNIQUE索引,兩條記錄的Field1和Field2不能全部相同注意,假如兩條記錄其中一個(gè)字段相同而另一個(gè)字段都是空值,那也算兩個(gè)字段不同 CREATE TABLE NewTable(Field1 INTEGER, Field2 CURRENCY, CONSTRAINT NewUK UNIQUE(Field1, Field2)); 要在幾個(gè)不同的表之間建立聯(lián)系,就要使用FOREIGN KEY REFERENCES子句,他能夠限定某個(gè)表的字段內容必須存在于另外一個(gè)表中。
第一個(gè)例子:首先,生成主關(guān)鍵字段為Field1的表NewTable1 CREATE TABLE NewTable1(Field1 INTEGER CONSTRAINT NewPK PRIMARY KEY); 然后,再生成外部索引,兩個(gè)表的Field1必須類(lèi)型相同,并且第一個(gè)表的Field1是主關(guān)鍵字段或UNIQUE字段。生成外部索引后,表NewTable2要增加記錄,他的Field1字段值必須已存在于表NewTable1的Field1字段中。
下面兩條語(yǔ)句作用相同,因為Field1是NewTable1的主關(guān)鍵字段,能夠省略不寫(xiě) CREATE TABLE NewTable2(Field1 INTEGER CONSTRAINT NewFK REFERENCES NewTable1); CREATE TABLE NewTable2(Field1 INTEGER CONSTRAINT NewFK REFERENCES NewTable1(Field1)); 第二個(gè)例子:首先,生成主關(guān)鍵字段為Field1和Field2的表NewTable1 CREATE TABLE NewTable1(Field1 INTEGER, Field2 TEXT(20), 。
聲明:本網(wǎng)站尊重并保護知識產(chǎn)權,根據《信息網(wǎng)絡(luò )傳播權保護條例》,如果我們轉載的作品侵犯了您的權利,請在一個(gè)月內通知我們,我們會(huì )及時(shí)刪除。
蜀ICP備2020033479號-4 Copyright ? 2016 學(xué)習?shū)B(niǎo). 頁(yè)面生成時(shí)間:3.114秒