1.1 数据表的基本概念
用T-SQL语句创建表
CREATE TABLE 表名
(
列名1 数据类型 [列级完整性约束],
列名2 数据类型 [列级完整性约束],
...
[表级完整性约束]
)
1.2 SQL Server定义的系统数据类型
数值类型
- int: 整数
- decimal: 精确数值
- float: 浮点数
字符串类型
- char: 固定长度字符串
- varchar: 可变长度字符串
- text: 长文本
1.3 表的完整性约束
完整性约束类型
-
主键约束 (PRIMARY KEY)
确保表中的每一行都有唯一标识符,不允许为空值。一个表只能有一个主键约束。
CREATE TABLE 学生( 学号 CHAR(10) PRIMARY KEY, 姓名 VARCHAR(20) NOT NULL ); -
外键约束 (FOREIGN KEY)
建立表之间的关联关系,确保引用完整性。外键值必须在被引用表的主键值范围内。
CREATE TABLE 选课( 学号 CHAR(10), 课程号 CHAR(8), 成绩 DECIMAL(4,1), FOREIGN KEY (学号) REFERENCES 学生(学号) ); -
唯一约束 (UNIQUE)
确保列中的值不重复,但允许为空值。一个表可以有多个唯一约束。
CREATE TABLE 教师( 工号 CHAR(8) PRIMARY KEY, 身份证号 CHAR(18) UNIQUE, 邮箱 VARCHAR(50) UNIQUE ); -
检查约束 (CHECK)
限制列中的值必须满足指定的条件。
CREATE TABLE 员工( 员工编号 CHAR(6) PRIMARY KEY, 姓名 VARCHAR(20) NOT NULL, 年龄 INT CHECK (年龄 >= 18 AND 年龄 <= 60), 工资 DECIMAL(10,2) CHECK (工资 > 0) ); -
默认约束 (DEFAULT)
为列指定默认值,当插入数据时如果未指定该列的值,将使用默认值。
CREATE TABLE 订单( 订单号 CHAR(10) PRIMARY KEY, 下单时间 DATETIME DEFAULT GETDATE(), 状态 VARCHAR(20) DEFAULT '待处理' ); -
非空约束 (NOT NULL)
确保列的值不能为空。
CREATE TABLE 产品( 产品编号 CHAR(8) PRIMARY KEY, 产品名称 VARCHAR(50) NOT NULL, 单价 DECIMAL(10,2) NOT NULL CHECK (单价 > 0) );
综合案例
以下是一个包含多种完整性约束的创建表示例:
-- 创建学生表
CREATE TABLE 学生(
学号 CHAR(10) PRIMARY KEY,
姓名 VARCHAR(20) NOT NULL,
性别 CHAR(2) CHECK (性别 IN ('男','女')),
出生日期 DATE CHECK (出生日期 > '1990-01-01'),
邮箱 VARCHAR(50) UNIQUE,
所在班级 CHAR(8) NOT NULL,
入学时间 DATE DEFAULT GETDATE()
);
-- 创建课程表
CREATE TABLE 课程(
课程号 CHAR(8) PRIMARY KEY,
课程名称 VARCHAR(50) NOT NULL UNIQUE,
学分 DECIMAL(2,1) CHECK (学分 > 0),
课时 INT DEFAULT 32 CHECK (课时 >= 16)
);
-- 创建选课表
CREATE TABLE 选课(
学号 CHAR(10),
课程号 CHAR(8),
选课时间 DATETIME DEFAULT GETDATE(),
成绩 DECIMAL(4,1) CHECK (成绩 >= 0 AND 成绩 <= 100),
PRIMARY KEY (学号, 课程号),
FOREIGN KEY (学号) REFERENCES 学生(学号),
FOREIGN KEY (课程号) REFERENCES 课程(课程号)
);
1.4 删除数据表
DROP TABLE 表名
注意:删除表之前需要确保没有其他表与之有外键关联