关于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 primary key 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