sqlserver数据库数据类型详解

SQLServer 提供了以下数据类型:

Binary(n)Varbinary(n)Char(n)Varchar(n)Nchar(n),Nvarchar(n),Datetime,SmalldatetimeDecimal(p,s),Numeric(p,s),Float(n),Real,Int,Smallint,Tinyint,Money,Smallmoney,Bit,Cursor,Sysname,Timestamp,Uniqueidentifier,Text,Image,Ntext,Sql_variant,table,xml


首先解释下定长度变长度如:

char nchar是定长字符串类型,长度不够会自动以空格补齐,char(10)存储abc时,会加7个空格

varchar nvarchar 是变长字符串类型 varchar 存储 abc 时,就为 abc


一、二进制数据类型:binaryvarbinaryimage

 

(1)Binary 数据类型既可以是固定长度的(Binary),也可以是变长度的。  
Binary(n)是n位定长的二进制数据。n 的取值范围是1 到 8000。占用 n + 4 个字节
(2)Varbinary(n)是n位变长度的二进制数据。n 的取值范围是1 到 8000。占用 n + 4个字节

(3)Image数据类型以位字符串存储,不是由SQLServe解释的,必须由应用程序来解释

例如,应用程序可以使用BMP、TIEF、GIF和JPEG 格式把数据存储在 Image 数据类型中


二、字符数据类型:Char,Varchar 和 Text

Char 和 varchar的n取值范围1-8000K,text的你取值范围可大于8000

 

三、Unicode 数据类型:Nchar,Nvarchar和Ntext

Nchar 和 nvarchar 最多可存储4000个字符,ntext可存储多于4000个字符

在 Unicode 标准中,包括了以各种字符集定义的全部字符。Unicode数据类型, 所占用大小是 Unicode 数据类型的两倍

 

四、日期和时间数据类型:datetime smalldatetime

使用Datetime存储的范围是从 1753 年 1 月 1 日 到9999 年12 月 31 日(每一个值要求 8 个存储字节)。 其精确度可达三百分之一秒
使用 Smalldatetime数据类型时, 存储的日期范围是 1900年 1 月 1日 到 2079 年 12 月 31 日(每一个值要求 4 个存储字节)。精度为1分钟


日期的格式可以设定。设置日期格式的命令如下:  
Set DateFormat {format | @format _var| 
其中,format |@format_var 是日期的顺序。有效的参数包括 MDY、DMY、YMD、YDM、MYD 和 DYM。在默认情况下,日期格式为MDY。  
例如,当执行 SetDateFormat YMD 之后,日期的格式为年 月 日 形式; 
当执行 SetDateFormat DMY 之后,日期的格式为日 月有年 形式

 

五、数字数据类型  
数字数据只包含数字。数字数据类型包括正数和负数、小数(浮点数)和整数  
整数由正整数和负整数组成

整数存储的数据类型是BigInt,Int,Smallint和 Tinyint。 
(1)使用Bigint数据存储范围从 -9223372036854775808 到9223372036854775807(每个值要求8个字节中存储空间)
使用 Int 数据存储数据的范围是从 -2 147 483 648 到 2 147 483 647(每一个值要求4个字节存储空间)。 
使用 Smallint 数据类型时,存储数据的范围从 -32 768 到 32 767(每一个值要求2个字节存储空间)。 
使用Tinyint 数据类型时,存储数据的范围是从0 到255(每一个值要求1个字节存储空间)。  


(2)小数数据类型是Decimal[p,s] 和 Numeric[p,s]。数据所占的存储空间根据该数据的位数后的位数来确定。 p表示位数,s表示小数位数 
在SQL Server 中,近似小数数据的数据类型是 Float 和 Real。例如,三分之一这个分数记作3333333,当使用近似数据类型时能准确表示。因此,从系统中检索到的数据可能与存储在该列中数据不完全一样。

(3)Real:可以存储正的或者负的十进制数值,最大可以有7位精确位数。它的存储范围从-3.40E-38~3.40E+38。每个Real类型的数据占用4个字节的存储空间

(4)Float:可以精确到第15位小数,其范围从-1.79E-308~1.79E+308。如果不指定Float数据类型的长度,它占用8个字节的存储空间。Float数据类型也可以写为Floatn)的形式,n指定Float数据的精度,n1~15之间的整数值。当n1~7时,实际上是定义了一个Real类型的数据,系统用4个字节存储它;当n8~15时,系统认为其是Float类型,用8个字节存储它

 

六、货币数据表示正的或者负的货币数量:Money 和 Smallmoney 。 
而Money数据类型占8个存储字节,Smallmoney 数据类型要占4个存储字节。


七、特殊数据类型:Timestamp、Bit 和 Uniqueidentifier。  
Timestamp 用于表示SQLServer 活动的先后顺序,以二进投影的格式表示。Timestamp 数据与插入数据或者日期和时间没有关系。  
Bit 由 1 或者 0 组成。当表示真或假、ON或OFF时,使用 Bit 数据类型。   
Uniqueidentifier 由 16 字节的十六进制数字组成,表示一个全局唯一的。 
当表的记录行要求唯一时,GUID是非常有用。例如,在客户标识号列使用这种数据类型可以区别不同的客户

 

八、其它数据类型

(1)Sql_variant:用于存储除文本、图形数据和Timestamp类型数据外的其他任何合法的SQL Server数据。此数据类型极大地方便了SQL Server的开发工作。

(2)Table:用于存储对表或者视图处理后的结果集。这种新的数据类型使得变量可以存储一个表,从而使函数或过程返回查询结果更加方便、快捷。

(3)XML:可以存储XML数据的数据类型。利用它可以将XML实例存储在字段中或者XML类型的变量中。注意存储在XML中的数据不能超过2GB

(4)Cursor:这是变量或存储过程OUTPUT参数的一种数据类型,这些参数包含对游标的引用。使用 Cursor数据类型创建的变量可以为空。注意:对于 CREATETABLE语句中的列,不能使用Cursor数据类型。

 

 

九、用户定义的数据类型  
用户定义的数据类型基于在SQL Server中提供的数据类型。当几个表中必须存储同一种数据类型时,并且为保证这些列有相同的数据类型、长度和可空性时,可以使用用户定义的数据类型。 
例如,可定义一种称为 postal_code 的数据类型,它基于 Char 数据类型。  
当创建用户定义的数据类型时,必须提供三个数:数据类型的名称、所基于的系统数据类型和数据类型的可空性。  
(1)创建用户定义的数据类型  
创建用户定义的数据类型可以使用 Transact-SQL 语句。系统存储过程 sp_addtype 可以来创建用户定义的数据类型。其语法形式如下:  
sp_addtype{type},[,system_data_bype][,'null_type'] 
其中,type 是用户定义的数据类型的名称。system_data_type 是系统提供的数据类型。
null_type 表示该数据类型是如何处理空值的,必须使用单引号引起来,例如'NULL'、'NOT NULL'或者'NONULL'。  
例子:  
Use cust 
Exec sp_addtype ssn,'Varchar(11)','Not Null' 
创建一个用户定义的数据类型 ssn,其基于的系统数据类型是变长为11 的字符,不允许空。  
例子:  
Use cust 
Exec sp_addtype birthday,datetime,'Null' 
创建一个用户定义的数据类型 birthday,其基于的系统数据类型是 DateTime,允许空。  
例子:  
Use master 
Exec sp_addtype telephone,'varchar(24),'Not Null' 
Eexc sp_addtype fax,'varchar(24)','Null' 
创建两个数据类型,即 telephone 和 fax  
(2)删除用户定义的数据类型  
当用户定义的数据类型不需要时,可删除。删除用户定义的数据类型的命令是 sp_droptype {'type'}。  
例子:  
Use master 
Exec sp_droptype 'ssn' 
注意:当表中的列还正在使用用户定义的数据类型时,或者在其上面还绑定有默认或者规则时,这种用户定义的数据类型不能删除。  
本人补充一下: 
ACCESS数据表中字段中如果有:数据类型“是/否”,当转为SQL SERVER数据表时,数据类型变为“bit”,当用VBA增加新记录时,如果该字段没有操作的话,则值为NULL,在SQLSER中,如果此字段为NULL,即使在表设计时允许该字段为空,但修改记录的任一字段也会出现上述“写入冲突”的现象。

解决方法一:在VBA增加记录时要把该记录的值转为0或1 
解决方法二:在SQLSEFVER中的重新设计表,使字段不允许空,且默认值为0,这样不用在程序中加入代码
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SQL Server的锁机制是用于控制并发访问数据库的一种重要机制。当多个用户同时访问数据库时,可能会出现数据冲突或竞争条件,而锁机制就是为了解决这些问题而存在的。 SQL Server的锁机制分为共享锁和排他锁两种类型。共享锁用于读取操作,可以同时被多个用户获取,不会相互阻塞。而排他锁用于写入操作,只允许一个用户获取,其他用户必须等待释放锁才能进行写入操作。 SQL Server的锁机制还有锁的粒度的概念,包括表级锁、页级锁和行级锁。表级锁是最粗粒度的锁,当一个用户获取了表级锁后,其他用户将无法对整个表进行修改。页级锁是介于表级锁和行级锁之间的一种锁,可以锁定一页数据。行级锁是最细粒度的锁,可以只锁定一行数据。锁的粒度越小,则并发能力越强,但也会造成锁的开销增加。 SQL Server通过锁兼容性检查来判断是否可以获取某个请求的锁,如果两个请求的锁兼容,则可以同时获取锁。在并发访问下,SQL Server会根据锁的粒度和类型进行优化,尽量减少锁的争夺和阻塞,提高系统的并发性能。 使用SQL Server的锁机制需要注意锁的粒度和类型的选择,避免因锁粒度过大或过小导致的性能问题。同时,还需要合理使用事务来控制锁的范围和生命周期,避免长时间占用锁导致其他用户无法获取锁。 总之,SQL Server的锁机制是为了控制数据库并发访问的一种重要机制,通过锁的粒度、类型和兼容性检查,实现对并发访问的控制和优化。合理使用锁机制可以提高系统性能和并发能力,保障数据的一致性和完整性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值