购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

3.3 管理数据表

数据表创建完成之后,可以根据需要改变数据表中已经定义的许多选项。用户除了可以对字段进行增加、删除和修改操作,以及更改数据表的名称和所属架构,还可以删除和修改数据表中的约束,创建或修改完成之后可以查看数据表的结构。数据表不再需要时可以删除,本节将介绍这些管理数据表的操作。

3.3.1 修改数据表的字段

修改数据表的字段包含增加一个新字段,删除数据表中原有的一个字段以及修改字段的数据类型。SQL Server 2019提供了两种修改数据表字段的方法,分别是使用对象资源管理器和使用Transact-SQL语句修改数据表。

1.添加字段

添加字段的常见方法有以下两种。

(1)使用对象资源管理器添加字段

例如,在authors数据表中,添加一个名为auth_phone的新字段,数据类型为varchar(24),允许空值,在authors数据表上右击,在弹出的快捷菜单中选择【设计】菜单命令,如图3-14所示。

与前面介绍的创建数据表的过程相同,在弹出的数据表设计窗口中,添加新字段auth_phone,并设置字段数据类型为varchar(24),允许空值,如图3-15所示。

图3-14 选择【设计】菜单命令

图3-15 添加新字段auth_phone

修改完成之后,保存结果,新字段就添加成功了。

技巧

如果在保存的过程中,无法保存增加的数据表字段,则会弹出警告信息,如图3-16所示。

图3-16 警告信息

解决方案的具体操作步骤如下:

选择【工具】→【选项】菜单命令,如图3-17所示。

图3-17 选择【选项】菜单命令

打开【选项】对话框,选择【设计器】选项,在右侧面板中取消勾选【阻止保存要求重新创建表的更改】复选框,再单击【确定】按钮,如图3-18所示。

图3-18 【选项】对话框

(2)使用Transact-SQL语句添加字段

在Transact-SQL中使用ALTER TABLE语句在数据表中增加字段,基本语法格式如下:

     ALTER TABLE [ database_name. schema_name . ] table_name
     {
     ADD  column_name type_name
     [ NULL | NOT NULL ] | [ DEFAULT constant_expression ] | [ ROWGUIDCOL ]
     { PRIMARY KEY | UNIQUE } [CLUSTERED | NONCLUSTERED]
     }

其中,各参数含义如下:

·table_name:新增字段的数据表名称。

·column_name:新增字段的名称。

·type_name:新增字段的数据类型。

其他参数的含义,用户可以参考前面的内容。

【例3.3】在authors数据表中添加名为auth_note的新字段,字段数据类型为varchar(100),允许空值,输入如下语句:

     ALTER TABLE authors
     ADD auth_note  VARCHAR(100)  NULL

新建一个对当前连接的数据库的查询,在查询编辑器中输入上面的程序语句并执行,执行之后,用户可以重新打开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)使用Transact-SQL语句在数据表中修改字段

在Transact-SQL中使用ALTER TABLE语句在数据表中修改字段,基本语法格式如下:

     ALTER TABLE [ database_name. schema_name . ] table_name
     {
     ALTER COLUMN column_name  new_type_name
      [ NULL | NOT NULL ] | [ DEFAULT constant_expression ] | [ ROWGUIDCOL ]
     { PRIMARY KEY | UNIQUE } [CLUSTERED | NONCLUSTERED]
     }

其中,各参数的含义如下:

·table_name:要修改字段的数据表名称。

·column_name:要修改字段的名称。

·new_type_name:要修改字段的新数据类型。

其他参数的含义,用户可以参考前面的内容。

【例3.4】在authors数据表中修改名为auth_phone的字段,将数据类型改为varchar(15),输入如下语句:

     ALTER TABLE authors
     ALTER COLUMN auth_phone  VARCHAR(15)
     GO

新建一个对当前连接的数据库的查询,在查询编辑器中输入上面的程序语句并执行,执行之后,用户可以重新打开authors的数据表设计窗口,可以看到现在的数据表结构,如图3-21所示。

图3-21 authors数据表的结构

3.删除字段

删除字段的常用方法有以下两种。

(1)使用对象资源管理器删除字段

在数据表设计窗口中,每次可以删除数据表中的一个字段,操作过程比较简单,与在数据表中增加字段相似,打开数据表设计窗口之后,选中要删除的字段,再右击之,在弹出的快捷菜单中选择【删除列】菜单命令。例如,这里删除authors数据表中的auth_phone字段,如图3-22所示。

删除字段操作成功后,效果如图3-23所示。

图3-22 【删除列】菜单命令

图3-23 删除字段后的效果

(2)使用Transact-SQL语句删除数据表中的字段

在Transact-SQL中使用ALTER TABLE语句删除数据表中的字段,基本语法格式如下:

其中,各参数的含义如下:

·table_name:要删除字段所在数据表的名称。

·column_name:要删除字段的名称。

【例3.5】删除authors数据表中的auth_phone字段,输入如下语句:

     ALTER TABLE authors
     DROP  COLUMN auth_phone

在查询编辑器中输入上面的程序语句并执行,执行成功之后,auth_phone字段将被删除。

3.3.2 修改数据表的约束

约束是用来保证数据库完整性的一种方法,设计数据表时,需要定义列的有效值,并通过限制字段中数据、记录中数据以及数据表之间的数据来保证数据的完整性,约束是独立于数据表结构的,它作为数据库定义的一部分在创建数据表时声明,可以通过对象资源管理器或者ALTER TABLE语句进行添加或删除。

SQL Server 2019中有5种约束,分别是:主键约束(Primary Key Constraint)、唯一性约束(Unique Constraint)、检查约束(Check Constraint)、默认约束(Default Constraint)和外键约束(Foreign Key Constraint)。

1.主键约束

主键约束(PRIMARY KEY)可以在表中定义一个主键值,它可以唯一确定表中每一条记录,也是最重要的一种约束。每张数据表中只能有一个主键约束,并且主键约束的列不能接受空值。如果主键约束定义在不止一列上,则一列中的值可以重复,但主键约束定义中,所有列的组合值必须唯一。

2.唯一性约束

唯一性约束(UNIQUE)确保在非主键列中不输入重复的值。用于指定一个或者多个列的组合值具有唯一性,以防止在列中输入重复的值。可以对一个数据表定义多个唯一性约束,但只能定义一个主键约束。唯一性约束允许NULL值,但是当和参与唯一性约束的任何值一起使用时,每列只允许一个空值。

因此,当表中已经有一个主键值时,就可以使用唯一性约束。当使用唯一性约束时,需要考虑以下几个因素:

(1)使用唯一性约束的字段允许为空值。

(2)一个数据表中可以允许有多个唯一性约束。

(3)可以把唯一性约束定义在多个字段上。

(4)唯一性约束用于强制在指定字段上创建一个唯一性索引。

(5)默认情况下,创建的索引类型为非聚集索引。

3.检查约束

检查约束对输入列或者整个数据表中的值设置检查条件,以限制输入值,保证数据库数据的完整性。检查约束通过数据的逻辑表达式确定有效值。例如,定义一个age年龄字段,可以通过创建检查约束条件,将age列中值的范围限制为从0到150之间。这将防止输入的年龄值超出正常的年龄范围。可以通过任何的逻辑表达式(返回TRUE或FALSE布尔值)来创建检查约束。对于上面的示例,逻辑表达式为: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.增加约束

增加约束有两种方法,可以分别使用对象资源管理器和使用Transact-SQL语句来创建。这里以member表为例,介绍增加主键约束和唯一性约束的过程。

(1)使用对象资源管理器创建主键约束和唯一性约束

使用对象资源管理器创建主键约束,对test数据库中的member表中的id字段建立主键约束,具体操作步骤如下:

在【对象资源管理器】窗口中选择member表节点,右击,在弹出的快捷菜单中选择【设计】菜单命令,打开表设计窗口。在表设计窗口中选择【id】字段对应的行,右击,在弹出的快捷菜单中选择【设置主键】菜单命令,如图3-24所示。

图3-24 选择【设置主键】菜单命令

设置完成之后,id所在行会有一个钥匙图标,表示这是主键列,如图3-25所示。

如果主键由多列组成,可以选中某一列的同时,按Ctrl键选择多行,然后右击,在弹出的快捷菜单中选择【主键】菜单命令,即可将多列设为主键,如图3-26所示。

图3-25 设置【主键】列

图3-26 设置多列为主键

使用对象资源管理器创建唯一性约束,具体操作步骤如下:

在【对象资源管理器】窗口中选择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)使用Transact-SQL语句添加主键约束和唯一性约束

Transact-SQL语句中可以在创建表的同时添加约束,其基本语法格式如下:

     CREATE TABLE table_name
     column_name datatype
     [CONSTRAINT constraint_name] [NOT]  NULL  PRIMARY KEY | UNIQUE

constraint_name为用户定义的要创建的约束的名称。

【例3.6】定义数据表table_emp,并将表中e_id字段设为主键列,输入如下语句:

执行完成之后,刷新test数据库中的数据表,即可看到新创建的名为table_emp的数据表,查看该表的设计窗口,如图3-32所示。

图3-32 创建带主键约束的table_emp数据表

从图3-32中可以看到,Transact-SQL语句成功地在e_id字段建立了一个主键约束,用户可以选择工具栏上的【管理索引和键】命令,在【索引/键】对话框中可以看到表中的两个索引键,分别为以PK_开头的表示主键约束的键和以UQ_开头的表示唯一性约束的键,以及这两个键所在的表字段信息。

2.删除约束

当不再需要使用约束的时候,可以将其删除,删除约束的方法有两种,分别是使用对象资源管理器进行删除和使用Transact-SQL语句进行删除。

(1)使用对象资源管理器删除主键约束和唯一性约束

在对象资源管理器中删除主键约束或者唯一性约束,步骤如下:

打开table_emp数据表的表结构设计窗口。

单击工具栏上的【管理索引和键】按钮或者右击,在弹出的快捷菜单中选择【索引/键】菜单命令,打开【索引/键】对话框。

选择要删除的索引或键,单击【删除】按钮。用户在这里可以选择删除table_emp表中的主键索引或者是唯一性索引约束。

删除完成之后,单击【关闭】按钮,删除约束操作成功。

(2)使用ALTER TABLE语句删除主键约束和唯一性约束

使用ALTER TABLE语句对数据表进行操作,可以在修改数据表的时候删除表中的约束,其删除约束的基本语法格式如下:

     ALTER TABLE table_name
     DROP CONSTRAINT constraint_name [,……n]

·table_name:约束所在的数据表名称。

·constraint_name:需要删除的约束名称,n在这里表示可以同时删除多个不同名称的约束。

【例3.7】删除member表中的主键约束和唯一性约束,Transact-SQL语句如下:

     ALTER TABLE member
     DROP CONSTRAINT PK_member, UQ_firstname

PK_member和UQ_firstname分别为member表中两种约束的名称,用户可以在【索引/键】对话框中查看表中的所有索引和键的名称。

3.3.3 查看表中有关信息

数据表创建之后,可能会有不同的用户需要查看表的有关信息,比如查看表的结构、表的属性、表中存储的数据以及与其他数据对象之间的依赖关系等。

1.查看表的结构

打开数据库test,在需要查看的表上右击,在弹出的快捷菜单中选择【设计】菜单命令,打开表设计窗口,在使用对象资源管理器创建数据表时,用户已经在前面的内容中看到过这个窗口,该窗口中显示了表定义中各个字段的名称、数据类型、是否允许空值以及主键唯一性约束等信息。另外,该页中的属性用户可以进行修改操作,最后单击【保存】按钮即可保存修改的操作,如图3-33所示。

2.查看表的属性

在需要查看的表member上右击,并在弹出的快捷菜单中选择【属性】菜单命令,打开【表属性】对话框,在【常规】选项卡中显示了该表的数据库名称、当前连接到服务器的用户名称、表的创建时间和架构等属性,这里显示的属性不能修改,如图3-34所示。

图3-33 表设计窗口

图3-34 【表属性】对话框

3.查看表中存储的数据

在member表上右击,在弹出的快捷菜单中选择【编辑前200行】菜单命令,将显示member表中的前200条记录,并允许用户编辑这些数据,如图3-35所示。

图3-35 【编辑前200行】命令显示结果

4.查看表与其他数据对象的依赖关系

在要查看的表上右击,在弹出的快捷菜单中选择【查看依赖关系】菜单命令,打开【对象依赖关系】对话框,该对话框显示了该表和其他数据对象的依赖关系。如果某个存储过程中使用了该表,该表的主键是被其他表的外键约束所依赖或者该表依赖其他数据对象时,这里会列出相关的信息,如图3-36所示。

图3-36 【对象依赖关系】对话框

3.3.4 删除数据表

当数据表不再使用时,可以将其删除。删除数据表有两种方法,分别是使用对象资源管理器和使用DROP TABLE语句删除。

1.使用对象资源管理器删除数据表

在对象资源管理器中,展开指定的数据库和表,右击需要删除的表,从弹出的快捷菜单中选择【删除】菜单命令,在弹出的【删除对象】对话框中单击【确定】按钮,即可删除表,如图3-37所示。

图3-37 【删除对象】对话框

技巧

当有对象依赖于该表时,该表不能被删除。单击【显示依赖关系】按钮,可以查看依赖于该表和该表依赖的对象。

2.使用DROP TABLE语句删除数据表

Transact-SQL语言中可以使用DROP TABLE语句删除指定的数据表,基本语法格式如下:

     DROP TABLE table_name

table_name是等待删除的表名称。

【例3.8】删除test数据库中的authors表,输入如下语句: YRa9aywRcfM0E1XO5u1wKpsj3f4ABreISIYFWdbKOUDf9z2SvAFeN8YKtk6vswfR

     USE test
     GO
     DROP TABLE authors
点击中间区域
呼出菜单
上一章
目录
下一章
×