1.Tinyint数据类型定义的数据的取值范围是多少?
答:0-255
2.SmallDatatime类型精确到哪个时间单位?
答:分钟
3.定点小数类型numeric中的p和q的含义分别是什么?
答:p代表整数位数+小数位数的和值,q代表小数位数。
4.Char(n)、nchar(n)的区别是什么?它们各能存放多少个字符?
答:Char(n)中的n代表能存放n个字节的字符,如果是字母可以存放n个,如果是汉字可存放n/2个。Nchar(n)中的n代表能存放的字符个数。
5.Char(n)和varchar(n)的区别是什么?
答:Char(n)是定长存储,一定占n个字节的空间。Varchar(n)代表最多占n个字节的空间。
6.数据完整性约束的作用对象有哪些?
答:表和列
7.CHECK约束的作用是什么?
答:限制列的取值范围。
8.UNIQUE约束的作用是什么?
答:限制列取值不重。
9.DEFAULT约束的作用是什么?
答:提供列的默认值。
上机练习
1.在第4章创建的Students数据库中,写出创建如下三张表的SQL语句,要求在定义表的同时定义数据的完整性约束:
(1)“图书”表结构如下:
书号:统一字符编码定长类型,长度为6,主键;
书名:统一字符编码可变长类型,长度为30,非空;
第一作者:普通编码定长字符类型,长度为10,非空;
出版日期:小日期时间型;
价格:定点小数,小数部分1位,整数部分3位。
create table 图书(
书号 nchar(6) primary key,
书名 nvarchar(30) not null,
第一作者 char(10) not null,
出版日期 smalldate,
价格 numeric(4,1)
)
(2)“书店”表结构如下:
书店编号:统一字符编码定长类型,长度为6,主键;
店名:统一字符编码可变长类型,长度为30,非空;
电话:普通编码定长字符类型,8位长,每一位的取值均是0~9的数字;
地址:普通编码可变长字符类型,40位长。
邮政编码:普通编码定长字符类型,6位长。
create table 书店(
书店编号 nchar(6) primary key,
店名 nvarchar(30) not null
电话 char(8) check(电话 like ‘[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]’),
地址 varchar(40),
邮政编码 char(6)
)
(3)“图书销售”表结构如下:
书号:统一字符编码定长类型,长度为6,非空;
书店编号:统一字符编码定长类型,长度为6,非空;
销售日期:小日期时间型,非空;
销售数量:小整型,大于等于1。
主键为(书号,书店编号,销售日期);
其中“书号”为引用“图书表”的“书号”的外键;
“书店编号”为引用“书店表”的“书店编号”的外键。
create table 图书销售(
书号 nchar(6) not null,
书店编号 nchar(6) not null,
销售日期 samlldate,
销售数量 smallint check(销售数量 >= 1),
primary key(书号, 书店编号, 销售日期),
foreign key(书号) references 图书(书号),
foreign key(书店编号) references 书店(书店编号)
)
2.为图书表添加“印刷数量”列,类型为整数,同时添加取值大于等于1000的约束。
Alter table 图书 add 印刷数量 int check(印刷数量 >= 1000)
3.删除书店表中的“邮政编码”列。
Alter table 书店 drop column 邮政编码
4.将图书销售表中的“销售数量”列的数据类型改为整型。
Alter table 图书 alter column 销售数量 int