GO
CREATE TABLE Product_Info
(
Product_ID smallint NOT NULL,
Product_Name char(20) NOT NULL,
Description char(30) NULL,
Price smallmoney NOT NULL,
Brand_ID brand_type
)
GO
现在,如果未指定产品描述的值,但其它四个数据行的值均有指定(在 Product_ID、Product_Name、Price、Brand_ID 这几个不接受Null值的数据行中),当输入一个产品的数据时,在数据表中会为 Description 资料行,插入 NULL在新的资料列中。如果四个不接受Null值的数据行中未输入数据,则数据列新增不会成功。
增加IDENTITY属性
建立数据表时,可以在资料行定义中增加IDENTITY属性,把某一个数据行指定为识别项数据行。如果建立的数据行具IDENTITY属性,它可让新插入的数据列依种子和递增值自动编制数据列值。 种子 (seed)是插入数据表的第一个数据列所指定识别编号。每一次插入一数据列时,会借着将递增值加至初始值来产生下个识别值,这个识别值能保证其所在数据表的唯一性。如果每一数据行都需要一个唯一的识别号码来确定其数据列的唯一性(如Product_ID数据行),识别编号属性就非常适用,无须每次新增数据列时还要考虑编号到了哪里。在一个数据表中,识别项数据行通常被当作主索引键条件约束使用,以利用其唯一性识别一个数据列。在本书 第16章 中可以找到更多有关主索引键条件约束的信息。
举例来说,如果指定了IDENTITY(0,10),则插入第1列的识别项数据行的值即为0、第2列为10、第3列为20,依此类推。如果不指定,预设的种子值和递增值为(1,1)。您必须指定两个参数或干脆都不指定。识别项数据行中不能有默认值、也不允许Null值。一个数据表只能有一个识别项数据行。
预设情况下,识别项数据行不能直接插入数据,也不能更新。如果您想重新插入已经删除的列,而且希望保留原来的识别值,您可以使用下面的叙述来修改预设设定:
SET INDETITY_INSERT tablename ON
使用这个陈述式就能插入数据列,并指定识别数据行的值。完成之后,应再使用下面的命令拒绝识别项数据行插入数据:
SET IDENTITY_INSERT tablename OFF
执行了上述的命令后,在下次插入新资料列时,SQL Server 就会以当时识别值中的最大值为种子值,进行递增的程序。
在 Product_Info 数据表中增加 IDENTITY 属性
现在我们将在 Product_Info 数据表增加IDENTITY属性。我们将把 Product_ID 数据行作为识别项数据行,此数据行中不以手动输入数据,而改由 SQL Server 自动产生识别值,以确保该识别值的唯一性。下面是建立数据表的 T-SQL 语法:
USE MyDB
GO
DROP TABLE Product_Info
GO
CREATE TABLE Product_Info
(
Product_ID smallint IDENTITY(1,1) NOT NULL,
Product_Name char(20) NOT NULL,
Description char(30) NULL,
Price smallmoney NOT NULL,
Brand_ID brand_type
)
GO
Product_ID 数据行的值将从1开始,并以1做为后续插入到数据表中数据列的递增值,以确保每一项产品唯一的识别值,而不需仰赖使用者自行输入数值。递增值可任意选择,但无论您使用的递增值为何,识别值都会是唯一的。
利用 Enterprise Manager 建立数据表
现在我们来使用 Enterprise Manager 建立数据表。记得,在实际建立数据库前,应先清楚所有数据库数据表以及相互间的关联性。要使用 Enterprise Manager 建立数据库数据表,请遵循以下步骤:
1. 在 Enterprise Manager 中展开 SQL Server群组 ,展开数据库。
2. 展开 数据库 数据夹,检视现存的数据库。
3. 展开想要操作的数据库,这里我们用 MyDB 。
4. 在 数据表 数据夹按一下鼠标右钮以显示快捷菜单,选择 新增资料表 。出现新数据表窗口,如图10-7所示(此为最大化图示)。
图10-7 「新数据表」窗口
新数据表 窗口包含一个如同电子表格一样的方格。方格中的每一列代表资料表中每一个资料行;每一个在方格中的数据行代表属性-如数据型别、长度及Null值属性。
________________________________________
说明
在为数据表的数据行命名时,应该采用一定的标准。采用什么命名标准并不重要,但命名的逻辑必须有其一致性。这种一致性可在执行查询时避免混乱。
________________________________________
5. 定义数据库中的每一个数据行(一列一列的定义),将名称输入 数据行名称 中,在 数据型别 数据行中可选取下拉式清单,定义数据型别。选择符合数据型别及该数据列的长度,在 是否允许Null值 数据列中按下SHIFT键或在该数据列中的方框中打勾以允许 Null 值(不打勾则不允许 Null 值)。 Product_Info 资料表如图10-8所示。请注意在 Brand_ID 这一数据行中,我们将 数据型别 设成使用者自订的数据型别 brand_type。要注意的是,虽然在自订这个数据型别时,我们已将 Brand_type 定义不接受 Null 值,但在 是否允许Null值 数据行中仍会将允许Null值设成预设(会打勾)。所以在这里必须将 是否允许Null值 的选取取消,以维持数据型别 Null 值属性的一致性。
数据的储存顺序会依您定义数据行的顺序储存。如果想在已输入的数据列间插入新数据列,点选欲插入的数据列后按一下鼠标右钮叫出快捷菜单,选择 插入数据行 ,如欲删除则选取想删除的数据列后按一下鼠标右钮,在快捷菜单中选择 删除数据行 。现在我们将在 Product_Info 数据表中将 Product_ID 数据行设成主索引键。选取 Product_ID 数据列后,按一下鼠标右钮,在快捷菜单中选择 设定主索引键 ,或是选取 Product_ID 数据列后,直接按一下工具列上 钥匙 的图示。就可在资料行名称旁看到如图10-9所示的 钥匙 图示。在本书 第16章 会讨论主索引件和其它条件约束。
图10-8 定义数据行的新数据表窗口
6. 在此窗口下方有 数据行 卷标页,这个卷标页可让您更改上方一些数据行的属性。举例来说,选择 Brand_ID 数据行,然后在 数据行 卷标页中的 描述 输入一些数据,在 默认值 中输入0,如图10-10所示。
图10-9「主索引键」的钥匙图标