關於SqlServer表結構 2(迴歸基礎)
阿新 • • 發佈:2020-08-02
關於SqlServer表結構的問題。先來了解一下SqlServer中的資料型別以及它們的用法
整型: 短整型 smallint 整型 int 長整型 bitint
標識列:identity(它是隻讀的)只能用整型 smallint、int、bigint
浮點數:float--->C#、java的double
money--->decimal
bit 0,1--->boolean false、true
字串型別:
char(10) 單位元組固定長度的字元型別、不足不空格,最大8000
varchar(10) 單位元組可變長度的字元型別,可回收沒有用到的空間,最大8000
關於兩者的選擇,關鍵在於在處理資料時是否保證填滿,如果保證填滿可以選擇char,相反如果不確定錄入的資料是否能夠填滿多少個位元組,那麼就選擇varchar,因為他可以回收未填滿的資料,減少記憶體的消耗!
標準字元:可以在鍵盤上看得到的字元都屬於標準字元(單位元組)
非標準字元:中文、日文、法文、俄文等(雙位元組)
nchar:雙位元組 第一個字母 n 就是Unicode的縮寫(所有鍵盤上看不到的都屬於Unicode編碼範圍) 有多少存多少,最大4000,因為是雙位元組 8000/2
nvarchar:可回收雙位元組 Unicode 最大4000
與char和varchar原理是一樣的,帶n一個數字代表雙位元組。不帶n一個數字代表單位元組
text 最大2GB文字上限
ntext:沒記錯的話應該是可變的
時間型別:
date:日期 年月日
time:時間 時分秒
datetime:日期時間 年月日時分秒
--primary key 1.不允許為空 2.不允許重複 3.可以被子表的外來鍵列引用--identity(1,1) 標識列只能在整型列上使用 只讀的不允許修改 --not null 不允許為空 --unique不允許重複,唯一 --foreign key 外來鍵 --references 引用 --check 檢查約束用來判斷資料型別是否合法 --getdate獲取當前系統時間 --datediff 時間差 datediff(year,BornDate,getdate())引數一:按年來算時間差(也可以是month,day),引數二:錄入時間 ,引數三系統時間 後面時間-前面時間 --len()獲取字元數量 create table Grade ( Id int primarykey identity(1,1), GradeName varchar(10) not null ) go create table Class ( Id int primary key identity(1,1), ClassName varchar(10) not null unique, GradeId int foreign key references Grade(Id) ) go create table Student ( Id int primary key identity(1,1), StuCode int not null, ClassId int references Class(Id) not null, StuName nvarchar(10) not null check(len(StuName)>=2) default('佚名'), --姓名必須大於等於2 BornDate date not null check(datediff(year,BornDate,getdate())>=18), Phone varchar(25) not null, [Address] nvarchar(200) null default('宿舍'), Email varchar(20) null ) go