问答题 使用SQL语句创建学生表,其中各列有如下限制。
·学号:普通编码定长字符型,第1位为S,第2~6位为[0-9]之间的数字,标识属性。
·姓名:普通编码定长字符型,长度为6,非空且唯一。
·性别:普通编码定长字符型,长度为2,非空,且只能取“男”或“女”两个值。
·出生日期:日期时间型,出生日期必须在1989年12月31日之后。
·专业:普通编码定长字符型,长度为10,非空。
·年级:整型,值必须在1~4之间。

【正确答案】CREATE TABLE学生(
学号CHAR(7) PRIMARY KEY
CHECK (学号 LIKE 'S[0-9][0-9][0-9][0-9][0-9][0-9]'),
姓名CHAR(6) NOT NULL UNIQUE,
性别CHAR(2)NOT NULL CHECK(性别='男' OR 性别='女'),
出生日期DATETIME CHECK(出生日期>'1989-12-31'),
专业CHAR(10) NOT NULL,
年级TINYINT CHECK(年级>=1 AND 年级<=4)
)
【答案解析】[解析] 对各列分析如下。
(1)学号:普遍编码定长字符型,数据类型为char,长度为6;由于是标识属性,因此要定义主码约束;由于需要满足规定格式要求,因此需要定义检查约束。
(2)姓名:普遍编码定长字符型,数据类型为char,长度为6;要求非空且唯一,需要定义非空约束和单值约束。
(3)性别:普遍编码定长字符型,数据类型为char,长度为2;要求非空,需要定义非空约束;要求取值范围是“男”或“女”,需要定义检查约束。
(4)出生日期:日期时间型,数据类型可为datetime或smalldatetime;要求必须在1989年12月31日之后,需要定义检查约束。
(5)专业:普通编码定长字符型,数据类型为char,长度为10;要求非空,需要定义非空约束。
(6)年级:整型,数据类型可用bigint、int、smallint或tinyint,由于该值必须在1~4之间,考虑到存储空间,这4种整型占用的存储空间分别为8字节、4字节、2字节和1字节,因此最好选择tinyint型:要求值在1~4之间,需要定义检查约束。