- SQL Server 2016从入门到精通(视频教学超值版)
- 王英英
- 5555字
- 2021-03-24 12:41:11
3.3 管理数据表
数据表创建完成之后,可以根据需要改变表中已经定义的许多选项。用户除了可以对字段进行增加、删除和修改操作,以及更改表的名称和所属架构外,还可以删除和修改表中的约束,创建或修改完成之后可以查看表结构。表不需要时可以删除。本节将介绍这些管理数据表的操作。
3.3.1 修改表字段
修改表字段包含增加一个新字段、删除表中原有的一个字段以及修改字段的数据类型。SQL Server 2016提供了两种修改表字段的方法,分别是使用对象资源管理器和使用T-SQL语句修改数据表。
1.增加字段
增加字段的常见方法有以下两种。
(1)使用对象资源管理器增加字段
例如,在authors数据表中,增加一个新的字段,名称为auth_phone,数据类型为varchar(24),允许空值,在authors表上右击,在弹出的快捷菜单中选择【设计】菜单命令,如图3-14所示。
图3-14 选择【设计】菜单命令
与前面介绍的创建数据表的过程相同,在弹出的表设计窗口中,添加新字段auth_phone,并设置字段数据类型为varchar(24),允许空值,如图3-15所示。
图3-15 增加字段auth_phone
修改完成之后,保存结果,增加新字段成功。
提示
如果在保存的过程中,无法保存增加的表字段,则弹出警告对话框,如图3-16所示。
图3-16 警告对话框
解决方案的具体操作步骤如下。
选择【工具】|【选项】菜单命令,如图3-17所示。
图3-17 选择【选项】菜单命令
打开【选项】对话框,选择【设计器】选项,在右侧面板中取消【阻止保存要求重新创建表的更改】复选框,单击【确定】按钮即可,如图3-18所示。
图3-18 【选项】对话框
(2)使用T-SQL语句添加字段
在T-SQL中使用ALTER TABLE语句在数据表中增加字段,基本语法格式如下:
其中,各参数含义如下。
- table_name:新增加字段的数据表名称。
- column_name:新增加的字段的名称。
- type_name:新增加字段的数据类型。
其他参数的含义,用户可以参考前面的内容。
【例3.3】在authors表中添加名称为auth_note的新字段,字段数据类型为varchar(100),允许空值,输入语句如下。
新建一个当前连接查询,在查询编辑器中输入上面的代码并执行,执行之后,用户可以重新打开authors的表设计窗口,可以看到,现在的表结构如图3-19所示。
图3-19 添加字段auth_note
从图3-19可以看到,成功添加了一个新的字段,数据类型为varchar(100),【允许Null值】选项也处于选中状态。
2.修改字段
修改字段的常见方法有以下两种。
(1)使用对象资源管理器修改字段
修改字段可以改变字段的属性,例如字段的数据类型、是否允许空值等。修改数据类型时,在数据表设计窗口中,选择要修改的字段名称,选择该行的【数据类型】,在下拉列表框中选择更改后的数据类型;选中或取消【允许Null值】列的选项卡即可。例如,将auth_phone字段的数据类型由varchar(24),修改为varchar(50),不允许空值,如图3-20所示。
图3-20 修改字段
(2)使用T-SQL语句在数据表中修改字段
在T-SQL中使用ALTER TABLE语句在数据表中修改字段,基本语法格式如下:
其中,各参数的含义如下。
- table_name:要修改字段的数据表名称。
- column_name:要修改的字段的名称。
- new_type_name:要修改的字段的新数据类型。
其他参数的含义,用户可以参考前面的内容。
【例3.4】在authors表中修改名称为auth_phone的字段,将数据类型改为varchar(15),输入语句如下。
新建一个当前连接查询,在查询编辑器中输入上面的代码并执行,执行之后,用户可以重新打开authors的表设计窗口,可以看到,现在的表结构如图3-21所示。
图3-21 authors表结构
3.删除字段
删除字段的常用方法有以下两种。
(1)使用对象资源管理器删除字段
在表的设计窗口中,每次可以删除表中的一个字段,操作过程比较简单,与前面增加表字段相似,打开表设计窗口之后,选中要删除的字段,右击,在弹出的快捷菜单中选择【删除列】菜单命令。例如,这里删除authors表中的auth_phone字段,如图3-22所示。
删除字段操作成功后,效果如图3-23所示。
图3-22 【删除列】菜单命令
图3-23 删除字段后的效果
(2)使用T-SQL语句删除数据表中的字段
在T-SQL中使用ALTER TABLE语句删除数据表中的字段,基本语法格式如下:
其中,各参数的含义如下。
- table_name:删除字段所在数据表的名称。
- column_name:要删除的字段的名称。
【例3.5】删除authors表中的auth_phone字段,输入语句如下。
在查询编辑器中输入上面的代码并执行,执行成功之后,auth_phone字段将被删除。
3.3.2 修改表约束
约束是用来保证数据库完整性的一种方法,设计表时,需要定义列的有效值并通过限制字段中数据、记录中数据和表之间的数据来保证数据的完整性,约束是独立于表结构的,它作为数据库定义的一部分在创建表时声明,可以通过对象资源管理器或者ALTER TABLE语句添加或删除。
SQL Server 2016中有5种约束,分别是:主键约束(primary key constraint)、唯一性约束(unique constraint)、检查约束(check constraint)、默认约束(default constraint)和外键约束(foreign key constraint)。
1.主键约束
主键约束可以在表中定义一个主键值,它可以唯一确定表中每一条记录,也是最重要的一种约束。每个表中只能有一个PRIMARY KEY约束,并且PRIMARY KEY约束的列不能接受空值。如果主键约束定义在不止一列上,则一列中的值可以重复,但主键约束定义中,所有列的组合值必须唯一。
2.唯一性约束
唯一性约束(UNIQUE)确保在非主键列中不输入重复的值,用于指定一个或者多个列的组合值具有唯一性,以防止在列中输入重复的值。可以对一个表定义多个UNIQUE约束,但只能定义一个PRIMARY KEY约束。UNIQUE约束允许NULL值,但是当和参与UNIQUE约束的任何值一起使用时,每列只允许一个空值。
因此,当表中已经有一个主键值时,就可以使用唯一性约束。当使用唯一性约束时,需要考虑以下几个因素:
(1)使用唯一性约束的字段允许为空值。
(2)一个表中可以允许有多个唯一性约束。
(3)可以把唯一性约束定义在多个字段上。
(4)唯一性约束用于强制在指定字段上创建一个唯一性索引。
(5)默认情况下,创建的索引类型为非聚集索引。
3.检查约束
检查约束对输入列或者整个表中的值设置检查条件,以限制输入值,保证数据库数据的完整性。检查约束通过数据的逻辑表达式确定有效值。例如,定义一个age年龄字段,可以通过创建CHECK约束条件,将age列中值的范围限制为从0到150之间的数据。这将防止输入的年龄值超出正常的年龄范围。可以通过任何基于逻辑运算符返回TRUE或FALSE的逻辑(布尔)表达式创建CHECK约束。对于上面的示例,逻辑表达式为:age >= 0 AND age <= 150。
当使用检查约束时,应考虑和注意以下几点:
(1)一个列级检查约束只能与限制的字段有关;一个表级检查约束只能与限制的表中字段有关。
(2)一个表中可以定义多个检查约束。
(3)每个CREATE TABLE语句中的每个字段只能定义一个检查约束。
(4)在多个字段上定义检查约束,则必须将检查约束定义为表级约束。
(5)当执行INSERT语句或者UPDATE语句时,检查约束将验证数据。
(6)检查约束中不能包含子查询。
4.默认约束
默认约束指定在插入操作中如果没有提供输入值时,系统自动指定插入值,即使该值是NULL。当必须向表中加载一行数据但不知道某一列的值,或该值尚不存在,此时可以使用默认值约束。默认约束可以包括常量、函数、不带变元的内建函数或者空值。使用默认约束时,应注意以下几点:
(1)每个字段只能定义一个默认约束。
(2)如果定义的默认值长于其对应字段的允许长度,则输入到表中的默认值将被截断。
(3)不能加入到带有IDENTITY属性或者数据类型为timestamp的字段上。
(4)如果字段定义为用户定义的数据类型,而且有一个默认绑定到这个数据类型上,则不允许该字段有默认约束。
5.外键约束
外键约束用于强制参照完整性,提供单个字段或者多个字段的参照完整性。定义时,该约束参考同一个表或者另外一个表中主键约束字段或者唯一性约束字段,而且外键表中的字段数目和每个字段指定的数据类型都必须和REFERENCES表中的字段相匹配。当使用外键约束时,应考虑以下几个因素:
(1)外键约束提供了字段参照完整性。
(2)外键从句中的字段数目和每个字段指定的数据类型都必须和REFERENCES从句中的字段相匹配。
(3)外键约束不能自动创建索引,需要用户手动创建。
(4)用户想要修改外键约束的数据,必须只使用REFERENCES从句,不能使用外键子句。
(5)一个表中最多可以有31个外键约束。
(6)在临时表中,不能使用外键约束。
(7)主键和外键的数据类型必须严格匹配。
讲解了5种约束之后,下文将对增加和删除约束分别进行介绍。
1.增加约束
增加约束有两种方法,可以分别使用对象资源管理器和T-SQL语句来创建。这里以member表为例,介绍增加PRIMARY KEY和UNIQUE约束的过程。
(1)使用对象资源管理器
使用对象资源管理器创建PRIMARY KEY约束,对test数据库中的member表中的id字段建立PRIMARY KEY,具体操作步骤如下。
在【对象资源管理器】窗口中选择member表节点右击,在弹出的快捷菜单中选择【设计】菜单命令,打开表设计窗口。在表设计窗口中选择【id】字段对应的行,右击并在弹出的快捷菜单中选择【设置主键】菜单命令,如图3-24所示。
图3-24 选择【设置主键】菜单命令
设置完成之后,id所在行会有一个钥匙图标,表示这是主键列,如图3-25所示。
如果主键由多列组成,可以选中某一列的同时,按Ctrl键选择多行,然后右击并在弹出的快捷菜单中选择【主键】菜单命令,即可将多列设为主键,如图3-26所示。
图3-25 设置【主键】列
图3-26 设置多列为主键
使用对象资源管理器创建UNIQUE约束,具体操作步骤如下。
在【对象资源管理器】窗口中选择member表节点,右击并在弹出快捷菜单中选择【设计】菜单命令,打开表设计窗口。右击唯一性约束的行FirstName,在弹出的快捷菜单中选择【索引/键】菜单命令,如图3-27所示。
打开【索引/键】对话框,在该窗口中显示了刚才通过表设计窗口添加了一个名称为PK_member_1的主键约束,如图3-28所示。
图3-27 选择【索引/键】菜单命令
图3-28 【索引/键】对话框1
单击【添加】按钮,添加一个新的唯一性约束,然后单击【列】右侧的按钮,如图3-29所示。
打开【索引列】对话框,在【列名】中列出了member表中所有的字段,选择添加唯一性约束的字段FirstName,排序顺序使用升序,然后单击【确定】按钮,如图3-30所示。
图3-29 添加约束
图3-30 【索引列】对话框
返回到【索引/键】对话框,即可看到修改后的索引,在【名称】文本框中输入新的名称为firstname1,设置完成之后,单击【关闭】按钮,如图3-31所示。
图3-31 【索引/键】对话框2
(2)使用T-SQL语句添加PRIMARY KEY约束和UNIQUE约束
T-SQL语句中可以在创建表的同时添加约束,其基本语法格式如下:
constraint_name为用户定义的要创建的约束的名称。
【例3.6】定义表table_emp,并将表中e_id字段设为主键列,输入语句如下。
执行完成之后,刷新test数据库中的表,可以看到新建立的名称为table_emp的数据表,查看该表的设计窗口,如图3-32所示。
图3-32 创建带主键约束的表table_emp
从图3-32中可以看到,T-SQL语句成功地在e_id字段建立了一个主键约束,用户可以选择工具栏上的【管理索引和键】命令,在【索引和键】窗口中可以看到表中的两个索引键,分别为以PK_开头的表示主键约束和以UQ_开头的表示唯一性约束的两个键,以及这两个键所在的表字段信息。
2.删除约束
当不再需要使用约束的时候,可以将其删除,删除约束的方法有两种,分别是使用对象资源管理器删除和在修改表时使用T-SQL语句删除。
(1)使用对象资源管理器删除PRIMARY KEY和UNIQUE约束
在对象资源管理器中删除主键约束或者唯一性约束,步骤如下。
打开table_emp数据表的表结构设计窗口。
单击工具栏上的【管理索引和键】按钮或者右击,选择【索引/键】菜单命令,打开【索引/键】窗口。
选择要删除的索引或键,单击【删除】按钮。用户在这里可以选择删除table_emp表中的主键索引或者是唯一性索引约束。
删除完成之后,单击【关闭】按钮,删除约束操作成功。
(2)使用ALTER TABLE语句删除PRIMARY KEY和UNIQUE约束
ALTER TABLE语句用来对数据表进行操作,可以在修改数据表的时候删除表中的约束,其删除约束的基本语法格式如下:
- table_name:约束所在的数据表名称。
- constraint_name:需要删除的约束名称,n在这里表示可以同时删除多个不同名称的约束。
【例3.7】删除member表中的主键约束和唯一性约束,T-SQL语句如下。
PK_member和UQ_firstname分别为member表中两种约束的名称,用户可以在【索引/键】窗口中查看表中的所有索引和键的名称。
3.3.3 查看表中有关信息
数据表创建之后,可能不同的用户需要查看表的有关信息,比如表的结构、表的属性、表中存储的数据以及与其他数据对象之间的依赖关系等。
1.查看表的结构
打开数据库test,在需要查看的表上右击,在弹出的快捷菜单中选择【设计】菜单命令,打开表设计窗口,在使用对象资源管理器创建数据表时,用户已经在前面的内容中看到过这个窗口,该窗口中显示了表定义中各个字段的名称、数据类型、是否允许空值以及主键唯一性约束等信息。另外,用户可以进行修改该页中的属性操作,最后单击【保存】按钮即可保存修改的操作,如图3-33所示。
图3-33 表设计窗口
2.查看表的相关信息
在需要查看的表member上右击,并在弹出的快捷菜单中选择【属性】菜单命令,打开【表属性】窗口,在【常规】选项卡中显示了该表所在的数据库名称、当前连接到服务器的用户名称、表的创建时间和架构等属性,这里显示的属性不能修改,如图3-34所示。
图3-34 【表属性】窗口
3.查看表中存储的数据
在member表上右击,在弹出的快捷菜单中选择【编辑前200行】菜单命令,将显示member表中的前200条记录,并允许用户编辑这些数据。如果记录少于200行,则有多少行就显示多少行,如图3-35所示。
图3-35 【编辑前200行】命令显示结果
4.查看表与其他数据对象的依赖关系
在要查看的表上右击,在弹出的快捷菜单中选择【查看依赖关系】菜单命令,打开【对象依赖关系】窗口,该窗口显示了该表和其他数据对象的依赖关系。如果某个存储过程中使用了该表,该表的主键是被其他表的外键约束所依赖或者该表依赖其他数据对象时,这里会列出相关的信息,如图3-36所示。
图3-36 【对象依赖关系】窗口
3.3.4 删除表
当数据表不再使用时,可以将其删除。删除数据表有两种方法,分别是使用对象资源管理器和使用DROP TABLE语句删除。
1.使用对象资源管理器删除数据表
在对象资源管理器中,展开指定的数据库和表,右击需要删除的表,从弹出的快捷菜单中选择【删除】菜单命令,在弹出的【删除对象】窗口中单击【确定】按钮,即可删除表,如图3-37所示。
图3-37 【删除对象】窗口
提示
当有对象依赖于该表时,该表不能被删除。单击【显示依赖关系】按钮,可以查看依赖于该表和该表依赖的对象。
2.使用DROP TABLE语句删除数据表
T-SQL语言中可以使用DROP TABLE语句删除指定的数据表,基本语法格式如下:
table_name是等待删除的表名称。
【例3.8】删除test数据库中的authors表,输入语句如下。