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 表名
                

注意:删除表之前需要确保没有其他表与之有外键关联

1.5 数据库关系图

表1 表2