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

4.1 数据表基础

在创建数据表的过程中,需要为数据列选定数据类型,用于定义各列允许的数据值。SQL Server提供了基本数据类型和用户自定义数据类型,下面分别对其进行介绍。

4.1.1 基本数据类型

基本数据类型按数据的表现方式及存储方式的不同分为整数数据类型、货币数据类型、浮点数据类型、日期/时间数据类型、字符数据类型、二进制数据类型、图像和文本数据类型。具体介绍如表4.1所示。

表4.1 基本数据类型

4.1.2 用户自定义数据类型

用户自定义数据类型并不是真正的数据类型,它只是提供了一种加强数据库内部元素和基本数据类型之间一致性的机制。通过使用用户自定义数据类型能够简化对常用规则和默认值的管理。

在SQL Server中,创建用户自定义数据类型有两种方法:一是使用管理器,二是使用SQL语句,下面分别进行介绍。

1.使用管理器创建用户定义数据类型

在数据库中,创建用来存储邮政编码信息的postcode用户定义数据类型,数据类型为bigint,长度为8000。

操作步骤如下。

(1)打开SQL Server Management Studio管理工具,连接到SQL Server服务器上。

(2)在“对象资源管理器”中,依次展开“数据库”/“选择指定数据库”/“可编程性”/“类型”节点。

(3)在下拉列表中选择“用户定义数据类型”,右击,在弹出的快捷菜单中选择“新建用户定义数据类型”命令。在打开的窗口中设置用户定义数据类型的名称、依据的系统数据类型以及是否允许NULL值等,如图4.1所示,还可以将已创建的规则和默认值绑定到该用户定义的数据类型上。

图4.1 新建用户定义数据类型

(4)单击“确定”按钮,完成创建工作。

2.使用SQL语句创建用户自定义数据类型

在SQL Server中,使用系统数据类型sp_addtype创建用户自定义数据类型。语法如下:

参数说明如下。

[@typename=]type:指定待创建的用户自定义数据类型的名称。用户定义数据类型名称必须遵循标识符的命名规则,而且在数据库中唯一。

[@phystype=]system_data_type:指定用户定义数据类型依赖的系统数据类型。

[@nulltype=]'null_type':指定用户定义数据类型的可空属性,即用户定义数据类型处理空值的方式。取值为NULL、NOT NULL或NONULL。

在db_Test数据库中,创建用来存储邮政编码信息的postcode用户自定义数据类型。在查询分析器中运行的结果如图4.2所示。

SQL语句如下:

     USE db_Test
     EXEC sp_addtype postcode,'char(8) ','not null'

创建用户定义数据类型后,就可以像系统数据类型一样使用用户自定义数据类型。例如,在db_Test数据库的表中创建新的字段,为字段指定数据类型时,就可以在下拉列表框中选择刚刚创建的用户数据类型postcode了,如图4.3所示。

图4.2 用户自定义postcode类型

图4.3 创建字段时使用了数据类型postcode

根据需要,还可以修改、删除用户数据类型。SQL Server提供系统存储过程sp_droptype,该存储过程从systypes删除别名数据类型。

4.1.3 数据表的数据完整性

表列中除了具有数据类型和大小属性之外,还有其他属性。其他属性是保证数据库中数据完整性和表的引用完整性的重要部分。数据完整性是指列中每个事件都有正确的数据值。数据值的数据类型必须正确,并且数据值必须位于正确的域中。引用完整性是指表之间的关系得到正确维护。一个表中的数据只应指向另一个表中的现有行,不应指向不存在的行。

SQL Server提供多种强制数据完整性的机制,下面分别对其进行介绍。

1.空值与非空值

表的每一列都有一组属性,如名称、数据类型、数据长度和为空性等,列的所有属性即构成列的定义。列可以定义为允许空值或不允许空值即非空值。

允许空值(NULL):在默认情况下,列允许空值,即允许用户在添加数据时省略该列的值。

不允许空值(NOT NULL):不允许在没有指定列默认值的情况下省略该列的值。

2.默认值

如果在插入行时没有指定列的值,那么默认值将指定列中所使用的值。默认值可以是任何取值为常量的对象,如内置函数或数学表达式等。下面介绍两种使用默认值的方法。

在CREATE TABLE中使用DEFAULT关键字创建默认定义,将常量表达式指派为列的默认值,这是标准方法。

使用CREATE DEFAULT语句创建默认对象,然后使用sp_bindefault系统存储过程将它绑定到列上,这是一个向前兼容的功能。

3.特定标识属性

数据表中如果某列被指派特定标识属性(IDENTITY),系统将自动为表中插入的新行生成连续递增的编号。因为标识值通常唯一,所以标识列常定义为主键。

IDENTITY属性适用于INT、SMALLINT、TINYINT、DECIMAL(P,0)、UMERIC(P,0)数据类型的列。

注意

一个列不能同时具有NULL属性和IDENTITY属性,二者只能选其一。

4.约束

约束是用来定义SQL Server自动强制数据库完整性的方式。使用约束优先于使用触发器、规则和默认值。SQL Server中共有以下5种约束。

非空(NOT NULL):使用户必须在表的指定列中输入一个值。每个表中可以有多个非空约束。

检查(Check):用来指定一个布尔操作,限制输入表中的值。

唯一性(Unique):使用户的应用程序必须向列中输入一个唯一的值,值不能重复,但可以为空。

主键(Primary key):建立一列或多列的组合以唯一标识表中的每一行。主键可以保证实体完整性,一个表只能有一个主键,同时主键中的列不能接受空值。

外键(Foreign key):外键是用于建立和加强两个表数据之间的链接的一列或多列。当一个表中作为主键的一列被添加到另一个表中时,链接就建立了,其主要目的是控制存储在外键表中的数据。 Dev5DU7cB9gHivp3+GYcgw5VLaTDjb8ozPA3JwPL+9aON+9n9CXw38NZdr5zOw7T

点击中间区域
呼出菜单
上一章
目录
下一章
×