SQL Server表的创建、修改与删除

一、基本介绍

1)基本数据类型

数 据 类 型 符 号 标 识
整数型 int, smallint, tiny, bigint
精确数值型 decimal, numeric
浮点型 real,float
货币型 money, smallmoney
位型 Bit
字符型Unicode字符型文本型 char, varchar, varchar(MAX)nchar, nvarchar, nvarchar(MAX)text, ntext
二进制型图像型 binary[(n)], varbinary[(n)], varbinary(MAX)Image
日期时间型 date, datetime, smalldatetime, datetime2, datetimeoffset, time
时间戳型 timestamp
平面和地理空间数据类型 geometry, geography
其他 sql_variant, uniqueidentifier, xml, hierarchyid

1.整形:int,smallint,tiny,bigint

类型 名称 数范围 精度 存储字节
int 整数 -231~231-1 10 4
smallint 短整数 -215~215-1 5 2
tinyint 微短整数 0~255 3 1
bigint 大整数 -263~263-1 19 8

2. 精度数值型:decimal,numeric

精确数值型数据由整数部分和小数部分构成,其所有的数字都是有效位,能够以完整的精度存储十进制数。decimal 和 numeric在功能上完全等价。
格式:numeric | decimal(p[,s]),其中p为精度,s为小数位数,s<p, 默认值为0。

存储–1038+1~1038–1的固定精度和小数位的数字数据。

3. 浮点型:real,float

浮点型不能精确表示数据的精度,用于处理取值范围非常大且对精确度要求不太高的数值量。

类型数范围 定义长度 精度 字节
real –3.40E+38~3.40E+38 1~24 7 4
float –1.79E+308~1.79E+308 25~53 15 8

4. 货币型:money,smallmoney

用十进制数表示货币值。

类型 数范围 小数位数 精度 字节
money -263~263-1 4 19 8
smallmoney -231~231-1 4 10 4

说明:
(1)当向表中插入moneysmallmoney类型的值时,必须在数据前面加上货币表示符号($),并且数据中间不能有逗号(,);若货币值为负数,则需要在符号$的后面加上负号(-)。例如,$15 000.32$680$-20 000.9088都是正确的货币数据表示形式。
(2)money的数范围与bigint相同,不同的只是money型有4位小数。smallmoneyint的关系就如同moneybigint的关系。

5.位型:bit

它只存储0和1。当为bit类型数据赋0时,其值为0,而赋非0时,其值为1。字符串值TRUE转换为1,FALSE转换为0。

6.字符型、Unicode字符型和文本型:char/nchar,varchar/nvarchar,text/ntext

字符型数据用于存储字符串,字符串中可包括字母、数字和其他特殊符号(如#、@、&等)。在输入字符串时,需将串中的符号用单引号或双引号括起来,如’abc’、“C语言”。
(1)char[(n)]:定长字符数据类型,其中n定义字符型数据的长度,n在1~8000之间。默认n=1。若实际存储的串长度不足n时,则在串的尾部添加空格以达到长度n。若输入的字符个数超出了n,则超出的部分被截断。
(2)varchar[(n)]:变长字符数据类型,n(1~8000)表示的是字符串可达到的最大长度。实际长度为输入字符串的实际字符个数,而不一定是n。当列中的字符数据值长度接近一致时,如姓名,此时可使用char;当列中的数据值长度显著不同时,使用varchar较为恰当,可以节省存储空间。
(3)text:可以表示最大长度为2311个字符,其数据的存储长度为实际字符个数。
nchar(n)nvarchar(n)ntext使用UNICODE UCS-2字符集,该字符集1个字符用2个字节表示,n=1~4000,占用2n字节空间。
(4)varchar(MAX)nvarchar(MAX):最多可存放231-1个字节的数据,可以用来替换text、ntext数据类型。

7.二进制型和图像型:binary [(n) ],varbinary [(n)],varbinary( MAX),Image

二进制数据类型表示的是位数据流,包括binary(固定长度)和varbinary(可变长度)两种。
(1)binary [(n) ]:固定长度的n个字节二进制数据。n的取值范围为1~8000,默认为1。binary(n)数据的存储长度为n+4个字节。若输入的数据长度小于n,则不足部分用0填充;若输入的数据长度大于n,则多余部分被截断。
(2)varbinary [(n)]:n个字节变长二进制数据。
(3)image(图像数据型):用于存储图片、照片等。实际存储的是可变长度二进制数据,介于 0与231-1字节之间。该类型是为了向下兼容而保留的数据类型。
(4)varbinary(MAX):最多可存放231-1个字节的数据,推荐用户使用varbinary(MAX)数据类型来替代image类型。

8.日期时间型:date,datetime,smalldatetime,datetime2,datetimeoffset,time

日期时间类型数据用于存储日期和时间信息,用户以字符串形式输入日期时间类型数据,系统也以字符串形式输出日期时间类型数据。

数据类型 日期范围 精确度 说明
date 1.1.1~9999.12.31 日期
datetime 1753.1.1~9999.12.31 3.33ms 日期和时间分别给出
smalldatetime 1900.1.1~2079.6.6 日期和时间分别给出
datetime2 1.1.1~9999.12.31 hh:mm:ss[.nnnnnnn] datetime(n)表示n(=1~7)位微秒
datetimeoffset YYYY-MM-DD hh:mm:ss[.nnnnnnn] [{+|-}hh:mm 带时区偏移量
time hh:mm:ss[.nnnnnnn] time(n)表示n(=1~7)位微秒

(1) 日期部分的表示形式常用的格式如下:

年 月 日 2001 Jan 20、2001 January 20
年 日 月 2001 20 Jan
月 日[,]年 Jan 20 2001、Jan 20,2001、Jan 20,01
月 年 日 Jan 2001 20
日 月[,]年 20 Jan 2001、20 Jan,2001
日 年 月 20 2001 Jan
年(4位数) 2001表示2001年1月1日
年月日 20010120、010120
月/日/年 01/20/01、1/20/01、01/20/2001、1/20/2001
月-日-年 01-20-01、1-20-01、01-20-2001、1-20-2001
月.日.年 01.20.01、1.20.01、01.20.2001、1.20.2001

(2)时间部分常用的表示格式如下:

时:分 10:20、08:05
时:分:秒 20:15:18、20:15:18.2
时:分:秒:毫秒 20:15:18:200
时:分AM|PM 10:10AM、10:10PM

9.时间戳型:timestamp

该类型反映系统对该记录修改的相对(相对于其他记录)顺序,它实际上是二进制格式数据,其长度为8字节。每当对该表加入新行或修改已有行时,都由系统自动将一个计数器值加到该列,即将原来的时间戳值加上一个增量。一个表只能有一个timestamp 列。

10.平面和地理空间数据类型:geometry,geography

(1)geometry(平面空间数据类型):它作为.NET公共语言运行时(CLR)数据类型实现,表示欧几里得(平面)坐标系中的数据。
(2)geography(地理空间数据类型):它作为.NET 公共语言运行时(CLR)数据类型实现,表示圆形地球坐标系中的数据。 SQL Server支持geography 数据类型用于存储GPS纬度和经度坐标之类的椭球体(圆形地球)数据。

11.其他数据类型:sql_variant,uniqueidentifier,xml,hierarchyid

(1)sql_variant:一种存储SQL Server支持的各种数据类型(除textntextimagetimestampsql_variant外)值的数据类型。sql_variant的最大长度可达8016字节。
(2)uniqueidentifier:唯一标识符类型。系统将为这种类型的数据产生唯一标识值,它是一个16字节长的二进制数据。
(3)xml:用来在数据库中保存xml文档和片段的一种类型,但是此种类型的文件大小不能超过2 GB。
(4)hierarchyid:可表示层次结构中的位置。

2)命令的基本介绍

1.创建表的命令

创建表命令的主要格式如下:

CREATE TABLE  表名
 ( 
{ <列定义>  |  <计算列定义>  |  <列集>} 
       [ <表约束> ] [ ,...n ]
 ) 
 [ ; ]

说明:
(1)表名的完整写法是:[ 数据库名.[架构名]. | 架构名. ] 表名,但前面部分一般不写。
(2)创建表包括定义表和定义组成表的各列。<表约束>用于保证表中数据完整性。

列的定义

<列定义> ::=

列名 <数据类型>					/*指定列名、列的数据类型*/
[ NULL | NOT NULL ]				/*指定是否为空*/
[
    [ CONSTRAINT 约束名 ]
    DEFAULT常量表达式				/*指定默认值*/
]
| [ IDENTITY [ (初值, 增量) ] 			/*指定列为标识列*/
[ ROWGUIDCOL ]				/*指定列为全局标识符列*/
[ <列约束>] 					/*指定列的约束*/

<数据类型> ::=

类型名  [ ( 精度 [ , 小数位 ] | max  ]

说明:
(1)NULL | NOT NULLNULL表示列可取空值,NOT NULL表示列不可取空值。
(2)DEFAULT 常量表达式:为所在列指定默认值,默认值“常量表达式”必须是一个常量值、标量函数或NULL值。
(3)IDENTITY:指出该列为标识符列,为该列提供一个唯一的、递增的值。“初值”是标识字段的起始值,默认值为1,“增量”是标识增量,默认值为1。
(4)ROWGUIDCOL:表示列是行的全局唯一标识符列,ROWGUIDCOL属性只能指派给uniqueidentifier列。
(5)<列约束>:列的完整性约束。指定该列为主键则使用PRIMARY KEY关键字。

计算列

计算列中的值是通过其他列计算出来的,该列实际并不存放值。
<计算列定义> ::=

列名 AS 计算列表达式 
[ PERSISTED [ NOT NULL ] ]

2.修改表结构的命令

修改表结构语法格式如下:

ALTER TABLE  表名
{
    ALTER COLUMN 列名{, …}			/*修改列属性*/
    | ADD 					/*添加列*/
    {
        <列的定义>									
    }   [ , ... ]  <表约束> 
    | DROP				/*删除列*/
    {
        [ CONSTRAINT ] 约束名			/*删除约束*/
        | COLUMN 列名								
    }  [ , ... ]
}

1)命令主体

ALTER TABLE命令主体结构说明如下:
(1)表名:要修改的表名。
(2)ALTER COLUMN子句:修改表中指定列的属性,“列名”给出要修改的列。
若表中该列所存数据的数据类型与将要修改的列类型冲突,则发生错误。例如,原来char类型的列要修改成int类型,而原列值包含非数字字符,则无法修改。
(3)ADD子句:向表中增加新列,新列的定义方法与CREATE TABLE命令中定义列的方法相同。一次还可以添加多个列,中间用逗号隔开。
(4)DROP子句:从表中删除列或约束。
(5)WITH子句:[ WITH { CHECK | NOCHECK } ]指定表中的数据是否用新添加的或重新启用的FOREIGN KEYCHECK约束进行验证。ALL关键字指定启用或禁用所有约束。

2)ALTER COLUMN子句

该语句格式为:

ALTER COLUMN 列名
{
	类型名 [ ( 精度[ , 小位数] ) ]
		[ COLLATE排序名 ]
		[ NULL | NOT NULL ] 
     ……
}

(1)类型名:为被修改列的新的数据类型。当要修改成数值类型时,可以使用“( 精度[ , 位数] )”分别指定数值的精度和小数位数。
(2)[NULL | NOT NULL]:表示将列设置为是否可为空,设置成NOT NULL时要注意表中该列是否有空数据。

3.表的删除

语法格式:

DROP TABLE  表名 [ , ... ]

二、实际操作

1)表的创建

创建一下表:

Major(mno ,mname)  表示专业号,专业名
Stu(sno,sname,gender,birdate,mno,memo,photo)分别表示学号,姓名,性别,出生年月有,所在的专业号,简介,相片
Cou(cno,cname,credit,ptime)表示课号,课名,学分,学时
Sc(sno,cno,grade)
stu_credit(no,sno,totalcredit),分别表示记录号,学号及当前已修学分。其中记录号为int类型,且按步长1自动增长

Major

create table major
(
	mno varchar(10) not null  primary key,
	mname nvarchar(20) not null
)

Stu

create table stu
(
	sno varchar(20) not null primary key,
	sname nvarchar(20) not null,
	gender nvarchar(10) not null check(gender='男'or gender='女'),
	birdate date ,
	mno varchar(10) not null foreign key (mno) references major(mno),
	memo nvarchar(200) default null,
	photo varchar(50) not null
)

cou

create table cou
(
	cno varchar(10) not null primary key,
	cname nvarchar(20) not null,
	credit int ,
	ptime int default 0
)

sc

create table sc
(
	sno varchar(20) not null ,
	cno varchar(10) not null,
	grade int default 0
	foreign key (sno) references stu(sno),
	foreign key (cno) references cou(cno),

)

stu_credit

identity(n,m)表示自动增长,从n开始,每次增加m

create table stu_credit
(
	no int not null primary key identity(1,1),
	sno varchar(20) not null ,
	totalcredit int default 0
)

2)表的修改

1.增加字段

stu表添加email字段

alter table stu add  email varchar(20)

stu表添加qq字段

alter table stu add qq char(10)

2.增加约束

stu表的email字段添加check约束

alter table stu add constraint email_check check(email like '^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$')

cou表的credit添加default约束

alter table cou add constraint credit_default default 0 for credit

3.删除字段

删除stu表的qq字段

alter table stu drop column qq

3)表的删除

删除stu_credit

drop table stu_credit

4)利用SSMS导出表间关系图

右击数据库关系图,选择新建数据库关系图

在这里插入图片描述

选择所要关联的表

在这里插入图片描述

在这里插入图片描述

5)完整的脚本



create table major
(
	mno varchar(10) not null  primary key,
	mname nvarchar(20) not null
)

create table stu
(
	sno varchar(20) not null primary key,
	sname nvarchar(20) not null,
	gender nvarchar(10) not null check(gender='男'or gender='女'),
	birdate date ,
	mno varchar(10) not null foreign key (mno) references major(mno),
	memo nvarchar(200) default null,
	photo varchar(50) not null
)


alter table stu add  email varchar(20)

alter table stu add constraint email_check check(email like '^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$')

alter table stu add qq char(10)
alter table stu drop column qq

create table cou
(
	cno varchar(10) not null primary key,
	cname nvarchar(20) not null,
	credit int ,
	ptime int default 0
)

--增加default约束
alter table cou add constraint credit_default default 0 for credit

create table sc
(
	sno varchar(20) not null ,
	cno varchar(10) not null,
	grade int default 0
	foreign key (sno) references stu(sno),
	foreign key (cno) references cou(cno),

)


create table stu_credit
(
	no int not null primary key identity(1,1),
	sno varchar(20) not null ,
	totalcredit int default 0
)

drop table stu_credit

发布了74 篇原创文章 · 获赞 83 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/qq_43058685/article/details/104663505