【SQL server速成之路】数据库和表(二)

🎉个人主页:这个昵称我想了20分钟
✨往期专栏:【速成之路】jQuery


🎖️专栏:【速成之路】SQL server
🔓往期回顾:
【SQL server速成之路】数据库基础
【SQL server速成之路】数据库和表(一)


在这里插入图片描述

🎆一、创建表

1.数据类型

  创建表的字段时,必须为其指定数据类型。字段的数据类型决定了数据的取值、范围和存储格式。字段的数据类型可以是SQL Server提供的系统数据类型,也可以是用户定义数据类型。SQL Server 2012提供了丰富的系统数据类型,将其列于下表中。
在这里插入图片描述
1.整数型
  整数包括bigintintsmallinttinyint这4类,从标识符的含义就可以看出,它 们的表示数范围逐渐缩小。下表列出了这4类整数的精度、长度和取值范围。
在这里插入图片描述
2.精确数值型
  精确数值型数据由整数部分和小数部分构成,其所有的数字都是有效位,能 够以完整的精度存储十进制数。精确数值型包括decimalnumeric两类。在SQLServer 2012中,这两种数据类型在功能上完全等价。
   声明精确数值型数据的格式是numeric | decimal(p[,s]),其中p为精度,s为小数位数,s的缺省值为0。例如指定某列为精确数值型,精度为6,小数位数为3, 即decimal(6,3),那么若向某记录的该列赋值56.342689时,该列实际存储的是56.3427。decimal和numeric可存储从 -1038 +1 到 1038 –1 的固定精度和小数位的数字数据,它们的存储长度随精度变化而变化,最少为5字节,最多为17字节。
3.浮点型
  浮点型也称近似数值型,这种类型不能提供精确表示数据的精度。当使用这种类型来存储某些数值时,有可能会损失一些精度,所以它可用于处理取值范围非常大且对精确度要求不是十分高的数值量,如一些统计量。有两种近似数值数据类型:float[(n)]real,两者通常都使用科学记数法表示数据。科学记数法的格式为:
尾数E阶数
其中,阶数必须为整数。
例如,9.8431E10,-8.932E8,3.68963E-6等都是浮点型数据。
real和float类型数据的精度、长度和表数范围列于下表中。
在这里插入图片描述
4. 货币型
  SQL Server提供了两个专门用于处理货币的数据类型:moneysmallmoney,它们用十进制数表示货币值。这两种类型数据的精度、长度和表数范围列于下表中。
在这里插入图片描述
5.位型
  SQL Server 2012中的位(bit)型只存储01,长度为一个字节。当为bit类 型数据赋0时,其值为0,而赋非0(如100)时,其值为1。
  字符串值TRUE和FALSE可以转换为以下bit 值:TRUE转换为1,FALSE转换为0。
6.字符型
  字符型数据用于存储字符串,字符串中可包括字母、数字和其它特殊符号(如#、@、&等等)。在输入字符串时,需将串中的符号用单引号或双引号括起 来,如’abc’、“Abc<Cde”。
  SQL Server字符型包括两类:固定长度(char)、可变长度(varchar)字符数据类型。
7.Unicode字符型
  Unicode是“统一字符编码标准”,用于支持国际上非英语语种的字符数据的存储和处理。SQL Server的Unicode字符型可以存储Unicode标准字符集定义的各种字符。Unicode字符型包括nchar[(n)]和nvarchar[(n)]两类。nchar是固定长度Unicode数据的数据类型,nvarchar是可变长度Unicode数据的数据类型,二者均使用UNICODE UCS-2字符集。
8.文本型
  当需要存储大量的字符数据,如较长的备注、日志信息等等,字符型数据的最长8000个字符的限制可能使它们不能满足这种应用需求,此时可使用文本型数据。
  文本型包括textntext两类,分别对应ASCII字符Unicode字符,其可以表示的最大长度和存储字节数列于下表中。
在这里插入图片描述
9.二进制型

(1)binary[(n)]:固定长度的n个字节二进制数据。N的取值范围为1~8000,默认值为1。binary(n)数据的存储长度为n+4字节。若输入的数据长度小于n,则不足部分用0填充;若输入的数据长度大于n,则多余部分被截断。
输入二进制型数据时,实际上用十六进制表示,如0xFF,0x12A0。
(2)varbinary[(n)]:n个字节变长二进制数据。n取值范围为1~8000,默认值为1。varbinary(n)数据的存储长度为实际输入数据长度+4个字节。

10.日期时间类型

(1)datetime:datetime类型可表示的日期范围从1753年1月1日到9999年12月31日的日期和时间数据,精确度为1/300s(3.33毫秒或0.00333秒),例如1 到3毫秒的值都表示为0毫秒,4到6毫秒的值都表示为4毫秒。 (2)smalldatetime:smalldatetime类型数据可表示从1900年1月1日到2079年6月6日的日期和时间,数据精确到分钟。
(3)date:date类型数据可以表示从公元元年1月1日到9999年12月31日的 日期,date类型只存储日期数据,不存储时间数据,存储长度为3个字节,表示形式与datetime数据类型的日期部分相同。
( 4 ) time : time 数据类 型 只存储时间数据 , 表 示 格式为
“hh:mm:ss[.nnnnnnn]”。hh表示小时,范围为0到23。mm表示分钟,范围为0 到59。ss表示秒数,范围为0到59。n是0 到7位数字,范围为0到9999999,表示 秒的小数部分,即微秒数。
(5)datetime2:datetime2数据类型和datetime类型一样,也用于存储日期和时间信息。
(6)datetimeoffset:datetimeoffset数据类型也用于存储日期和时间信息, 取值范围与datetime2类型相同。

11.时间戳型
  标识符是timestamp。若创建表时定义一个列的数据类型为时间戳类型,那 么每当对该表加入新行或修改已有行时,都由系统自动将一个计数器值加到该列,即将原来的时间戳值加上一个增量。
12.图像数据类型
  标识符是image,它用于存储图片、照片等。实际存储的是可变长度二进制数据,介于 0 与 231-1 (2,147,483,647) 字节之间。在SQL Server 2012中该类型是为了向下兼容而保留的数据类型。微软推荐用户使用varbinary(MAX)数据类型 来替代image类型。
13.其它数据类型
  除了上面所介绍的常用数据类型外,SQL Server 2012还提供了其它几种数据类型:cursor、sql_variant、table、uniqueidentifier、xml和hierarchyid

  • cursor:是游标数据类型,用于创建游标变量或定义存储过程的输出参数。
  • sql_variant:是一种存储SQL Server支持的各种数据类型(除text、ntext、
    image、timestamp 和 sql_variant 外)值的数据类型。sql_variant的最大长度可 达8016字节。
  • table:是用于存储结果集的数据类型,结果集可以供后续处理。
  • uniqueidentifier:是唯一标识符类型。系统将为这种类型的数据产生唯一标识值,它是一个16字节长的二进制数据。
  • xml:是用来在数据库中保存xml文档和片段的一种类型,但是此种类型的文件大小不能超过2GB。

  学生(xs)表为例,包含借书证号、姓名、性别、出生时间、专业和借书量等字段。

(1)借书证号。存放8个符号,用作主键,不能为空。确定:char(8),NOT NULL,PRIMARY KEY。
(2)姓名。考虑姓名最多可能4个汉字(超过4个汉字存放需要缩减),一个汉字占用2个字节,不能为空。确定:char(8),NOT NULL。
(3)性别。考虑男和女两种情况,可以确定以bit类型存放,用1表示男,0表示女。默认为1(因为男性占多数),这样是男性就不需要输入。本书是为了让读者通过它熟悉bit类型的操作。实际使用时也可把该字段确定为char(2)。
(4)出生时间。因为可能需要据该字段计算如年龄等,所以应该确定为Date类型。
(5)专业。考虑最多可能6个汉字,确定:char(12)。
(6)借书量。考虑该字段内容需要数值增减运算,可确定为int类型。当然也可为smallint类型和tinyint类型,因为借书量一般不超过255本。
(7)照片。为了在借书时核对照片,也可在xs表中增加该字段。因为照片数据量大而且不同人差别较大,为了节省存储空间,确定:varbinary(MAX),NULL。NULL表示有人可以没有照片。

  这样图书管理数据库xsbook中学生表(xs)如下表所示,其余类似。
在这里插入图片描述

2.界面方式操作表

1.创建表
  以下是通过“对象资源管理器”创建表xs的操作步骤:

  (1)启动“SQL Server Management Studio”在→“对象资源管理器”中,
展开“数据库”→右击“xsbook”数据库菜单下的“表”选项,在弹出的快捷菜
单中,选择“新建表(N)…”菜单项,打开“表设计器”窗口。
   (2)在“表设计器”窗口中,根据已经设计好的xs的表结构分别输入或选择各列的名称、数据类型、是否允许为空等属性。根据需要,可以在列属性表格填入相应内容。如图所示。
在这里插入图片描述
  (3)在“借书证号”列上右击鼠标,选择“设置主键”菜单项,选择“设为
主键”选项,如图所示。
在这里插入图片描述
  (4)在列属性窗口中的“默认值和绑定”和“说明”项中分别填写各列的默认值和说明。
  (5)在表的各列的属性均编辑完成后,单击工具栏中的“ ”按钮,出现 “选择表名”对话框。在“选择表名”对话框中输入表名“xs”,单击“确定”按钮即可创建xs表。在“对象资源管理器”窗口中可以找到新创建的xs表,如图所示。
在这里插入图片描述
2.修改表结构
  在创建了一个表之后,使用过程中可能需要对表结构进行修改。对一个已存在的表可以进行的修改操作包括:更改表名、增加列、删除列、修改已有列的属性(列名、数据类型、是否为空值等)。
  在SQL Server 2012中,当用户使用界面方式修改表的结构(如添加列、修 改列的数据类型等)时,必须要删除原来的表,再重新创建新表才能完成表的更 改。如果强行更改会弹出如图所示的对话框。
在这里插入图片描述
(1)更改表名
  SQL Server中允许改变一个表的名字,但当表名改变后,与此相关的某些对象如视图,以及通过表名与表相关的存储过程将无效。因此,一般不要更改一个已有的表名,特别是在其上定义了视图或建立了相关的表。
  例如,将前述所创建的xs表的表名改为student,更改表名的操作步骤如下:在“对象资源管理器”中选择需要更名的表xs,右击鼠标,在弹出的快捷菜单上选择“重命名”菜单项,输入新的表名student,按下回车键即可更改表名。

(2)增加列
  当原来所创建的表中需要增加项目时,就要向表中增加字段。例如若在表中需要登记学生是否有逾期未还的书籍等,就要用到增加字段的操作。以向表xs中添加一个“逾期未还书数”字段为例说明向表中添加新字段的操作过程,“逾期未还书数”字段为微整型tinyint,允许为空值。

(3)删除列
  在表设计器窗口中需删除的列(例如xs表中删除“逾期未还书数”列),右击鼠标,在弹出的快捷菜单上选择“删除列”菜单项,该列即被删除。

(4)修改列
  表中尚未有记录值时,可以修改表结构,如更改列名、列的数据类型、长度和是否允许空值等属性。但当表中有了记录后,建议不要轻易改变表结构,特别不要改变数据类型,以免产生错误。

① 具有以下特性的列不能被修改:

  • 数据类型为timestamp的列
  • 计算列
  • 全局标识符
  • 用于索引的列(但若用于索引的列为varchar、nvarchar或varbinary数据类- 型时,可以增加列的长度)
  • 用于主键或外键约束的列
  • 用于CHECK或UNIQUE约束的列
  • 关联有默认值的列

② 当改变列的数据类型时,要求满足下列条件:

  • 原数据类型必须能够转换为新数据类型。
  • 新类型不能为timestamp类型。

3.删除表
  当一个数据表不再需要时,可将它删除。删除一个表时,表的定义、表中的所有数据以及表的索引、触发器、约束等均被删除掉,因此执行删除表操作时一定要格外小心。注意,不能删除系统表和有外键约束所参照的表。
设需将xsbook数据库中的表xs删除,操作过程为:
  在“对象资源管理器”中展开“数据库”→“xsbook”→“表”→选择要删除的表dbo.xs,右击鼠标,在弹出的快捷菜单上选择“删除”菜单项。系统弹出“删 除对象”窗口。单击“确定”按钮,即可删除选xs表。

3.命令方式操作表

1.创建表
  下面通过例子开始学习如何使用CREATE TABLE语句创建表。
在xsbook数据库中创建表xs的T-SQL语句如下:

USE xsbook
GO
CREATE TABLE xs
( 
借书证号 char(8) NOT NULL PRIMARY KEY,
姓名 char(8) NOT NULL,
性别 bit NOT NULL DEFAULT 1,
出生时间 date NOT NULL,
专业 char(12) NOT NULL,
借书量 int NOT NULL DEFAULT 0,
照片 varbinary(MAX) NULL
)

  注:1.先使用USE xsbook语句将 xsbook指定为当前数据库,然后在xsbook中创建表;
  2. 创建表要设置列名、数据类型,还有主键、空和非空、默认值等列属性在T-SQL中,用于创建数据表的语句是CREATE TABLE,该语句的基本语法格式为:

CREATE TABLE [ database_name . [ schema_name ] . | schema_name . ] table_name 
( 
{ <column_definition> /*列的定义*/
| <列名> AS <表达式> [PERSISTED [NOT NULL]] /*定义计算列*/
}
[ <table_constraint> ] [ ,...n ] /*指定表的约束*/
) 
[ ON { partition_scheme_name ( partition_column_name ) | filegroup | "default" } ]
/*指定分区方案和存储表的文件组*/
[ { TEXTIMAGE_ON { filegroup | "default" } ] /*指定存储text、image等类型数据的文
件组*/
[ ; ]

说明:
(1)database_name是数据库名,schema_name是新表所属架构的名称,
table_name是表名,表的标识按照对象命名规则。
(2)列的定义格式如下:

<column_definition> ::=
<列名> <数据类型> /*指定列名、类型*/
[ NULL | NOT NULL ] /*指定是否为空*/
[ 
[ CONSTRAINT <约束名> ]
DEFAULT <默认值> ] /*指定默认值*/
| [ IDENTITY [ ( seed ,increment ) ] /*指定列为标识列*/
]
[ <column_constraint> [ ...n ] ] /*指定列的约束*/

(3)<列名> AS <表达式> [PERSISTED [NOT NULL]]:用于定义计算字段,计算字段是由同一表中的其它字段通过表达式计算得到。
(4)<table_constraint>:表的完整性约束。
(5)ON 子句:filegroup | "default"指定存储表的文件组。
(6)TEXTIMAGE_ON {filegroup | “default”}:TEXTIMAGE_ON指定存储
text、ntext、image、xml、varchar(MAX)、nvarchar(MAX)、varbinary(MAX)类 型数据的文件组。

【例】 在xsbook数据库中创建图书表book,创建表book的T-SQL语句如
下:

USE xsbook
GO
CREATE TABLE book
( 
ISBN char(18) NOT NULL PRIMARY KEY,
书名 char(40) NOT NULL,
作者 char(16) NOT NULL,
出版社 char(30) NOT NULL,
价格 float NOT NULL,
复本量 int NOT NULL,
库存量 int NOT NULL
)

【例】 创建一个课程成绩表,包含课程号、课程名、总成绩、人数和平
均成绩,其中平均成绩=总成绩/人数。

CREATE TABLE kccj
( 课程号 char(3) PRIMARY KEY,
课程名 char(10) NOT NULL,
总成绩 real NOT NULL,
人数 int NOT NULL,
平均成绩 AS 总成绩/人数 PERSISTED
)

  注:平均成绩为计算字段,由同一表中的其它字段通过表达式计算得到,在 插入或修改数据时不能对计算列赋值, PERSISTED 为可选,如没有
PERSISTED 关键字,则在计算列上不能添加PRIMARY KEY 、UNIQUE、
DEFALULT等约束条件。

2.修改表结构
T-SQL中对表进行修改的语句是ALTER TABLE,该语句基本语法格式为:

ALTER TABLE <表名> {
ALTER COLUMN <列名> 
{ <新数据类型> [ (precision,[,scale])] [NULL | NOT NULL]
} /*修改已有字段的属性*/
| ADD {[<colume_definition>]}[,…n] /*增加新字段*/
| DROP {[CONSTRAINT] constraint_name | COLUMN column}[,…n] 
/*删除字段*/
}

说明:
(1)ALTER COLUMN子句:修改表中指定列的属性。
(2)ADD子句:向表中增加新字段,新字段的定义方法与CREATE TABLE
语句中定义字段的方法相同。
(3)DROP子句:从表中删除字段或约束,COLUMN参数中指定的是被删除的字段名,constraint_name是被删除的约束名。
3.删除表
   T-SQL中对表进行删除的语句是DROP TABLE,该语句的语法格式为:

DROP TABLE <表名>

例如,要删除表kccj,使用的T-SQL语句为:

DROP TABLE kccj

4.创建分区表

1.创建分区函数

  创建分区函数使用CREATE PARTITION FUNCTION命令,语法格式如下:

CREATE PARTITION FUNCTION <分区函数名> ( <数据类型> )
AS RANGE [ LEFT | RIGHT ] 
FOR VALUES ( [ boundary_value [ ,...n ] ] ) 
[ ; ]

说明:
(1)AS RANGE:指定分区边界值boundary_value属于每个边界值间隔的哪 一侧(左侧还是右侧),默认left。
(2)FOR VALUES:为每个分区指定边界值,边界值不超过999。

2.创建分区方案

  每个分区必须映射到一个文件组。一般情况下,文件组数最好与分区数相同,并且这些文件组通常位于不同的磁盘上。一个分区方案只可以使用一个分区函数,而一个分区函数可以用于多个分区方案中。
CREATE PARTITION SCHEME命令的语法格式如下:

CREATE PARTITION SCHEME <分区方案名>
AS PARTITION <分区函数名>
[ ALL ] TO ( { file_group_name | [ PRIMARY ] } [ ,...n ] )
[ ; ]

说明:
(1)ALL:指定所有分区都映射到在file_group_name 中提供的文件组,或映 射到主文件组(如果指定了[PRIMARY])。指定了all只能指定一个文件组。
(2)file_group_name:指定用来持有由分区函数指定的分区的文件组的名称。
3.使用分区方案创建分区表

  分区函数和分区方案创建以后就可以创建分区表了。创建分区表使用CREATE TABLE语句,只要在ON关键字后指定分区方案和分区列即可。

🎆二、操作表数据

1.界面方式操作表数据

1.插入记录
  插入记录将新记录添加在表尾,可以向表中插入多条记录。
将光标定位到当前表尾的下一行,然后逐列输入列的值。每输入完一列的值,按回车键,光标将自动跳到下一列,便可编辑该列。若当前列是表的最后一列,则该列编辑完后按下回车键,光标将自动跳到下一行的第一列,此时上一行输入的数据已经保存,可以增加下一行。
  若表的某列不允许为空值,则必须为该列输入值,例如表xs的借书证号、姓名。若列允许为空值,那么,不输入该列值,则在表格中将显示“NULL”字样, 如xs表的照片列。
2.删除记录
  当表中的某些记录不再需要时,要将其删除。在“对象资源管理器”中删除记录的方法是:在“表数据的窗口”中定位需被删除的记录行,单击该行最前面 的黑色箭头处选择全行,右击鼠标,选择“删除(D)”菜单项。
3.修改记录
  在“操作表数据的窗口”中修改记录数据的方法是,先定位被修改的记录字段,然后对该字段值进行修改,修改之后将光标移到下一行即可保存修改的内容。

3.命令方式操作表数据

1.插入表记录
  T-SQL中向表中插入数据的语句是INSERT。INSERT语句最基本的格式为:

INSERT table_name
VALUES ( constant1, constant2,)

  该语句的功能是向由table_name指定的表中加入由VALUES指定的各列值的行。

【例】 向xsbook数据库的表xs1中插入如下的一行:
131246 周涛 1 “1995-9-10” 英语 0
使用如下的T-SQL语句:

USE xsbook
INSERT INTO xs1
VALUES('20000003','周涛','英语',1,'1995-9-10',0,NULL)

  右击该表选择“编辑前200行”菜单项,在数据窗口中可以发现表中已经增加了借书证号为“131246”这一行。
下面给出INSERT语句的完整语法格式:

[ WITH <common_table_expression> [ ,...n ] ] /*指定临时结果集,在SELECT语句中介
绍*/
INSERT [ TOP ( expression ) [ PERCENT ] ] 
[ INTO ] 
{ <表名> 
| <视图名> 
}{
[ ( column_list ) ] /*列列表*/
{ VALUES ( ( { DEFAULT | NULL | expression } [ ,...n ] ) [ ,...n ] )/*指定列值的value子 句*/
| derived_table /*结果集*/
| execute_statement /*有效的EXECTUTE语句*/
| DEFAULT VALUES /*强制新行包含为每个列定义的默认值*/
} 
}

  在INSERT的语法格式中:
  (1)column_list:包含了新插入数据行的各列的名称。如果只给表的部分列插入数据时,需要用column_list指出这些列。例如,当加入到表中的记录的某些列为空值或为缺省值时,可以在INSERT语句中给出的列表中省略这些列。没有在column_list中指出的列,它们的值根据默认值或列属性来确定,原则是:

  • 具有IDENTITY属性的列,其值由系统根据seed和increment值自动计算得到。
  • 具有默认值的列,其值为默认值。
  • 没有默认值的列,若允许为空值,则其值为空值。若不允许为空值,则出错。
  • 类型为timestamp的列,系统自动赋值。
  • 如果是计算列,则使用计算值。

  (2)VALUES子句: 包含各列需要插入的数据清单,数据的顺序要与列的顺序相对应。若省略colume_list,则VALUES子句给出每一列(除IDENTITY属性和timestamp类型以外的列)的值。VALUES子句中的值可有三种:

  • DEFAULT:指定为该列的默认值。这要求定义表时必须指定该列的默认值。
  • NULL:指定该列为空值。
  • expression:可以是一个常量、变量或一个表达式,其值的数据类型要与列的数据类型一致。
    注意表达式中不能有SELECT及EXECUTE语句。

  (3)derived_table:是一个由SELECT语句查询所得到的结果集。利用该参数,可把一个表中的部分数据插入到另一个表中。结果集中每行数据的字段数、字段的数据类型要与被操作的表完全一致。使用结果集向表中插入数据时可以使用TOP ( expression ) [ PERCENT ]选项,这个选项可以在结果集中选择指定的行数或占指定百分比数的行插入表中。expression可以是行数或行的百分比,使用百分比时要加PERCENT关键字。
  (4)DEFAULT VALUE:该关键字说明向当前表中所有列均插入其默认值。
此时,要求所有列均定义了默认值。

【例】 设已用如下的语句建立了表test。

CREATE TABLE test
( 
姓名 char(20) NOT NULL,
专业 varchar(30) NOT NULL DEFAULT '计算机',
年级 tinyint NOT NULL
)

那么,用如下的INSERT语句向test表中插入一条记录:

INSERT INTO test(姓名,年级) VALUES('王林',3)

此时,插入到test表中的这条记录为:王林 计算机 3
   注:1. 指定列名情况下,除了默认值和允许为空的列以外,其他列均要包含在内,values值的排序要与前面列名一一对应;
   2. 不指定列名情况下, values 必须包含所有字段值,且排序要与列的顺序一一对应。

【例】 向表xs1中插入xs表的所有数据。

INSERT INTO xs1
SELECT *
FROM xs

  上面这条INSERT语句的功能是:将xs表中所有记录的值插入到xs1表的各行中。
可用如下的SELECT语句进行查询看插入结果:

SELECT *
FROM xs1

  在执行INSERT语句时,如果插入的数据与约束或规则的要求产生冲突或值的数据类型与列的数据类型不匹配,那么INSERT执行失败。

2.删除表记录
  在T-SQL语言中,删除数据可以使用DELETE语句或TRANCATE TABLE语句来实现。
(1)用DELETE语句删除数据
DELETE的功能是从表中删除行,其最基本的语法格式为:

DELETE [FROM] { <表名> | <视图名> }
[WHERE <search_condition>]

  该语句的功能为从指定的表或视图中删除满足<search_condition>条件的行,若省略该条件,表示删除所有行。

  【例】 将xs1表中借书量为0的行删除。使用如下T-SQL语句:

USE xsbook
DELETE FROM xs1
WHERE 借书量=0

  下面给出DELETE语句的完整语法格式:

[ WITH <common_table_expression> [ ,...n ] ] /*指定临时结果集,在SELECT语句中
介绍*/
DELETE [ TOP ( expression ) [ PERCENT ] ] 
[ FROM ] 
{ <表名> /*从表中删除数据*/
| <视图名> /*从视图删除数据*/
}
[ FROM <table_source> [ ,...n ] ] /*从table_source删除数据*/
[ WHERE { <search_condition> /*指定条件*/
| { [ CURRENT OF { { [ GLOBAL ] cursor_name } | cursor_variable_name }]}
/*有关游标的说明,见第4章*/
}] 
[; ]

  (2)使用TRUNCATE TABLE语句删除表数据
  使用TRUNCATE TABLE语句将删除指定表中的所有数据,因此也称其为清 除表数据语句,其语法格式为:

TRUNCATE TABLE <表名>

  由于TRUNCATE TABLE语句将删除表中的所有数据,且无法恢复,因此使用时必须十分当心。

3.修改表记录
  T-SQL中用于修改表数据行的语句是UPDATE。UPDATE语句的最基本格式为:

UPDATE { <表名> | <视图名> }
SET column_name = {expression | DEFAULT | NULL } [,…n]
[WHERE <search_condition>]

  该语句的功能是:将指定的表或视图中满足<search_condition>条件的记录中由SET指定的各列的列值设置为SET指定的新值,若不使用WHERE子句,则更新所有记录的指定列值。

  【例】 将xsbook数据库的xs1表中借书证号为“131246”的记录的“专 业”字段值改为“计算机”,使用如下的T-SQL语句:

USE xsbook
UPDATE xs1
SET 专业 = '计算机'
WHERE 借书证号 = '131246'

  查看表数据以后可以发现表中借书证号为“131246”的行的专业值已被修改,如图所示。
在这里插入图片描述
  下面给出UPDATE语句的完整语法格式:

[ WITH <common_table_expression> [...n] ]
UPDATE [ TOP ( expression ) [ PERCENT ] ] 
{ <表名> /*修改表数据*/
| <视图名> /*修改视图数据*/
}
SET /*赋予新值*/
{ column_name = { expression | DEFAULT | NULL } /*为列重新指定值*/
| column_name { .WRITE ( expression , @Offset , @Length ) }
| @variable = expression /*指定变量的新值*/
| @variable = column = expression /*指定列和变量的新值*/
| column_name { += | -= | *= | /= | %= | &= | ^= | |= } expression
| @variable { += | -= | *= | /= | %= | &= | ^= | |= } expression
| @variable = column { += | -= | *= | /= | %= | &= | ^= | |= } expression
} [ ,...n ] 
[ FROM{ <table_source> } [ ,...n ] ] 
[ WHERE { <search_condition> /*指定条件*/
| { [ CURRENT OF /*有关游标的说明*/
{ { [ GLOBAL ] cursor_name } | cursor_variable_name } ]}
} 
] [ ; ]

4.同步两个表的记录
  在SQL Server 2012中,使用MERGE语句可以根据与源表联接的结果,对目标表执行插入、更新或删除操作。例如,根据在一个表中找到的差异在另一个表中插入、更新或删除行,可以对两个表进行信息同步。
语法格式:

MERGE
[ INTO ] target_table [ [ AS ] table_alias ]
USING <table_source>
ON <merge_search_condition>
[ WHEN MATCHED [ AND <search_condition> ]
THEN { UPDATE SET <set_clause> | DELETE } ] [ WHEN NOT MATCHED [ BY TARGET ] [ AND < search_condition> ]
THEN INSERT [ ( column_list ) ] { VALUES ( values_list ) |
DEFAULT VALUES } ] [ WHEN NOT MATCHED BY SOURCE [ AND <search_condition> ]
THEN { UPDATE SET <set_clause> | DELETE }]

说明:

(1)target_table:指定要更新数据的表或视图。
(2)USING子句:指定用于更新的源数据表。
(3)ON子句:用于指定在<table_source>与target_table进行联接时所遵循的条件。
(4)WHEN MATCHED子句:这个子句表示在应用了ON子句的条件后,表target_table存在与<table_source>匹配的行时,对这些行在THEN子句中指定修改
或删除的操作。
(5)WHEN NOT MATCHED BY TARGET子句:WHEN NOT MATCH BY TARGET子句指定对于<table_source>中满足了ON子句中条件的每一行,如果该行与target_table表中的行不匹配,则向target_table中插入这行数据。
(6)WHEN NOT MATCHED BY SOURCE子句:WHEN NOT MATCHED BY SOURCE子句指定对于target_table表中与<table_source>表应用了ON子句中条件后返回的行不匹配但满足其他搜索条件的所有行,根据THEN关键字后的子句进行修改或删除。

在这里插入图片描述

  • 43
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 20
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

这个昵称我想了20分钟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值