表的创建

 数据库   ZeroIsStart   2024-10-20 09:46   51

SQL Server 表的创建:语法、示例及完整使用指南

表是数据库管理系统中的核心组成部分,所有的数据都存储在表中。在 SQL Server 中,创建表是构建数据库架构的基础操作。本文将详细介绍 SQL Server 中创建表的语法及其相关属性,结合具体的示例,涵盖字段类型、主键、外键、约束等内容,并提供相关的扩展使用和最佳实践。


1. SQL Server 创建表的基本语法

在 SQL Server 中,创建表的基本语法如下:

CREATE TABLE 表名 (
    列名 数据类型 [列约束],
    ...
    [表级约束]
);
  • 表名:新表的名称。
  • 列名:表中字段的名称。
  • 数据类型:字段的数据类型,如 INTVARCHARDATETIME 等。
  • 列约束:如 PRIMARY KEYUNIQUENOT NULL 等用于限制字段值的约束。
  • 表级约束:用于定义表级别的约束,如主键、外键等。

2. 创建表的详细示例

2.1 创建基础表

假设我们需要创建一个存储员工信息的表 Employees,其中包括员工的 ID、姓名、生日和薪水等字段。SQL 语法如下:

CREATE TABLE Employees (
    EmployeeID INT PRIMARY KEY,        -- 员工ID,主键
    FirstName NVARCHAR(50) NOT NULL,   -- 员工名,不能为 NULL
    LastName NVARCHAR(50) NOT NULL,    -- 员工姓氏,不能为 NULL
    BirthDate DATETIME,                -- 出生日期
    Salary DECIMAL(18, 2)              -- 薪水,最多18位数字,小数点后2位
);

解释:

  • EmployeeID 字段是主键 (PRIMARY KEY),用于唯一标识每个员工。
  • FirstNameLastName 字段不允许为 NULL,必须有值。
  • BirthDate 字段表示员工的出生日期。
  • Salary 字段使用 DECIMAL 数据类型,允许存储精确的数值(例如 10,000.50)。

3. 数据类型的选择

SQL Server 提供了多种数据类型,常见的有:

  • 整数类型INTBIGINTTINYINT 等,适用于存储整数值。
  • 字符类型VARCHAR(可变长度字符)、NVARCHAR(支持 Unicode 字符)适用于存储文本数据。
  • 日期时间类型DATETIMEDATETIME,用于存储日期和时间信息。
  • 数值类型DECIMALFLOATMONEY,用于存储带有小数的数值。

示例:选择不同数据类型

CREATE TABLE Products (
    ProductID INT PRIMARY KEY,                 -- 商品ID,整数类型
    ProductName NVARCHAR(100) NOT NULL,        -- 商品名称,最多100个字符
    Price DECIMAL(10, 2) NOT NULL,             -- 商品价格,最多10位数,保留两位小数
    ManufacturedDate DATE                      -- 生产日期,仅存储日期部分
);

解释:

  • ProductID 使用整数类型 INT,作为主键。
  • ProductName 使用 NVARCHAR(100),支持存储 Unicode 字符。
  • Price 使用 DECIMAL(10, 2),确保价格数值精确到小数点后两位。
  • ManufacturedDate 使用 DATE 数据类型,仅存储日期部分,不包括时间。

4. 添加主键、外键和其他约束

4.1 主键约束

主键用于唯一标识表中的每一行记录,通常使用 PRIMARY KEY 约束。

CREATE TABLE Departments (
    DepartmentID INT PRIMARY KEY,          -- 部门ID,主键
    DepartmentName NVARCHAR(100) NOT NULL  -- 部门名称,非空
);

4.2 外键约束

外键用于在表之间创建关系,确保表中的某个字段引用另一个表的主键。

CREATE TABLE Employees (
    EmployeeID INT PRIMARY KEY,            -- 员工ID,主键
    FirstName NVARCHAR(50) NOT NULL,       -- 名字
    LastName NVARCHAR(50) NOT NULL,        -- 姓氏
    DepartmentID INT,                      -- 部门ID,外键
    FOREIGN KEY (DepartmentID)             -- 定义外键
        REFERENCES Departments(DepartmentID)  -- 引用 Departments 表的主键
);

解释:

  • DepartmentID 字段是 Employees 表中的外键,引用 Departments 表的 DepartmentID 主键。
  • 该外键确保员工所属的部门在 Departments 表中存在。

4.3 NOT NULLUNIQUE 约束

  • NOT NULL:确保某个字段不允许存储 NULL 值。
  • UNIQUE:确保某个字段的值在表中是唯一的。
CREATE TABLE Customers (
    CustomerID INT PRIMARY KEY,               -- 客户ID,主键
    CustomerEmail NVARCHAR(100) NOT NULL,     -- 客户邮箱,不能为NULL
    PhoneNumber NVARCHAR(15) UNIQUE           -- 电话号码,唯一
);

解释:

  • CustomerEmail 字段使用 NOT NULL,确保每个客户必须有邮箱地址。
  • PhoneNumber 字段使用 UNIQUE,确保电话号码在表中不重复。

5. 修改表结构

在实际项目中,表的结构可能需要进行调整或扩展。SQL Server 提供了 ALTER TABLE 语句,用于修改现有表的结构。

5.1 添加字段

ALTER TABLE Employees
ADD Email NVARCHAR(100);

解释:

  • 使用 ALTER TABLE 语句向 Employees 表添加一个新的字段 Email

5.2 修改字段类型

ALTER TABLE Employees
ALTER COLUMN Salary DECIMAL(18, 4);

解释:

  • 该语句将 Employees 表中的 Salary 字段数据类型修改为 DECIMAL(18, 4),即允许四位小数。

5.3 删除字段

ALTER TABLE Employees
DROP COLUMN BirthDate;

解释:

  • 使用 DROP COLUMN 删除 Employees 表中的 BirthDate 字段。

6. 表级约束与索引

除了列级约束,表级约束如 CHECKDEFAULT 可以控制整个表的行为。

6.1 CHECK 约束

CHECK 约束用于限制列值必须满足的条件。

CREATE TABLE Employees (
    EmployeeID INT PRIMARY KEY,
    Salary DECIMAL(18, 2) CHECK (Salary >= 0)  -- 工资不能为负数
);

6.2 DEFAULT 约束

DEFAULT 约束用于为列提供默认值。

CREATE TABLE Orders (
    OrderID INT PRIMARY KEY,
    OrderDate DATETIME DEFAULT GETDATE()  -- 默认值为当前日期时间
);

6.3 索引

索引用于加快数据查询速度。创建索引的语法如下:

CREATE INDEX idx_EmployeeName
ON Employees (FirstName, LastName);

7. 删除表

如果表不再需要,可以使用 DROP TABLE 语句删除该表。

DROP TABLE Employees;

注意: 删除表会永久删除表结构和表中的所有数据,操作应谨慎。


总结

在 SQL Server 中,创建表是数据库设计中的关键步骤。通过定义合适的数据类型、添加主键和外键、设置列约束等操作,我们可以确保数据库的结构健全并满足业务需求。在实际开发中,合理设计表结构不仅有助于提升查询性能,还能保证数据的完整性和一致性。

示例完整代码:

-- 创建 Departments 表
CREATE TABLE Departments (
    DepartmentID INT PRIMARY KEY,
    DepartmentName NVARCHAR(100) NOT NULL
);

-- 创建 Employees 表,包含主键、外键及多个字段
CREATE TABLE Employees (
    EmployeeID INT PRIMARY KEY,
    FirstName NVARCHAR(50) NOT NULL,
    LastName NVARCHAR(50) NOT NULL,
    Salary DECIMAL(18, 2),
    DepartmentID INT,
    FOREIGN KEY (DepartmentID) REFERENCES Departments(DepartmentID)
);

-- 向 Employees 表添加新字段
ALTER TABLE Employees
ADD Email NVARCHAR(100);

-- 修改 Salary 字段的数据类型
ALTER TABLE Employees
ALTER COLUMN Salary DECIMAL(18, 4);

-- 删除 BirthDate 字段
ALTER TABLE Employees
DROP COLUMN BirthDate;

-- 创建

索引
CREATE INDEX idx_EmployeeName
ON Employees (FirstName, LastName);

通过上述步骤,你可以全面掌握 SQL Server 中表的创建、修改和删除等操作,并结合这些概念进行数据库设计和开发。