关系数据库将数据组织成表,这些表看起来很像带有行和列的电子表格。列是表中垂直的结构。每列代表表中存储项的特定属性或特征。例如,在一个存储客户信息的表中,你可能会有 CustomerID、FirstName、LastName 和 EmailAddress 等列。数据库表中的每一列都必须指定一个特定的数据类型。这是一个基本规定,它准确地告诉数据库该列的每一行中允许存储何种数据。这为何如此重要?数据完整性: 数据类型充当验证规则。如果你将一列定义为只存储数字,数据库会阻止你意外地将诸如“Hello”之类的文本插入其中。这有助于确保数据的准确性和一致性。存储效率: 不同种类的数据需要不同的存储空间。整数通常比长段文本占用更少的空间。通过指定正确的数据类型,数据库可以更有效地管理存储。性能: 当数据库知道列中的数据类型时,它可以更快地执行搜索、排序或计算等操作。在定义为 DATE 类型的数据列中搜索特定日期比在可能以各种格式存储日期的通用文本列中更高效。常见数据类型尽管不同数据库管理系统 (DBMS) 之间确切的名称和变体可能略有差异,但大多数关系数据库都支持一组标准数据类型。以下是一些你将遇到的最常用类型:数值类型这些用于存储数字。整型: 用于存储整数(不带小数的数字)。例如,客户ID (101)、订单商品数量 (5) 或某人的年龄 (30)。常见整型包括:INT (或 INTEGER):标准整数,适用于多种通用用途。SMALLINT:比 INT 占用更少存储空间,但可能值的范围较小。适用于你知道不会非常大的数字。BIGINT:占用更多存储空间,但可以容纳极大的整数。定点类型 (DECIMAL 或 NUMERIC): 用于对精度要求较高的数字,特别是涉及金钱的计算。你通常需要指定总位数和小数点后的位数。例如:存储 $19.99 这样的价格。使用这些类型可以避免浮点类型可能出现的小数位舍入误差。浮点类型 (FLOAT 或 REAL): 用于近似数字数据值,常用于科学计算,在这些计算中可能不需要或无法达到小数点后绝对精确。它们可以表示非常大的数值范围,但可能会引入微小的舍入差异。字符串(文本)类型这些用于存储文本数据。VARCHAR(n): 存储可变长度的字符串,n 表示允许的最大字符数。如果你存储的文本短于 n,它只会使用实际文本所需的空间,外加少量额外开销。这对于姓名、电子邮件地址或简短描述非常常见。例如,VARCHAR(50) 可以存储一个名字。CHAR(n): 存储固定长度的字符串,n 是确切的字符数。如果你存储的文本短于 n,数据库通常会添加空格(填充)来将其补齐到长度 n。这对于长度始终相同的数据非常有用,例如两个字母的州代码(例如,CHAR(2) 用于 'CA'、'NY'、'TX')。如果存储不是主要考虑,VARCHAR 通常更具灵活性。TEXT(或类似类型,如 CLOB): 用于存储长篇文本块,如产品描述、文章或用户评论,通常超出 VARCHAR 的常见限制。日期和时间类型这些专门设计用于存储日历日期和/或时钟时间。DATE: 存储日期(年、月、日)。例如:2024-07-15。TIME: 存储时间(小时、分钟和秒)。例如:14:30:00。TIMESTAMP 或 DATETIME: 同时存储日期和时间信息。例如:2024-07-15 14:30:00。对于精确记录事件发生时间很有用。布尔类型用于存储真或假值。不同的数据库可能会将其称为 BOOLEAN、BOOL,或者有时使用 BIT 类型,甚至是一个微小的整型,如 TINYINT(1),其中 0 代表假,1 代表真。例如:IsActive、HasShipped。选择合适的数据类型为每列选择最适合的数据类型是设计数据库表的重要组成部分。你应该选择最能匹配你打算存储的数据的类型。如果你打算对数字进行数学计算,不要使用文本类型来存储数字。如果需要精确计算,不要对货币使用浮点类型;请使用 DECIMAL 或 NUMERIC。如果你知道文本的最大长度会相当短,请选择 VARCHAR 而非 TEXT,因为它可能更高效。对日期和时间使用特定的 DATE 或 TIMESTAMP 类型;将它们存储为文本会使比较和计算变得困难。例如,使用 DATE 类型查找特定日期之前的所有订单很简单,但如果日期存储为“2024年7月15日”这样的字符串,则会很复杂。考虑某个值是必需的还是可以缺失的。NULL:表示缺失信息有时,特定行中某一列的值可能未知或不适用。数据库使用一个名为 NULL 的特殊标记来表示这种缺失信息。重要的是要明白,NULL 对于数字来说与零 (0) 不同,对于文本来说也与空字符串 ('' ) 不同。它明确表示“没有值存在”。在定义列时,你通常可以指定它是否允许包含 NULL 值,或者它是否必须始终具有一个值。示例:一个简单的 Products 表结构让我们通过一个存储产品信息的简单表结构来形象地说明这一点:列名数据类型描述允许NULL值?ProductIDINT产品的唯一标识符(可能是主键)否ProductNameVARCHAR(100)产品名称否DescriptionTEXT产品的详细描述是PriceDECIMAL(10,2)销售价格(例如,最高99,999,999.99)否QuantityOnHandINT当前库存单位数量否DateAddedDATE产品添加到目录的日期是IsDiscontinuedBOOLEAN如果产品不再销售则为真否Products 表的示例定义,展示了列名、它们指定的数据类型、简要描述以及是否允许 NULL 值。在此示例中,每列都具有经过仔细选择的数据类型。ProductID 和 QuantityOnHand 是整数 (INT)。ProductName 使用 VARCHAR(100),假设名称不会超过 100 个字符。Price 使用 DECIMAL(10, 2) 来准确存储货币。Description 使用 TEXT 来存储可能较长的描述。DateAdded 使用 DATE,IsDiscontinued 使用 BOOLEAN。另外请注意,一些列(例如 ProductID、ProductName 等)被定义为不允许 NULL 值,以确保每个产品记录中始终存在一些必要的信息。了解列和数据类型对于创建结构良好且可靠的关系数据库非常重要。它们强制执行一致性,并使数据库能够高效地存储和检索信息。随着你的学习,你将看到这些基本构成部分如何支持更复杂的数据库操作和设计。