SQL Server 基础定义语句


本文整理自《数据库原理与应用教程 / 何玉洁编著 . —4 版》

SQL Server 数据定义

注意,SQL语言是不区分大小写的,本人所有语句统一用小写表示,且讲解语句格式时中括号表示可省略。

数据类型

数值类型

整数类型

数据类型范围及参数说明
bigint存储 -263到263-1的整数
int存储 -231到231-1的整数
smallint存储 -215到215-1的整数
tinyint存储0到255之间的整数
bit存储1、0或 NULL

精确小数类型

数据类型范围及参数说明
decimal(p,s) 或 numeric(p,s)可不传入参数或只传入参数p,p表示最多存储小数点左右两边的合计位数,范围为1到38,默认18,s为小数位数,范围为0到p,默认为0,p-s 确认小数点左边最大位数

浮点数类型

数据类型范围及参数说明
float(n)n表示浮点数的尾数(去掉小数点后整数的精度)若传入1到24的整数将n视为24,若传入25到53的整数或不传入参数将n视为53,范围为-1.79E+308到-2.23E-308,0,2.23E-308到1.79E+308
real相当于 float(24),范围为-3.40E+38到-1.18E-38,0,1.18E-38,3.40E+38
字符串类型

注意:SQL 中字符串常量要用单引号括起来

非 Unicode 字符串类型

数据类型范围及参数说明
char(n)固定长度,n用于定义字符串长度,范围为1到8000,默认为1
varchar(n)可变长度,n用于定义字符串长度,范围为1到8000,默认为1,或传入参数max指示最大存储大小为231-1字节(2GB)
text可变长度,可存储 231-1 个字符,可以用 varchar(max) 代替

Unicode 字符串类型

数据类型范围及参数说明
nchar(n)固定长度,n用于定义字符串长度,范围为1到4000,默认为1
nvarchar(n)可变长度,n用于定义字符串长度,范围为1到4000,默认为1,或传入参数max指示最大存储大小为231-1字节(2GB)
ntext可变长度,可存储 230-1 个字符,可以用 nvarchar(max) 代替

二进制字符串类型

数据类型范围及参数说明
binary(n)固定长度,n用于定义二进制数据占用字节数,范围为1到8000,默认为1
varbinary(n)可变长度,n用于定义二进制数据占用字节数(实际占用字节数会+2),范围为1到8000,默认为1,或传入参数max指示最大存储大小为231-1字节(2GB)
image可变长度,可存储 231-1 个字节长度的二进制数据,可以用 varbinary(max) 代替
日期和时间类型

注意:SQL 中日期和时间类型的数据常量要用单引号括起来,且时间都为24小时制

数据类型范围及参数说明
datetime定义一个日期和时间组合的类型,格式为 ‘YYYY-MM-DD hh:mm:ss.n*’ ,n*范围为0到999,表示秒的小数部分。日期范围为1753-1-1到9999-12-31,时间范围为00:00:00到23:59:59.997
smalldatetime格式为 ‘YYYY-MM-DD hh:mm:00’,其中秒始终0,且不带秒的小数部分,日期范围变为1900-01-01到2079-06-06
date定义一个日期,格式为 ‘YYYY-MM-DD’,范围为0001-01-01到9999-12-31
time定义一个时间,格式为 ‘hh:mm:ss[.n*]’,其中 n* 范围为0到9 999 999,表示秒的小数部分,时间范围为 00:00:00.0000000到23:59:59.9999999
datetime2定义一个日期和时间结合的类型,格式为 ‘YYYY-MM-DD hh:mm:ss[.n*]’,精度和范围同 date 和 time 类型,但 n* 精度可变,默认精度为7位数
datetimeoffset定义包含所在时区的日期时间类型,格式为 ‘YYYY-MM-DD hh:mm:ss[.nnnnnnn] [{+或-}hh:mm]’,最后可附加的 hh 范围为-14到+14,mm 范围为00到59

数据定义

create 语句定义基本表

create table 语句可以实现定义基本表,其基本格式如下:

create table <表名> (
<列名> <数据类型> [列级完整性约束定义]
{, <列名> <数据类型> [列级完整性约束定义] ... }
[, 表级完整性约束定义] )

其中表名的首字母一般大写表示,列名一般所有字母都用小写表示。
此外,其中有两种可选的完整性约束语句,用于限制表内各列的数据格式和范围,其中列名完整性约束只能写一个,如果某一列有多个约束,必须将部分约束写在表级完整性约束内。
注意,每两行语句间必须有逗号隔开。

约束定义语句

constraint 语句可以用来定义约束名,后可跟具体的约束内容语句(也可以不定义约束名,直接写约束)。

[constraint 约束名] 约束语句
语句作用
not null限制列取值非空
default指定列的默认值
unique限制列取值不能重复
check限制列的取值范围
primary key定义主码
foreign key定义外码

各语句详细介绍:

  1. not null
    只能在列级完整性约束定义处定义,不需要加参数。
id char(10) not null
  1. default
    只能在列级完整性约束定义处定义,后跟要定义的默认值内容。
id char(10) default '1234567890'
  1. unique
    可以定义多个 unique 约束,也可以在一个语句内定义多个列的约束。
-- 列级
id char(10) unique
-- 表级
constraint u_c unique (id,name)
  1. check
    注意约束内容必须写在括号内,如果存在不同列之间的约束,则 check 语句只能写在表级完整性约束定义内。
-- 列级
score int check (score>=0 and score<=100
-- 表级
constraint c_c check (scoreA < scoreB)
  1. primary key
    注意,一个表内只能存在一个 primary key 语句,但是该语句可以定义多个列为主键。(即主键只有一个,但是可以由多个列组成联合主键)
-- 列级
id char(10) primary key
-- 表级
constraint pk_c primary key (id,name)
  1. foreign key references
    列级完整性约束定义中,foreign key (列名) 部分可以不写,只写 references 语句。
-- 基本格式
[constraint 约束名] [foreign key (列名)] references 表名 (列名)
-- 列级
id char(10) references Student (id)
-- 表级
constraint fk_c foreign key (id) references Student (id)
drop、add、alter 语句

alter 语句可以用来修改表或列的结构,drop 语句可以用来删除表或列或约束,add 语句可以用来添加列或约束,具体用法如下

-- 删除表
drop table <表名>
--修改列定义
alter table <表名>
  alter column <列名> <新数据类型>
-- 添加新列
alter table <表名>
  add <列名> <数据类型> <约束>
-- 删除列
alter table <表名>
  drop column <列名>
-- 添加约束
alter table <表名>
  add [constraint <约束名>] 约束定义
-- 删除约束
alter table <表名>
  drop [constraint] <约束名>
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值