所謂的業(yè)務(wù)主鍵:使用有業(yè)務(wù)意義的字段做主鍵。
所謂的邏輯主鍵:使用沒有任何業(yè)務(wù)意義的字段做主鍵。(完全給程序看的)
5. 主鍵的設(shè)置要求:
1. 不會(huì)重復(fù)的列;
2. 推薦用邏輯主鍵作為主鍵;
6. 為什么要使用主鍵:
一個(gè)表中可以沒有主鍵,但是會(huì)非常難以處理,因此沒有特殊理由,表中要設(shè)置主鍵。
7. 何為外鍵:
比如說:我要進(jìn)貨,可能會(huì)進(jìn)不同廠家的貨物,由于在同一廠家我不一定只進(jìn)一類東西,因此當(dāng)我記錄賬單的時(shí)候,必然要記錄廠家的地址、電話等,對于不同類 貨物且同一廠家進(jìn)行記錄時(shí),還要每次都要重復(fù)的寫廠家地址等,在數(shù)據(jù)庫中我們可以用一個(gè)代號將一些重復(fù)的數(shù)據(jù)進(jìn)行替代,這樣也減少了存儲(chǔ)空間的使用,對于這 個(gè)代號來說,它是重復(fù)要寫地址所在表中的主鍵,且又是主表中的外鍵!
8. 打開Microsoft SQL Server Management Studio之后的連接如下圖:
服務(wù)器名稱填寫方式:計(jì)算機(jī)全稱/實(shí)例名 或者 ./實(shí)例名 或者 還可以直接輸入"(local)"進(jìn)行連接。這樣就可以通過本地驗(yàn)證進(jìn)行連接
9. 新建數(shù)據(jù)庫:
在連接后的“對象之源管理器”中,我們可以看到“數(shù)據(jù)庫”,然后右鍵點(diǎn)擊數(shù)據(jù)庫,再出現(xiàn)的菜單欄中選中“新建數(shù)據(jù)庫(N)”然后如下圖所示:
在上邊只要填寫數(shù)據(jù)庫名稱就可以了!然后點(diǎn)擊確定就OK了!
10. 新建表:
展開你新建的數(shù)據(jù)庫,右鍵點(diǎn)擊“表”,再出現(xiàn)的菜單欄中選中"新建表(N)",然后就可以添加字段也就是(列),并對數(shù)據(jù)類型進(jìn)行設(shè)置,相關(guān)設(shè)置我會(huì)在后邊寫 出。
也可以用SQL語句建立新表:
CREATE TABLE 表名(字段 類型名 是否為Null,字段 類型名 是否為Null,字段 類型名 是否為Null.............)
例如:CREATE TABLE PReson(ID int NOT NULL,Name nvarchar(50),Age int)
這樣就建立了如下表:
ID | Name | Age |
刪除表:
drop table 表名。
11. 常見的數(shù)據(jù)類型有:
1. 字符串?dāng)?shù)據(jù)類型 char 此數(shù)據(jù)類型可存儲(chǔ)1~8000個(gè)定長字符串,字符串長度在創(chuàng)建時(shí)指定;如未指定,默認(rèn)為char(1)。每個(gè)字符占用1byte存儲(chǔ)空間。 nchar 此數(shù)據(jù)類型可存儲(chǔ)1~4000個(gè)定長Unicode字符串,字符串長度在創(chuàng)建時(shí)指定;如未指定,默認(rèn)為nchar(1)。每個(gè)字符占用2bytes存儲(chǔ)空間。 varchar 此數(shù)據(jù)類型可存儲(chǔ)最大值為8000個(gè)字符的可變長字符串。可變長字符串的最大長度在創(chuàng)建時(shí)指定,如varchar(50),每個(gè)字符占用1byte存儲(chǔ)空間。 nvarchar 此數(shù)據(jù)類型可存儲(chǔ)最大值為4000個(gè)字符可變長Unicode字符串。可變長Unicode字符串的最大長度在創(chuàng)建時(shí)指定,如nvarchar(50),每個(gè)字符占用 2bytes存儲(chǔ)空間。 text 此數(shù)據(jù)類型可存儲(chǔ)最大值為2147483647個(gè)字符的變長文本,并且無需指定其初始值,每個(gè)字符占用1byte存儲(chǔ)空間,一般用來存儲(chǔ)大段的文章。text數(shù) 據(jù)類型實(shí)際上是一個(gè)Large Object數(shù)據(jù)類型, 默認(rèn)情況下,此類型的數(shù)據(jù)不是存儲(chǔ)在數(shù)據(jù)行內(nèi),而是存儲(chǔ)于獨(dú)立的Large Object數(shù)據(jù)頁上。另 外,text數(shù)據(jù)類型不能做為函數(shù)、存儲(chǔ)過程或觸發(fā)器中的參數(shù)來用。 ntext 同text數(shù)據(jù)類型,只不過存儲(chǔ)的是最大值為1073741823個(gè)字符的Unicode變長文本,每個(gè)字符占用1byte存儲(chǔ)空間。 說明:無論使用哪種字符串?dāng)?shù)據(jù)類型,字符串值必須放在引號內(nèi),推薦使用單引號。
一般情況下我是這樣區(qū)別
varchar和nvarchar的區(qū)別:
nvarchar中可以有像“漢字”、“日語”等文字,但varchar不允許。
varchar(10)和char(10)
char(10)不管你的字符夠不夠10位,我都會(huì)將空間給你留下。
varchar(10)你有幾個(gè)我給你幾個(gè),但前提是不能超過10。
注意:電話號碼用的是字符型。
2. 數(shù)值數(shù)據(jù)類型 bit 此數(shù)據(jù)類型存儲(chǔ)值為0或1的二進(jìn)制字段。占用1byte存儲(chǔ)空間。 tinyint 此數(shù)據(jù)類型存儲(chǔ)0~255的整數(shù),占用1byte存儲(chǔ)空間。 smallint 此數(shù)據(jù)類型存儲(chǔ)-32768~32767的整數(shù),占用2bytes存儲(chǔ)空間。 int 此數(shù)據(jù)類型存儲(chǔ)-2147483648~2147483647的整數(shù),占用4bytes存儲(chǔ)空間。 bigint 此數(shù)據(jù)類型存儲(chǔ)-9223372036854775808~9223372036854775807的整數(shù),占用8bytes存儲(chǔ)空間。 decimal/numeric 這兩個(gè)數(shù)據(jù)類型功能相同,均為存儲(chǔ)精度可變的浮點(diǎn)值。但推薦采用decimal,因其存儲(chǔ)的數(shù)據(jù)“更有說明性”。此種數(shù)據(jù)類型由兩個(gè)值來確定 decimal(p,s),p為精度,s為標(biāo)量,如decimal(3,2),其中數(shù)值2為小數(shù)的位數(shù),那么decimal(3,2)可用來存儲(chǔ)如1.28這樣的浮點(diǎn)數(shù)。此種數(shù)據(jù)類型占用的存儲(chǔ)空 間取決于精度值p。p為1~9,占用5bytes存儲(chǔ)空間;p為10~19,占用9bytes存儲(chǔ)空間;p為20~28,占用13bytes存儲(chǔ)空間;p為29~38,占用17bytes存儲(chǔ)空 間。 float 此數(shù)據(jù)類型存儲(chǔ)1~53的可變精度的浮點(diǎn)值,精度表示為float(n),n表示科學(xué)記數(shù)法的尾數(shù),取值范圍為-1.79E+308~-2.23E-308的負(fù)數(shù)和2.23E- 308~1.79E+308的正數(shù)。其存儲(chǔ)空間由精度值 決定,n為1~24,占用4bytes存儲(chǔ)空間;n為25~53,占用8bytes存儲(chǔ)空間。 real 此數(shù)據(jù)類型存儲(chǔ)-3.40E+38~-1.18E-38的負(fù)數(shù)和1.18E~3.40E+38的正數(shù)。占用4bytes存儲(chǔ)空間。 smallmoney 此數(shù)據(jù)類型存儲(chǔ)-214748.3648~214748.3647的貨幣值,精確到小數(shù)后4位。占用4bytes存儲(chǔ)空間。 money 此數(shù)據(jù)類型存儲(chǔ)-922337203685477.5808~922337203685477.5807的貨幣值,精確到小數(shù)后4位。占用8bytes存儲(chǔ)空間。 3. 日期和時(shí)間數(shù)據(jù)類型 smalldatetime 此數(shù)據(jù)類型存儲(chǔ)從1900年1月1日到2079年6月6日的日期。占用4btyes存儲(chǔ)空間。 datetime 此數(shù)據(jù)類型存儲(chǔ)從1753年1月1日到9999年12月31日的日期。占用8bytes存儲(chǔ)空間。 4. 二進(jìn)制數(shù)據(jù)類型 binary 此數(shù)據(jù)類型存儲(chǔ)1~8000個(gè)字符的二進(jìn)制數(shù)據(jù),其指定長度即為占用的存儲(chǔ)空間。 varbinary 此數(shù)據(jù)類型存儲(chǔ)可變長的二進(jìn)制數(shù)據(jù),可在創(chuàng)建時(shí)指定其具體長度,也可不指定。 5. 其它數(shù)據(jù)類型 rowversion/timestamp 這兩種數(shù)據(jù)類型功能一樣,但Microsoft建議在任何情況下盡可能地指明rowversion而不是timestamp,因?yàn)閞owversion更加準(zhǔn)確地反應(yīng)了數(shù)據(jù)類型的 真實(shí)性質(zhì)。timestamp數(shù)據(jù)類型跟時(shí)間完全無 關(guān),它表明數(shù)據(jù)庫中的數(shù)據(jù)修改發(fā)生的相對順序。不要在鍵(尤其是主鍵)中使用timestamp 列,因?yàn)槊看涡薷男袝r(shí),timestamp值都會(huì)更改。當(dāng)指定數(shù)據(jù)類型為rowversion或timestamp,那么 SQL Server會(huì)在對表的插入或刪除等 更新操作時(shí)自動(dòng)生成一個(gè)新值,并把這個(gè)新值放在合適的字段里。此類型數(shù)據(jù)占用8bytes存儲(chǔ)空間。 uniqueidentifier 此類型數(shù)據(jù)存儲(chǔ)二進(jìn)制值,其作用與全局唯一標(biāo)識符(GUID)一樣。GUID 主要用于在有多個(gè)節(jié)點(diǎn)、多臺計(jì)算機(jī)的網(wǎng)絡(luò)中,分配必須具有唯一性的標(biāo)識符。 占用16bytes存儲(chǔ)空間。
12. 主鍵的設(shè)置:
右鍵點(diǎn)擊如圖所示中的位置,在彈出來的菜單中選中設(shè)置主鍵就OK了。當(dāng)想取消將其作為主鍵的時(shí)候右鍵點(diǎn)擊,選中“刪除主鍵”就OK了。
有一些類型是可以設(shè)置主鍵,但有些不能能夠設(shè)置主鍵。比如說:nvarchar(max)就不能、而nvarchar(50)可以!
一般有兩個(gè)設(shè)置主鍵是合理的(int(digint)、uniqueidentifier)
13.字段的添加和刪除:
在上圖12中,對應(yīng)的“列命”、“屬性類型”、“允許Null值”中對應(yīng)填寫就可以。若保存后,想進(jìn)行修改,就右鍵點(diǎn)擊你新建的表——》設(shè)計(jì)(G)——》然后就可以填寫 了!
不知大家注意了沒有:主鍵不能為空!
14.在表中填充數(shù)據(jù):
右鍵點(diǎn)擊你新建的表——》編輯前200行(E)——》然后就可以填寫了!
15. SQL語句:是和DBMS交談專用的語句。
注意:SQL字符串用單引號;
SQL語句大小寫不敏感;
SQL語句主要分:DDL(數(shù)據(jù)定義語言)Create Table 、Drop Table等(改變表的結(jié)構(gòu))
DML(數(shù)據(jù)操作語言)Select、Insert等(不改變表的結(jié)構(gòu))
16. 填充表或者插入數(shù)據(jù):
insert into 表名(字段1,字段2,字段3.) values(值1,值2,值3) 例如:insert into person1(id,Name,Age) values(1,'泰山北斗@阿龍',21)
17. 如何解決開發(fā)中系統(tǒng)自動(dòng)添加排序,也就是說,避免主鍵的重復(fù) ----- 設(shè)置標(biāo)識(zhi)規(guī)范:
右鍵點(diǎn)擊表--》設(shè)計(jì)--》如下圖所示:將”否“改成“是”
標(biāo)識規(guī)范修改不成的解決辦法:
工具--》選項(xiàng)--》Designs--》將”阻止保存要求創(chuàng)建表的更改“前面的對號去掉。
如下圖:
18. Guid的newid()方法:
newid()目的是產(chǎn)生不相同的隨機(jī)數(shù)。
19. int 自增長字段和Guid的區(qū)別:
INT自增長字段的優(yōu)點(diǎn):占用空間小、無序開發(fā)人員干預(yù) 、易讀、
缺點(diǎn):效率低;
Guid的優(yōu)點(diǎn):效率高、數(shù)據(jù)導(dǎo)入導(dǎo)出方便;
缺點(diǎn):占用空間大、不易讀;
一般來講,大多數(shù)都使用Guid。
若果使用int 自增字段,則在insert中可以省略對應(yīng)的字段。
20. insert可以省略表名后的列名,但不推薦使用。 insert into Person0(FNumber,FName,FAge,Fsalary) values('liqianlong','李乾龍',21,2.15)
或者 insert into Person0 values('liqianlong','李乾龍',21,2.15)也可以。
insert into 就是向表中插入數(shù)據(jù)
21. update -- 更新數(shù)據(jù):
update 表名 Set 列1名=值,列2名=值.........
更新的時(shí)候注意中文前面要加”N“
updatePerson setAge="23"
where Age>20;
上面兩句話的意思是:將20以上的Age更新為23
22. 運(yùn)算符:
+、 —、 *、 /、=等于() 、<>(不等于) or (或者)、 and (并且) 、not(非)
21. delete的使用:
一般和from一起使用。例如:
delete from Person where Age>10; /*清理表中年齡大于10的數(shù)據(jù)!*/
23. Delete和Drop的區(qū)別:
delete是將表中數(shù)據(jù)清理了,并沒有刪除表;
Drop是直接將表刪除掉;
24. 用SQL設(shè)置主鍵
例如:create table Person0(FNumber varchar(20),FName varchar(20),FAge int,FSalary numeric(10,2),PRIMARY key(FNumber))
上面的primary key就是主鍵的意思,在SQL中是通過這樣來設(shè)置主鍵的。對于numeric(10,2)來講,10是精度(小數(shù)點(diǎn)左右兩端都包括),2是小數(shù)位數(shù)。
25. select * from 表名
1. 例如:select * from Person0
where FAge>20;
注意:上句表示從表Person中塞選FAge 大于20的數(shù)據(jù)。select意思是“選擇、挑選”
新聞熱點(diǎn)
疑難解答
圖片精選