SQLServer2008常用关键字、数据类型和常用语法常用关键字:SQLserver2008一共大约有180多个关键字。简要分为主要关键字、辅助关键字和函数类关键字。本文就常用的这三类关键字进行语法说明和用例。说明:1、比较好的习惯是,数据库名以D_开头,表名用T_开头,字段名以F_开头,这样可以防止和关键字重名。2、如果确实用到了系统关键字,就要在关键上加[]方括号,以与关键字进行区别。例如有一个用户表被命名为USER,则查询该表内容的时候:SELECT*FROMUSER语句是错误的,应该是SELECT*FROM[USER]。因为USER是关键字。编号关键字应用场景主要关键字1CREATE创建表2ALTER修改表结构3DROP删除数据库和表4INSERT插入表数据5INTO与INSERT连用,插入表数据6VALUES插入表数据时,指定列值7UPDATE更新表数据8SET与UPDATE连用,设定列值9SELECT查询表数据10FROM从哪个表中查询11WHERE查询表数据的条件12DATABASE数据库13TABLE数据表14NOT15NULL空值16IDENTITY(1,1)标识列17CONSTRAINT约束,后边跟约束名18PRIMARY主键,PRIMARYKEY(列名)19FOREIGN外键FOREIGNKEY(列名)20KEY21REFERENCES把…印作参考,指定外键的时候用22CHECKCHECK约束23UNIQUE唯一性约束24COLUMN列25DEFAULT默认值26AND和27OR或28TRUNCATE截断,快速清空表内数据29ORDER常与by连用30BY与GROUP或ORDER连用31ASC升序32DESC降序33AS列名别称34DELETE删除表数据35LIKE通配符36IS用于NULL值37IN离散值38BETWEEN连续值,常与and连用39GROUP分组,常与by连用40HAVING对GROUPBY分组内的数据进行过滤41TOP筛选结果集42DISTINCT去重43UNION44ALL45CASE类似与C#中的SWITCH--CASE语法,查询离散值46ELSE设定case的默认值47END结束case语句48WHEN与case连用49VIEW视图50INDEX索引51JOIN联合查询52ON与JOIN连用数据类型:SQLServer2008一共有36种数据类型。具体如下:编号数据类型存储空间字符类型说明整数型(4)1tinyint1字节取值范围:0--2552smallint2字节取值范围:-2768--327673int4字节取值范围:-231—231-14bigint8字节取值范围:-263—263-1浮点类型(6)5decimal(p,s)5—17字节取值范围:-1038+1—1038-1。p(有效位数,p的取值小于38),可储存的最大十进位数总数,小数点左右两侧都包括在内。s(小数位数,0=s=p=38)小数点右侧的小数位数。例如:decimal(3,1)表示,一共3位有效位,其中整数部分2位,小数部分1位,最大值是99.9,最小值是-99.96numeric(p,s)4字节取值范围:-214,768.3648--214,768.3647。用法类似decimal7smallmoney4字节取值范围:–214748.3648~214748.3647。主要是用于货币8money8字节取值范围:-3.438—3.438主要用于货币9real4或8字节取值范围:-3.40E+38~-1.18E-38,0,1.18E-38~3.40E+3810float4字节取值范围:-3.4E38~3.4E38字符类型(8)11char(n)每字符1字节,最大可达8000字节。ANSI字符,会用空格填充。12nchar(n)每字符2字节,最大可达4000字节。UNICODE字符,会用空格填充。13varchar(n)每字符1字节,最大可达8000字节。ANSI字符,可变长度,不会用空格填充。14varchar(MAX)ANSI字符,最大可达2G15nvarchar(n)每字符2字节,最大可达4000字节。UNICODE字符,可变长度,不会用空格填充。16nvarchar(MAX)最多为231–1(2147483647)字符17text每字符1字节,最大可达2G。18ntext每字符2字节,最大可达2G。二进制数据类型(5)19bit1比特NULL,0或120binary(n)固定长度二进制数据,最高可达8000字节。21varbinary可变长度二进制数据,最高可达8000字节。22varbinary(MAX)最多为232-1字节23image可变长度二进制数据,最高可达2GB。日期和时间类型(7)24smalldatetime25date3字节精度一天,支持范围01/01/0000—31/12/9999。26datetime8字节0.00333秒,支持的范围是'1000-01-0100:00:00'到'9999-12-3123:59:59'。以'YYYY-MM-DDHH:MM:SS'格式显示DATETIME值27datetime2(n)6--8字节100纳秒28datetimeoffset(n)8--10字节100纳秒29time3—5字节100纳秒30timestampTIMESTAMP值返回后显示为'YYYY-MM-DDHH:MM:SS'格式的字符串。其他数据类型(6)31xml用于存储xml格式的文档,最大可达2GB,支持128级层次。32geography地理数据。33geometry几何数据。34hierarchyid主要解决的问题是拥有层次关系的表格,通常用来建立树形结构35sql_variant用于存储SQLServer2005支持的各种数据类型(不包括text、ntext、image、timestamp和sql_variant)的值。对于sql_variant数据类型,必须先将它转换为其基本数据类型值,然后才能参与诸如加减这类运算36uniqueidentifierUniqueidentifier是全局唯一的标识,可存储16字节的二进制值,其作用与全局唯一标记符(GUID)一样,一般用来做主键。常用语法:一、数据库【创建数据库】CREATEDATABASEdbname【修改数据库】ALTERDATABASEdbname【删除数据库】DROPDATABASEdbname二、表结构【创建数据表】1、设定字段是允许空,非空、标识列,自增和主键约束。CREATETABLET_CUSTOMER--表名(CUSTOMERIDINTIDENTITY(1,1),--客户ID,标识列,从开始,每次自增COMPANYNAMENVARCHAR(50)NOTNULL,--,如果不显示指明NOTNULL,系统默认是允许空的USERNAMENVARCHAR(10)NOTNULL,--联系人姓名,非空PHONENUMBERCHAR(11)NULL,--联系电话,允许为空CONSTRAINTT_CUSTOMER_PrimaryKeyPRIMARYKEY(CUSTOMERID))--设定USERID为主键,用括号括起来/*每个单词之间是空格隔开,每个字段之间用单引号隔开,整个字段定义部分用括号括起来*//*T_RegUser_PrimaryKey是约束名*/2、设定字段是UNIQUEIDENTIFIER数据类型,唯一性约束,CHECK约束和默认值约束。CREATETABLET_CUSTOMER(CUSTOMERIDUNIQUEIDENTIFIERUNIQUE,--客户ID,UNIQUEIDENTIFIER类型,唯一性约束COMPANYNAMENVARCHAR(50)NOTNULLUNIQUE,--公司名称,非空,唯一性约束USERNAMENVARCHAR(10)NOTNULL,PHONENUMBERCHAR(11)NULL,AGETINYINTNULLCHECK(AGE0),--联系人年龄,允许空,check约束必须大于MODIFIEDDATEDATENULLCONSTRAINTT_CUSTOMER_DEFAULTDEFAULTGETDATE(),--默认值约束,并调用SQL函数GETDATE()CONSTRAINTT_CUSTOMER_PrimaryKeyPRIMARYKEY(CUSTOMERID))3、设定字段外键CREATETABLET_ORDER--订单表(ORDERIDINTIDENTITY(1,1),--订单ID,标识字段,自增PRODUCTNVARCHAR(50)NOTNULL,--产品PAYMENTMONEYNOTNULL,--货款ORDER_CUSTOMERIDUNIQUEIDENTIFIERNOTNULL,--客户ID,为外键,外键内容是T_CUSTOMER表的CUSTOMERID列CONSTRAINTT_ORDER_PrimaryKeyPRIMARYKEY(ORDERID),--设置ORDERID为主键CONSTRAINTT_ORDER_T_CUSTOMER_ForeignKeyFOREIGNKEY(ORDER_CUSTOMERID)REFERENCEST_CUSTOMER(CUSTOMERID))/*设定外键基本语法*/CONSTRAINT约束名FOREIGNKEY(外键表列名)REFERENCES主键表(主键表列名)/*设置外键,T_ORDER_T_CUSTOMER_ForeignKey是外键约束名,FOREIGNKEY后边是本表内要被设置的外键列REFERENCES后边是主键所在的表,括号内是主键表的链接列*//*表名后的所有内容,都要拿括号括起来*//*外键的数据类型要和主键一模一样,哪怕主键是UNIQUEIDENTIFIER也必须设置成一样*/【修改表名】/*修改表名,可能会破坏脚本和存储过程。*/EXECSP_RENAME'原表名','新表名'示例:EXECSP_RENAME'T_CUSTOMER2','T_CUSTOMER22'【修改表结构】1、添加列和列的约束/*添加列、添加唯一性约束*/ALTERTABLE表名ADD列名1BITNOTNULL,--添加多个列不用括号,用逗号分开即可列名2INTNOTNULLUNIQUE--声明的时候,和创建表的时候一样示例:ALTERTABLET_CUSTOMERADDGENDERBITNOTNULL,--添加多个列不用括号,用逗号分开即可CUSTOMERADDRESSINTNOTNULLUNIQUE--声明的时候,和创建表的时候一样2、删除列/*删除列*/ALTERTABLE表名DROPCOLUMN列名1,列名2--使用关键字COLUNM(列)示例:ALTERTABLET_CUSTOMERDROPCOLUMNGENDER,CUSTOMERADDRESS--使用关键字COLUNM(列)/*每个列名之间用逗号隔开,如果列上有任何约束,则需要先删除约束*/3、添加主键约束,唯一性约束、check约束和默认值约束/*添加主键约束,唯一性约束,check约束和默认值约束*/ALTERTABLE表名ADDCONSTRAINT约束名CHECK(CHECK约束内容),--CHECK约束,每个约束之间用逗号隔开CONSTRAINT约束名UNIQUE(列名),--唯一性约束CONSTRAINT约束名DEFAULT默认约束值或函数FOR列名--默认值约束示例:ALTERTABLET_CUSTOMERADDCONSTRAINTT_CUMSTOMER_AGE_CHECKCHECK(AGE0),--CHECK约束CONSTRAINTT_CUSTOMER_USERNAME_UNIQUEUNIQUE(USERNAME),--唯一性约束CONSTRAINTT_CUST