C#快速入門教程(27)—— SQL Server資料庫
如果需要在專案中處理大量的資料,資料庫是不二之選,本課將瞭解SQL Server資料庫的基本應用,下一課將討論如何在C#程式碼中操作SQL Server資料庫。
學習或輕量級應用中,可以使用SQL Server Express,這是一個免費版本。此外,為操作方便,大家還需要一個圖形化的管理工具,這裡當然是使用SSMS(Microsoft SQL Server Management Studio),此工具同樣可以從微軟網站免費下載使用。
安裝SQL Server Express時,有幾點需要注意,以防下一課測試時無法連線到資料庫。第一,在例項配置中需要記得“例項 ID”,如下圖所示。
第二,需要配置超級管理員sa的密碼,如下圖所示。請注意,這裡只是在自己的計算機測試時使用,實際工作中是不應該直接使用sa使用者的,而是根據需要合理建立使用者並以最小化原則分配許可權。
SQL Server Express和SSMS安裝成功後,可以測試一下資料的連線,開啟SSMS,如下圖所示。
這裡,選擇“Windows 身份驗證”,單擊“連線”,如果能成功連線,如會在左側的“物件資源管理器”中看到連線的例項,如下圖所示。
現在,資料庫環境已經準備好了,接下來,再瞭解一些關於資料庫操作的基本概念。首先,SQL Server屬於關係型資料庫,特點是,資料都以二維表的形式儲存和處理,如果大家不熟悉二維表,可以開啟Excel或WPS表格熟悉一下,如下圖所示。
這裡分為列(Column)和行(Row)。其中,列又稱為欄位(Field),定義了每行資料中每一個資料的名稱、型別等資訊,如圖中的UserID、UserName、UserPwd、IsLocked、CreationTime。行則是表中真正的資料,每一行稱為一條記錄(Record),上圖中共包含了3行記錄。
運算元據庫時,我們會使用SQL(結構化查詢語句,Structured Query Language)。現在,我們開啟SSMS,並連線到資料庫例項;然後,新建一個查詢,如下圖所示。
然後,我們輸入如下內容。
create database Cdb_Test;
go
use Cdb_Test;
go
create table UserMain(
UserId bigint identity(1,1) not null,
UserName nvarchar(50) not null unique,
UserPwd nvarchar(50) not null,
IsLocked int not null default(0),
CreationTime datetime,
primary key (UserID)
);
按鍵盤F5鍵執行此程式碼,我們可以在資料,如下圖所示。
程式碼中,首先使用create database語句建立了Cdb_Test資料庫,然後,使用use語句引用它,這樣,接下來的操作就會預設在Cdb_Test資料庫中進行。
create table語句用於建立資料表,其中定義了幾個欄位,分別是:
- UserID,定義為bigint型別,即64位整數,並指定為自動管理的ID資料,設定為從1開始,每次自動加1。not null指定資料不能為空值(NULL)。在運算元據時,不需要人工管理,此欄位資料可以自動生成。
- UserName,定義為nvarchar(50)型別,指定可以最多儲存50個Unicode字元。unique關鍵字指定欄位的資料不能重複。
- UserPwd,同樣定義為可以儲存50個Unicode字元。
- IsLocked,定義為int型別,即32位整數。default(0)指定欄位預設值為0,即沒有指定資料時,欄位資料就是0。
- CreationTime,定義為datetime型別,即用於儲存日期和時間的型別。這裡沒有指定not null,表示如果沒有指定欄位資料,其資料為空值(null);請注意,這裡的空值是指沒有資料,注意區別C#中的null,它表示為物件的空引用。
最後,我們使用primary key語句定義了表的主鍵,即以UserID欄位作為表的主鍵,主鍵欄位會作為記錄的唯一標識資料。
新增資料
接下來,我們就來操作UserMain表中的資料。首先,新建查詢,並執行如下程式碼。
use Cdb_Test;
go
insert into UserMain(UserName,UserPwd)
values('Tom','123456');
insert into UserMain(UserName,UserPwd,IsLocked)
values('Jerry','123456',1);
insert into UserMain(UserName,UserPwd,CreationTime)
values('John','123456','2018-11-7 15:51:45');
如果程式碼執行成功,就會向UserMain表中新增三條記錄,使用下面的語句可以檢視新增的資料。
use Cdb_Test;
go
select * from UserMain;
程式碼執行結果如下圖所示。
向資料表新增記錄時,我們使用insert into語句,其格式如下。
insert into <表名> (<欄位1>,<欄位2>,<欄位3>,...)
values(<值1>,<值2>,<值3>,...);
這裡應注意欄位和值的一一對應關係。此外,如果欄位名中包含特殊字元,可以使用一對方括號定義,如[UserName]。指定欄位值時,數值類可以書寫,而文字和日期類則需要使用一對單引號定義。
常用資料型別
下面,我們瞭解一些在SQL Server中常用的資料型別:
- int型別,32位整數,對應C#中的int型別。
- bigint型別,64位整數,對應C#中的long型別。
- nvarchar(n)型別,處理Unicode編碼的可變長度字串,n指定最大的字元數量,如果定義為最大字元數,可以定義為nvarchar(max)。
- nchar(n)型別,處理Unicode編碼的定長字串,n指定字元數。
- datetime型別,日期和時間型別,一般可以使用標準的格式,如'YYYY-MM-DD hh:mm:ss'。
- decimal(m,n)型別,定義實數型別,m指定整數和小數部分共有幾位,n指定小數位,如decimal(5,2)可以儲存123.45格式的資料。
查詢資料
前面,我們已經使用select語句進行資料的查詢的操作,下面瞭解一些常用的資料查詢語法;首先,使用select語句從資料表中執行查詢的一般格式如下。
select <欄位> from <表> where <條件>;
其中:
- select、from和where為SQL關鍵字。
- <欄位>指定返回資料的欄位列表,每個欄位使用逗號分隔,返回表中所有欄位時,可以使用*萬用字元。
- <表>指定資料表的名稱。
- where <條件>為可選,用於指定查詢條件,如果返回所有記錄,則不需要使用where子句。
下面著重瞭解<條件>的設定,常用的條件型別有:
- =,等於。
- <>,不等於。
- >,大於。
- >=,大於等於。
- <,小於。
- <=,小於等於。
- like,字串模糊查詢,可以使用%符號匹配0到多個字元,也可以使用_(下畫線)匹配一個字元,如UserName like 'J%'就是查詢UserName資料中使用J開頭的記錄。
- between,指定一個範圍,如Age between 1 and 10就是匹配Age資料從1到10的記錄。
- in,指定一個值列表,如UserName in ('Tom','Jerry')就是查詢UserName等於Tom和Jerry的記錄。
- is null,查詢欄位資料為空的記錄,如CreationTime is null。
- is not null,查詢欄位資料不為空的記錄,如CreationTime is not null。
下面的程式碼,我們查詢UserName以J開頭的記錄。
use Cdb_Test;
go
select * from UserMain where UserName like 'J%';
程式碼執行結果如下圖所示。
下面的程式碼查詢CreationTime為空的記錄。
use Cdb_Test;
go
select * from UserMain where CreationTime is null;
程式碼執行結果如下圖所示。
更多的條件設定,大家可以自己動手測試。
更新資料
更新資料表的語法如下:
update <表名> set <欄位與資料列表> where <條件>;
這裡,<表名>和<條件>相信大家已經不陌生了,而<欄位與資料列表>則是設定新資料的列表,每個新欄位和資料使用逗號分隔,如UserName = 'Tom',IsLocked = 0。
請注意,使用沒有條件的update語句是很危險的,它會更新表中所有記錄的資料!!!
下面的程式碼,將UserName為Jerry的記錄中的IsLocked設定為0。
use Cdb_Test;
go
update UserMain set IsLocked=0 where UserName = 'Jerry';
執行程式碼後,我們使用"select * from UserMain;"語句就可以看到資料的變化,如下圖所示。
刪除資料和清空資料表
刪除資料表中的記錄時,使用如下語法。
delete from <表名> where <條件>;
請注意,沒有條件的刪除操作也是非常危險的!!!
如果真的需要清空資料表的內容,可以使用如下語句。
truncate table <表名>;
執行此語句後,資料表會被重置,就像剛剛建立那樣,Identity欄位的值也會從初始值開始重新計數。
高階查詢
排序,可以使用order by子句,如下面的程式碼會按使用者名稱(UserName)升序排序記錄。
use Cdb_Test;
go
select * from UserMain order by UserName asc;
執行結果如下圖所示。
實際上,語句中的asc關鍵字是可以省略的,因為排序的預設方式就是升序,如果需要降序排列,可以使用desc關鍵字。排序時,還可以指定多個欄位,當第一個欄位的資料相同時,就會按第二個欄位進行排序,以此類推。
分組統計,如下面的程式碼,我們將統計CreationTime欄位的每種資料各有多少個。
use Cdb_Test;
go
select CreationTime,count(CreationTime) from UserMain group by CreationTime;
程式碼執行結果如下圖所示。
除了在select關鍵字後使用count()計數函式,還可以使用以下一些函式進行簡單的計算工作:
- min()函式,求指定欄位資料中的最小值。
- max()函式,求指定欄位資料中的最大值。
- sum()函式,求指定欄位資料的和。
- avg()函式,求指定欄位資料的平均值。
當查詢結果只需要返回一定數量的記錄時,可以在select關鍵字後,欄位列表前使用top n子句,其中n指定返回的記錄數量,如“select top 2 * from UserMain;”;此外,在SQL Server中,還可以使用top(n)格式。
當查詢結果中有完全重複的記錄時,可以在select關鍵字後使用distinct子句過濾,如“select distinct CreationTime from UserMain;”。
更多內容
一篇文章能學會SQL Server資料庫??我也不相信哦!以上內容只是簡單地瞭解瞭如何運算元據表中的資料,而像SQL Server這樣的大型資料庫系統,功能是非常強大的,應用和學習也是一個長期的過程;在學習和工作中,可以根據需要選擇一些知識點逐步學習和應用,下面,介紹一些在C#應用開發中可能需要關注的知識點,大家可以參考學習。
檢視(View),簡單的理解就是定義了查詢模板。請注意,檢視並不是真的儲存資料,從檢視中查詢資料時,會先生成檢視資料集合,然後再從這個集合中進行查詢操作。
儲存過程(SP,Stored Procedure),相當於功能封裝程式碼,並可以帶入引數,就像C#中的方法。對於經常操作的查詢,可以定義為儲存過程,以簡化功能的實現。
事務(Transaction),相當於一組任務的集合,但其特點是,這些任務要不全部完成,要不什麼都不做。如銀行的轉賬操作,從A賬戶向B賬戶轉賬,就必須從A賬戶扣款,並在B賬戶新增相應的金額,兩項任務都成功執行時,轉賬才算真的完成。
下一課將討論如何在C#程式碼中操作SQL Server資料庫。
CHY軟體小屋原創作品!
相關文章
- dbForge Studio for SQL Server入門教程:如何連線到資料庫SQLServer資料庫
- c#連線SQL Server資料庫C#SQLServer資料庫
- DbForge Studio for SQL Server入門教程:如何編輯資料SQLServer
- C#快速入門教程(7)——資料型別概述C#資料型別
- 資料庫運維初入門-SQL Server入門到跑路002-初使用資料庫運維SQLServer
- 《C#快速入門教程》目錄C#
- C#快速入門教程(16)—— 介面C#
- C#快速入門教程(6)——方法C#
- cache資料庫入門教程資料庫
- C#快速入門教程(26)—— 繪圖C#繪圖
- C#快速入門教程(21)—— 泛型C#泛型
- C#快速入門教程(15)—— 繼承C#繼承
- C#快速入門教程(8)——整數C#
- 資料庫映象 (SQL Server)資料庫SQLServer
- SQL Server資料庫安全SQLServer資料庫
- C#快速入門教程(28)—— ADO.NETC#
- Nodejs教程21:資料庫入門NodeJS資料庫
- Redis快取資料庫-快速入門Redis快取資料庫
- Blazor使用sql server 資料庫BlazorSQLServer資料庫
- SQL Server資料庫巡檢SQLServer資料庫
- sql server 2005資料庫快照SQLServer資料庫
- SQL Server收縮資料庫SQLServer資料庫
- sql server 資料庫收縮SQLServer資料庫
- SQL Server資料庫遷移SQLServer資料庫
- 管理SQL Server資料庫安全SQLServer資料庫
- SQL Server資料庫恢復,SQL Server資料恢復,SQL Server資料誤刪除恢復工具SQLRescueSQLServer資料庫資料恢復
- C#快速入門教程(29)—— ADO.NET離線元件與資料繫結C#元件
- C#快速入門教程(25)—— 日期與時間C#
- C#快速入門教程(22)—— 常用集合型別C#型別
- C#快速入門教程(30)—— 繼續學習C#
- C#快速入門教程(18)—— 異常處理C#
- C#快速入門教程(12)—— if語句結構C#
- Sql Server 資料庫學習-常用資料庫 物件SQLServer資料庫物件
- SQL Server資料庫建立新使用者及關聯資料庫的方法教程SQLServer資料庫
- Elasticsearch和向量資料庫的快速入門Elasticsearch資料庫
- SQL Server 跨資料庫查詢SQLServer資料庫
- 資料庫映象 (SQL Server)操作模式資料庫SQLServer模式
- 【資料庫學習】資料庫平臺:mysql,sql server資料庫MySqlServer