本文章为 SQL Server 的详细学习大纲 里面的一个子章节的详细介绍,如果了解相关的其他内容,可以从这里面查看,或者查看SQL Server专栏,里面有些文章可能并不在 SQL Server 的详细学习大纲 里面,是一些补充内容。
以下是关于使用 SQL Server 中的 CREATE TABLE
语句创建数据表的详细介绍:
基本语法格式
CREATE TABLE [database_name].[schema_name].[table_name] (
column1_name data_type [column_constraint],
column2_name data_type [column_constraint],
...
[table_constraint]
);
其中:
[database_name]
是数据库名称(如果不指定,则在当前数据库中创建)。[schema_name]
为架构名称(若不写,通常使用默认架构,如dbo
)。[table_name]
是要创建的表的名称。column1_name
、column2_name
等是表中各列的名称。data_type
表示对应列的数据类型(如整数型、字符型、日期型等)。[column_constraint]
是列级别的约束条件,[table_constraint]
是表级别的约束条件。
定义列的数据类型示例
- 整数型
CREATE TABLE Students (
StudentID int, -- int类型,用于存储普通范围的整数,如学生编号
Age smallint -- smallint类型,适合存储像年龄这种较小范围的整数
);
这里定义了 StudentID
列使用 int
数据类型,可存储类似学生编号这样的整数值;Age
列使用 smallint
类型来存储年龄信息。
- 字符型
CREATE TABLE Employees (
EmployeeName varchar(50), -- varchar类型,可变长度字符,最大长度50,存储员工姓名
Department char(10) -- char类型,固定长度10的字符,存储部门名称
);
EmployeeName
列使用 varchar
类型,因为员工姓名长度不一,使用可变长节省空间;而 Department
列用 char
类型,假设部门名称统一设定为固定长度的字符表示。
- 日期型
CREATE TABLE Orders (
OrderDate date, -- date类型,存储订单日期,只包含年月日信息
DeliveryTime time -- time类型,用于记录订单预计送达时间,只含时分秒信息
);
此例中,OrderDate
列通过 date
类型记录订单产生的日期,DeliveryTime
列使用 time
类型来存放预计送达时间。
定义约束条件示例
- 主键约束(Primary Key)
- 列级定义主键:
CREATE TABLE Products (
ProductID int PRIMARY KEY, -- 在列定义时直接指定为主键,确保ProductID列值唯一且非空
ProductName varchar(100),
Price money
);
- **表级定义主键(常用于复合主键情况)**:
CREATE TABLE OrderDetails (
OrderID int,
ProductID int,
Quantity int,
PRIMARY KEY (OrderID, ProductID) -- 表级定义,说明OrderID和ProductID两个列组合起来作为主键,整体具有唯一性
);
- 外键约束(Foreign Key)
假设存在Customers
表(含CustomerID
主键)和Orders
表,要在Orders
表中通过外键关联到Customers
表的CustomerID
:
CREATE TABLE Customers (
CustomerID int PRIMARY KEY,
CustomerName varchar(100)
);
CREATE TABLE Orders (
OrderID int PRIMARY KEY,
CustomerID int,
OrderDate date,
FOREIGN KEY (CustomerID) REFERENCES Customers(CustomerID) -- 定义外键,指定Orders表中的CustomerID列参照Customers表的CustomerID主键列
);
- 唯一性约束(Unique)
CREATE TABLE Employees (
EmployeeID int PRIMARY KEY,
EmployeeEmail varchar(100) UNIQUE, -- 定义EmployeeEmail列值在表内必须唯一,用于确保员工邮箱不重复
EmployeeName varchar(100)
);
- 非空约束(Not Null)
CREATE TABLE Courses (
CourseID int PRIMARY KEY,
CourseName varchar(100) NOT NULL, -- 规定CourseName列不能为空,必须有具体的课程名称
Credit int
);
综合示例
以下创建一个相对复杂些的 Employees
表,包含多种数据类型和约束条件:
CREATE TABLE Employees (
EmployeeID int PRIMARY KEY,
EmployeeName varchar(100) NOT NULL,
DepartmentID int,
HireDate date NOT NULL,
Email varchar(100) UNIQUE,
Salary money,
FOREIGN KEY (DepartmentID) REFERENCES Departments(DepartmentID) -- 假设存在Departments表,通过外键关联部门
);
这个表中,EmployeeID
作为主键确保每行记录的唯一性;EmployeeName
和 HireDate
列添加了非空约束;Email
列有唯一性约束;同时通过外键约束将 DepartmentID
列与其他 Departments
表中的对应主键列关联起来,保证数据的参照完整性。
总之,通过合理运用 CREATE TABLE
语句中数据类型和各类约束条件的定义,可以创建结构清晰、符合业务逻辑且数据完整性良好的数据库表。