標籤:style blog color ar 使用 sp for 檔案 資料
1. 表及其屬性
表(Table):也稱實體,是儲存同類型資料的集合。
列(Field):也稱欄位、域或屬性,它構成表的架構,具體表示為一條資訊中的一個屬性。
行(Row):也稱元組(Tuple),儲存具體的條資料。
碼(Key):也稱主鍵,就像人的社會安全號碼碼,是一個獨一無二的字元,代表當前這條資料的標識。
外鍵(FK):這就是關係,代表一條資訊與其他資訊之間的關聯。
2. 表的特點
表在資料庫中體現是一張由行和列組成的二維表格。行在很多時候也稱記錄,列則成為欄位或者域。
表中的每一個欄位都對應一個實體的描述。沒有多餘的,也不能方多餘的欄位進去。當然這句話也不絕對,有時候考慮到系統的二次開發或者系統需求改變,也可能會特意留下一兩個備用欄位。
在表中,每一行資料的順序是可以隨意變換的,一般都是按照插入資料的先後順序排列。也可以按照索引對資料進行排序,總之,這裡的資料行排列不影響以後編程過程中的排序。
但是行之間的資料也精良不要重複,這個是由主鍵控制的,因為主鍵規定了在一張表中不允許重複。
如同行的順序一樣,列的順序也是可以隨意排列的,使用者最多可以為一張表定義1024個列。在同一張表中,列名必須唯一,多張表之間則不受此限制。每一列必須在定義的時候同時定義資料類型。這些都是由SQL Server系統來控製得。
在同一資料庫中,表名不允許重複。這是預設情況,如果你一定要重複也不是沒有辦法,建立一個架構,然後讓兩張同名的資料表在不同的架構下面就行了。預設表都在dbo架構下。
3. 表的類型
在SQL Server2008中,按照表的作用,可以將表分為以下4中類型。
1)普通表
普通表又稱為標準表,就是通常用來在資料庫中儲存資料的表,是最常用的對象,也是最進本、最重要的表。所以我們日常所說的表大多值普通表,而其他表都有自己的特殊用途。
2)分區表
分區表將資料水平劃分為多個單元的表,這些單元可以分布到資料庫中的多個檔案組中,實現對單元中資料的並行訪問。若表的資料量非常龐大,並且這些資料經常被以不同的方式訪問,則可以考慮建立分區表。簡言之,分區表主要用於方便地管理大型表,提高對這些表中資料的使用率。
3)暫存資料表
暫存資料表顧名思義,暫存資料表就是被臨時建立,不能永久儲存的表。暫存資料表又分為本地暫存資料表和全域暫存資料表。暫存資料表被建立之後如果不主動刪除的話會一直存在到SQL Server執行個體中斷連線為止。另外一個區別在於本地暫存資料表支隊建立者可見,而全域暫存資料表則對所有使用者和串連可見。
4)系統資料表
系統資料表的作用就顯而易見了,主要用於儲存有關SQL Server伺服器的配置,資料庫的設定,使用者、架構等資訊。一般只能由資料庫管理員(DBA)來使用。
4. 建立和修改表
1)建立普通表
最簡單的建立表文法如下:
CREATE TABL 表名( 列 資料類型 約束或者預設值, 列 資料類型 約束或者預設值, ………)
2)建立暫存資料表
建立暫存資料表非常簡單。前面說暫存資料表分為本地暫存資料表和全域暫存資料表,和建立普通表唯一的區別在於多家了“#”號,本地暫存資料表加了一個“#”號,如#Student。全域暫存資料表加了兩個“#”號,如##Student。
示範建立暫存資料表的方法-利用查詢建立表:
select ID,STOCK into #order from ordersgoselect *from #ordergo
注意:盡量不要使用暫存資料表,除非你必須這樣做.一般使用子查詢可以代替暫存資料表。使用暫存資料表會帶來系統開銷,如果你是用COM+進行編程,它還會給你帶來很大的麻煩,因為COM+使用資料庫連接池而暫存資料表卻自始至終都存在,前面已經提到過,除非手動刪除,否則暫存資料表將一直存在到中斷連線為止。SQL Server提供了一些替代方案,比如Table資料類型。
3)建立分區表
什麼是分區?為了改善大型表以及具有各種訪問模式的表的延展性和可管理性。
為什麼要使用分區?通常,建立表是為了儲存某種實體(例如客戶或銷售)的資訊,並且每個表只具有描述該實體的屬性資訊。一個表對應一個實體是最容易設計和理解的,因此不需要最佳化這種表的效能、延展性和可管理性,尤其是在表不是特別大的情況下。那麼到底怎樣才稱為是大型表呢?超大型資料庫(VLDB)的大小以數百GB計算,甚至以TB計算,但這個術語不一定能夠反映資料庫中各個表的大小。大型資料庫是指無法按照預期方式啟動並執行資料庫,或者運行成本或維護成本超出預定維護要求或預算要求的資料庫。這些要求也適用於表,如果其他使用者的活動或維護操作限制了資料的可用性,則可以認為表非常大。例如,如果效能嚴重下降,或者每天、每周甚至每個月的維護期間有兩個小時無法訪問資料,則可以認為表非常大。有這些情況下,周期性的停機時間是可以接受的,但是通過更好的設計和分區實現,通常是可以避免或最大限度地減少這種情況的發生的。
除了大小之外,當表中的不同行集擁有不同的使用模式時,具有不同訪問模式的表也可能會影響效能和可用性。儘管使用模式並非總是在變化(這也不是進行分區的必要條件),但在使用模式發生變化時,通過分區可以進一步改善掛曆、效能和可用性。還以銷售表為例,當前月份的資料可能是可讀可寫的,但以往月份的資料(通常占表資料的大部分)是制度的。在資料使用發生變化類似的情況下,或在維護成本隨著在表中讀寫資料的次數增加而變得異常龐大的情況下,表響應使用者請求的能力可能會受到影響。相應地,這也限制了伺服器的可用性和延展性。
此外,如果以不同的方式使用大量資料集,則需要經常對待用資料執行維護操作。這可能造成代價高昂的結果,例如效能問題、阻塞問題、備份(空間、時間和運營成本),還可能會對伺服器的整體延展性產生負面影響。
分區可以帶來什麼協助?當表和索引變得非常大時,分區可以將資料分為更小、更容易管理的部分,從而提供一定的協助。
此外,如果具有多個CPU的系統中存在一個大型表,則對該表進行分區可以通過並行操作獲得更好的效能。通過對各個並行子集執行多項操作,可以改善在極大型資料集(例如數百萬行)中執行大規模操作的效能。通過分區改善效能的例子可以從以前版本中的聚集看出。例如,除了聚整合一個大型表外,SQL Server還可以分別處理各個分區,然後將各個分區的聚集結果再聚集起來。在SQL Server2008中,串連大型資料集的查詢可以通過分區直接受益;SQL Server2008中,已分區為相同分區鍵和相同分區函數的相關表(如Order和OrderDetails表)被稱為已對齊。當最佳化程式檢測到兩個分區切已對齊的表串連在一起時,SQL Server2008可以先將統一分區中的資料連線起來,然後再將結果合并起來。這使得SQL Server2008可以更有效地使用具有多個CPU的電腦。
3)增加和刪除列
ALTER TABLE 表名 --向表中添加列ADD列名1 資料類型 是否可空,列名2 資料類型 是否可空
ALTER TABLE 表名DROP COLUMN列名1,列名2
EXEC sp_help 表名 --查看錶資訊
4)修改列
sp_rename ‘表名.列名‘,‘新列名‘ --修改列名
4)約束
約束就是為了保證資料的完整性。
資料庫三大約束:實體完整性(主鍵),參照完整性(外鍵),使用者定義完整性
ALTER TABLE 表名 --添加主鍵方式之一(記得原先有主鍵的話要先刪除在執行)ADD CONSTRAINT 主鍵名 PRIMARY KEY(l列名)
CREATE TABLE 表名 ( 外鍵列名 資料類型 REFERENCES 表名(主鍵名) --指定外部索引鍵關聯(方式1) --方式2採用constraint關鍵字建立外鍵約束 CONSTRAINT 外鍵約束名稱 FOREIGN KEY (外鍵列名) REFERENCES 主表名(id))
ALTER TABLE 表名 --預設約束ADD CONSTRAINT default_name DEFAULT ‘預設值‘ FOR 列名
--UNIQUE約束指定表中某一列或多個列不能有相同的兩行或者兩行以上的資料存在CREATE TABLE 表名( 列名 資料類型 UNIQUE --方式1 CONSTRAINT 約束名稱 UNIQUE(列1,列2) --方式2)
--關閉約束檢測NOCHECK CONSTRAINT 約束名NOCHECK CONSTRAINT ALL--開啟約束檢測CHECK CONSTRAINT 約束名CHECK CONSTRAINT ALL
SQL-Server資料庫學習筆記-表