SQL Server 表的创建:语法、示例及完整使用指南
表是数据库管理系统中的核心组成部分,所有的数据都存储在表中。在 SQL Server 中,创建表是构建数据库架构的基础操作。本文将详细介绍 SQL Server 中创建表的语法及其相关属性,结合具体的示例,涵盖字段类型、主键、外键、约束等内容,并提供相关的扩展使用和最佳实践。
1. SQL Server 创建表的基本语法
在 SQL Server 中,创建表的基本语法如下:
CREATE TABLE 表名 (
列名 数据类型 [列约束],
...
[表级约束]
);
表名
:新表的名称。列名
:表中字段的名称。数据类型
:字段的数据类型,如INT
、VARCHAR
、DATETIME
等。列约束
:如PRIMARY KEY
、UNIQUE
、NOT 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
),用于唯一标识每个员工。FirstName
和LastName
字段不允许为NULL
,必须有值。BirthDate
字段表示员工的出生日期。Salary
字段使用DECIMAL
数据类型,允许存储精确的数值(例如 10,000.50)。
3. 数据类型的选择
SQL Server 提供了多种数据类型,常见的有:
- 整数类型:
INT
、BIGINT
、TINYINT
等,适用于存储整数值。 - 字符类型:
VARCHAR
(可变长度字符)、NVARCHAR
(支持 Unicode 字符)适用于存储文本数据。 - 日期时间类型:
DATETIME
、DATE
、TIME
,用于存储日期和时间信息。 - 数值类型:
DECIMAL
、FLOAT
、MONEY
,用于存储带有小数的数值。
示例:选择不同数据类型
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 NULL
和 UNIQUE
约束
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. 表级约束与索引
除了列级约束,表级约束如 CHECK
和 DEFAULT
可以控制整个表的行为。
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 中表的创建、修改和删除等操作,并结合这些概念进行数据库设计和开发。