2.4 表中数据操作

2.4.1 使用T-SQL语句对数据库表中的数据进行操作

前面我们已经讲述了表结构的建立,为了建立数据库表我们在本章简要讲述了SQL Server 2008的数据类型和表的数据完整性约束。在实际应用中使用alter table命令对表的结构操作应用不强,因此不再详细介绍其对数据库表的结构和约束进行修改操作知识,这里将详细介绍对表中数据的添加、修改和删除操作知识。

先来回顾表结构的建立和表中约束的添加知识。

(1)创建数据库表的T-SQL命令语法如下:

create table  <表名>
(列名1 列的数据类型及宽度等特征,
列名2 列的数据类型及宽度等特征,
…)

(2)数据完整性。

· 域完整性(not null 、default 、check );

· 实体完整性(primary key 、unique );

· 参考完整性(foreign key )。

(3)数据完整性控制(约束)。

· 默认约束:constraint DF_表名 default <约束表达式> [for <列名>]

· 检查约束:constraint CK_表名 check(逻辑表达式)

· 主键约束:constraint PK_表名 primary key (约束列1,约束列2,…)

· 唯一性约束:constraint UQ_表名 unique (约束列)

· 外键约束:constraint FK_表名_参照表名 foreign key(约束列) references >关联表名<>外键(列)名<

2.4.2 在表设计器中添加、修改和删除数据

表设计器是SQL Server 管理平台中的一个标签页,标签页的名称与所编辑表的名称相同。标签页中含有一个列表框控件,列表框头为表的列名,在表设计器中添加、修改和删除数据操作非常简单,类似于在Excel文件中添加、修改和删除数据操作。

示例2.8

表设计器中对学生基本情况表中的数据进行插入、修改和删除操作。

具体操作步骤如下:

(1)在SQL Server管理平台窗口的表tblStudent节点上单击右键,在弹出的快捷菜单中选择“编辑前200行”或“选择前1000行”选项,如图2.26所示。

图2.26 左键快捷菜单

(2)在SQL Srver管理平台的右半部分显示“表-dbo.tblStudent”标签页,在标签页单元格中逐行、逐列输入如图2.27所示的数据。

图2.27 在单元格中输入数据

在单元格中输入数据时可能会出现警告标志,提醒此单元格中的数据尚未保存,继续在其他单元格中输入数据或按【Enter】键即可自动保存数据,如果输入的数据类型与定义表时的数据类型不一致,则将自动弹出如图2.28所示的错误提示对话框。

图2.28 错误提示对话框

(3)在表tblStudent记录最左边的灰色方块上选中所要删除的记录后,在选中记录的任意位置单击鼠标右键,弹出快捷菜单,如图2.29所示。

(4)选择“删除”选项,打开提示删除信息对话框,单击“是”按钮删除所选的一条记录。如果要删除多条记录,可按住键盘上的【Ctrl】键,用鼠标左键依次单击要删除记录左边的灰色小方块以选中多条记录,或者按住键盘上的【Shift】键,用鼠标左键单击要删除的起始记录和终止记录左边的灰色小方块可一次选中多条记录,选中记录后单击鼠标右键,在弹出的快捷菜单中选择“删除”选项即可。

图2.29 删除选择的记录

2.4.3 使用T-SQL命令insert对表中数据进行插入操作

T-SQL命令insert的语法如下:

insert [into] <表名或视图名> [<列名列表>]
values(数据列表)

使用values关键字的insert命令一次仅能插入一条记录,所以每插入一行,都要使用insert命令,并且必须提供表名及相关的列、数据等。

1.插入数据到一行的所有列

示例2.9

使用insert命令向表tblClass插入如表2.9所示的记录。

表2.9 tblClass表中的一条记录数据

使用insert命令向表tblStudent插入如表2.10所示的三条记录。

表2.10 tblStudent表中的三条记录数据

具体操作步骤如下:

(1)单击“新建查询”按钮,打开一个新的“SQLQuery”标签页,在“SQL编辑器”工具条的“可用数据库”下拉列表框中选择“StuInfo”(或可直接使用命令use StuInfo),在“文本编辑”框中输入如下insert命令:

insert into
tblClass(ClassID,ClassName,Speciality,EnrollYear,Length,ClassNum,Flag,DepartID)
values('380713',‘动漫高职’,‘2007’,‘动漫’,‘2’,3,‘在校’,‘3’)
insert into tblStudent
values(‘38071301’,‘鲁肃’,‘男’,‘1988-1-1’,‘2007-9-1’,‘012345678900001’,‘380713’)
insert into tblStudent
values(‘38071302’,‘黄盖’,‘男’,‘1987-12-2’,‘2007-9-1’,‘012345678900002’,‘380713’)
insert into tblStudent
values(‘38071303’,‘大乔’,‘女’,‘1989-3-2’,‘2007-9-1’,‘012345678900003’,‘380713’)

(2)单击“执行”按钮执行命令,执行的结果如图2.30所示。

图2.30 命令执行的结果

注意点:

· 输入项的顺序和数据类型必须与表中列的顺序和数据类型相对应,当类型不符时,如果按照不正确的顺序指定插入的值,系统将自动出现错误提示对话框。

· 不能为Identity标识列进行赋值。

· 向表中添加数据时不能违反数据完整性约束,这也是我们先在班级表(tblClass)中插入一条班级记录的原因。

2.插入数据到一行的部分列

将数据插入一行中的部分列时,必须同时给出要使用的列名序列和对应列的相应数值。

示例2.10

向表tblStudent插入如表2.11所示的一条记录。

表2.11 tblStudent表中的一条记录数据

具体操作步骤如下:

(1)在SQL Server管理平台上单击“新建查询”按钮,出现“SQLQuery”标签页。

(2)在“SQLQuery”标签页中输入如下T-SQL语句命令:

insert into tblStudent(StuID,StuName,StuSex,IdentityID,ClassID)
values(‘38071304’,‘孙则’,‘女’, ‘012345678900004’,‘380713’)

(3)单击“执行”按钮执行命令,T-SQL语句命令行执行完成。

注意点:

· values子句中的数据列表与列名列表必须对应。

· 未列出的列必须具有identity(标识列)属性、timestamp(时间戳)属性、GUID(全局唯一标识符)属性、允许空值或含有默认值属性。

3.插入含有默认值和null值数据示例2.11

向表tblStudent插入如表2.12所示的一条记录。

表2.12 tblStudent表中的一条记录数据

具体操作步骤如下:

(1)在SQL Server管理平台上单击“新建查询”按钮,出现“SQL Query”标签页。

(2)在“SQL Query”标签页中输入如下T-SQL语句命令行:

insert into tblStudent
values(‘38071305’,‘黄中’,default,null,null, ‘012345678912345’,‘380713’)

insert into tblStudent
values(‘38071305’, ‘黄中’, ‘男’,null,null, ‘012345678912345’,‘380713’)

(3)单击“执行”按钮执行命令,T-SQL语句命令行执行完成。

2.4.4 用T-SQL命令update对表中数据进行修改操作

T-SQL命令update的语法如下:

update  <表名或视图名>
set <更新的列名>=<新的表达式值>[,... n]
[where <逻辑表达式>]

示例2.12

(1)将表tblStudent中姓名(StuName)为“孙则”的记录信息修改为:StuName(姓名)改为“孙策”,StuSex(性别)改为默认值。

(2)将表tblStudent中姓名(StuName)为“黄中”的记录信息修改为:StuName(姓名)改为“黄忠”,StuSex(性别)改为“女”,Birthday(出生日期)改为空值,IdentityID(身份证号)改为“012345678900005”。

具体操作步骤如下:

(1)在SQL Server管理平台上单击“新建查询”按钮,出现“SQL Query”标签页。

(2)在“SQL Query”标签页中输入如下T-SQL语句命令:

use StuInfo
update tblStudent
set StuName=‘孙策’,StuSex=default
where StuName=‘孙则’
update tblStudent
set StuName=‘黄忠’,StuSex=‘女’,Birthday=null,IdentityID=‘012345678900005’
where StuName=‘黄中’

(3)单击“执行”按钮执行命令,T-SQL语句命令行执行完成。

注意点:

· 当省略where子句时,表示对所有满足条件的列都进行修改,否则只对满足逻辑表达式的列进行修改。

· 修改的列值由表达式指定,对于具有默认值的列可使用default命令修改为默认值。

· 对于允许为空的列可使用null命令修改为空值。

· 表达式可以是常量、表达式或变量(必须先赋值)。

示例2.13

使用insert命令向表tblScore添加如表2.13所示的6条记录,并对表中成绩做如下修改:60分以下加15分,60~69分加10分,70~79分加5分。

具体操作步骤如下:

(1)在SQL Server管理平台上单击“新建查询”按钮,出现“SQL Query”标签页。

(2)在“SQL Query”标签页中输入如下T-SQL语句命令:

表2.13 tblScore表中的6条记录数据

insert into tblScore
values(‘38071301’,’30001’,1,45)
insert into tblScore
values(‘38071301’,’30002’,2,78)
insert into tblScore
values(‘38071302’,’30001’,1,33)
insert into tblScore
values(‘38071302’,’30002’,2,56)
insert into tblScore
values(‘38071303’,’30003’,3,null)
insert into tblScore
values(‘38071304’,’30004’,4,89)
go
update tblScore
set Score=Score+5
where Score>=70 and Score<=79
update tblScore
set Score=Score+10
where Score>=60 and Score<=69
update tblScore
set Score=Score+15
where Score<60

(3)单击“执行”按钮执行命令,T-SQL语句命令行执行完成。

注意点:

· 需按高分段、低分段更新成绩。

· 成绩为null时表明该同学已选课但没有参加考试(缺考)。

2.4.5 用T-SQL命令delete对表中记录进行删除操作

T-SQL命令delete的语法如下:

delete [from] <表名或视图名>
[where <逻辑表达式>]

与insert命令一样,delete命令也可以操作单行和多行数据,并可以删除基于其他表中的数据行。

如果delete命令中不加where子句限制,则表或视图中的所有数据都将被删除。

示例2.14

删除示例2.10、示例2.11、示例2.13插入的数据。

具体操作步骤如下:

(1)在SQL Server管理平台上单击“新建查询”按钮,出现“SQL Query”标签页。

(2)在“SQL Query”标签页中输入如下T-SQL语句命令:

use StuInfo
delete from tblScore
where StuID in (‘38071301’,‘38071302’,‘38071303’,‘38071304’)
delete from tblStudent
where StuID in (‘38071301’,‘38071302’,‘38071303’,‘38071304’,‘38071305’) delete from tblClass
where ClassID=‘380713’

(3)单击“执行”按钮执行命令,T-SQL语句命令行执行完成。

注意点:

· 先删除从表中的记录,后删除主表中的记录。

· 删除带有标识列表中的所有数据,并标识列的起始值清除,需要使用如下语句:

truncate table <表名>