sql server 如何限制某一列值的数值长度 如:在某一数据库中图书证号必须是6位数字???谢谢啦

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql server 如何限制某一列值的数值长度 如:在某一数据库中图书证号必须是6位数字???谢谢啦相关的知识,希望对你有一定的参考价值。

速发展,使它们已经成为现代信息技术的重要组成部分,是现在计算机信息系统和计算机应用系统的基础和核心。对于任何一个企业来说,数据是企业重要的资产,如何有效利用这些数据,对于企业发展起着极其重要的作用。随着我国市场经济的迅速发展和人们生活水平的不断提高,图书馆藏书的树木逐渐增大,这也挑战了图书管理方面的技术,以前的人工管理方式已经不再适应现在的环境,取而代之的是先进的图书管理系统,通过使用PowerBuilder创建的图书管理系统可以让管理人员方便而快捷的进行管理、查询、借阅、录入等工作。
2.需求分析
2.1系统目标
图书管理信息系统是典型的信息管理系统(MIS),其开发主要包括后台数据库的建立和维护以及前端应用程序的开发两个方面。对于前者要求建立起数据一致性和完整性强.数据安全性好的库。而对于后者则要求应用程序功能完备,易使用等特点。
系统开发的总体任务是实现各种信息的系统化,规范化和自动化。
2.2需求定义
图书馆管理系统开发。系统开发的总的设计目标是实现图书管理的系统化、规范化和自动化,实现对图书资料的集中统一的管理。
本系统主要实现对图书馆信息的管理,主要功能为管理有关读者、图书、借阅、查询、删除和管理员的信息等。本系统结构分为读者类别管理、读者档案管理、图书类型管理、图书档案管理以及图书流程管理,读者管理可以浏览读者的信息,可以对读者信息进行维护。图书管理可以浏览图书的信息,可以对图书信息进行维护。借阅管理可以显示当前数据库中书籍借阅情况,可以对借阅信息进行维护。本系统主要解决的问题是利用关键字对数据库进行查询。
其系统的功能模块图如下:

图2-1 系统功能模块图

针对一般图书管理信息系统的需求,通过对图书管理工作过程的内容和数据流程分析,设计如下面所示的数据项:

读者信息
属性:读者学号,读者姓名,读者性别,联系电话,所在院系,生效日期,失效日期,违章状况,累计借书
主键:读者学号
书籍信息
属性:ISBN,书名,作者,出版社,出版日期,简介
主键:ISBN
管理员信息
属性:工作号,姓名,性别,电话,家庭住址
主键:工作号
2.3数据流程
2.3.1 读者
作为学生对图书管理系统的要求有:
1. 能按各种方式(比如书名、编号、作者)查询图书馆的藏书情况。
2. 能够方便地借阅图书、续借图书、归还图书。
3. 能够查询自己的基本资料、借阅图书情况。
4. 能够熟悉图书管理系统的使用。
读者进入系统工作的流程图为:

2-1进入系统工作的流程图
2.3.2 图书管理员
作为图书管理员,他们对图书管理系统的要求有:
1. 能方便的对图书进行录入登记,注销陈旧的书籍。
2. 能够方便地对新生进行登记,或注销已经毕业的学生信息(基本信息,借阅信息)。
3. 能够随时发布一些诸如各学院学生借阅图书超期情况、馆内藏书情况、借情况等信息,以便各学院能够随时获知本院学生的一些借书信息。
图书管理员工作的流程图为:

2-2图书管理员工作流程图
3.功能描述
系统功能分析是在系统开发的总体任务的基础上完成。本系统需要完成的功能主要有5部分:
(1) 图书基本情况的录入,修改,删除等基本操作。
1.书籍类别标准的制定,类别信息的输入,包括类别编号,类别名称,关键词,备注信息等。
2.书籍类别信息的查询,修改,包括类别编号,类别名称,关键词,备注信息等。
3.书籍信息的输入,包括书籍编号,书籍名称,书籍类别,作者名称,出版社名称,出版日期,书籍页数,关键词,登记日期,备注信息等。
(2) 办理借书卡模块。
1.新生办理借书证。
2.丢失办理借书证。
(3) 实现借书功能。
1.借书信息的输入,包括借书信息编号,读书编号,读者姓名,书籍编号,书籍名称,借书日期,备注信息等。
2.借书信息的查询,修改,包括借书信息编号,读者编号,读者姓名,书籍编号,书籍名称,借书日期,备注信息等。
(4) 实现还书功能。
1.还书信息的输入,包括还书信息编号,读者编号,读者姓名,书籍编号,书籍名称,借书日期,还书日期,备注信息等。
2.还书信息的查询和修改,包括还书信息编号,读书编号,读者姓名,书籍编号,书籍名称,借书日期,还书日期,备注信息等。
(5) 能方便的对图书进行查询。对超期的情况能自动给出提示信息
4.概念模型设计
各部分E-R图如下:
(1)读者信息类别实体E-R图

4-1 读者类别实体E-R图

(2)书籍信息类别实体E-R图

4-2 书籍类别实体E-R图

(3)图书借阅实体E-R图:

4-3 图书借阅实体E-R图

(4)投诉管理实体E-R图:

4-4 投诉管理实体E-R图

4-5实体之间关系的E-R图

借阅关系(读者、管理员、书籍三元关系)

图4-6 CDM图

5.逻辑模型设计和优化
从理论‘E-R模型’到理论‘关系模型’的整理转换,通过E-R模型到关系模型的转化,可以得到如下关系模式:
借阅关系
属性:工作号,读者学号,ISBN,是否续借,借书日期,还书日期,备注。
主键:工作号,读者学号,ISBN
管理员_书籍关系
属性:工作号,ISBN,添加时间,是否在馆
主键:工作号,ISBN
管理员_学生关系
属性:工作号,读者学号,确认借还
主键:工作号,读者学号
通过由概念模型设计得到CDM图powerdesigner转换成对应的PDM图:

PDM图

5.1图书信息表
列名 数据类型 可否为空
ISBN varchar 否
书名 varchar 否
作者 varchar 否
出版社 varchar 是
出版日期 datetime 是
简介 varchar 是

5.2 读者信息表
列名 数据类型 可否为空
读者学号 varchar 否
读者姓名 varchar 否
读者性别 varchar 否
联系电话 varchar 是
所在院系 varchar 否

5.3 管理员信息表
列名 数据类型 可否为空
工作号 varchar 否
姓名 varchar 否
性别 varchar 否
电话 varchar 是
家庭住址 varchar 是

5.4 借阅表
列名 数据类型 可否为空
工作号 char 否
ISBN char 否
读者学号 char 否
借阅日期 datetime 否
还书日期 datetime 否
是否续借 char 否

5.5 管理员_书籍
列名 数据类型 可否为空
工作号 char 否
ISBN char 否
添加时间 datatime 是
是否在馆 char 是

5.6 管理员_学生
列名 数据类型 可否为空
工作号 char 否
读者学号 char 否
借还确认 char 否

6.物理设计和实施
从理论‘关系模型’到实现\实施‘数据库建立’,物理文件的安排和建立索引
6.1 建立索引
为了提高在表中搜索元组的速度,在实际实现的时候应该基于键码建立索引是各表中建立索引的表项:

(1)读者信息(读者学号)
(2)书籍信息(ISBN)
(3)管理员信息(工作号)
(4)借阅(工作号,读者学号,ISBN)
(5)管理员_书籍(工作号,ISBN)
(6)管理员_学生(工作号,读者学号)

6.2 SQL语句
如下所示:
/*==============================================================*/
/* Table: 书籍信息 */
/*==============================================================*/
create table 书籍信息
(
ISBN char(20) not null,
书名 char(20),
作者 char(10),
出版社 char(15),
出版日期 char(30),
简介 char(160),
constraint PK_书籍信息 primary key (ISBN)
);

/*==============================================================*/
/* Index: 书籍信息_PK */
/*==============================================================*/
create unique index 书籍信息_PK on 书籍信息 (
ISBN ASC
);

/*==============================================================*/
/* Table: 投诉 */
/*==============================================================*/
create table 投诉
(
工作号 char(10) not null,
学号 char(10) not null,
投书意见 char(100),
投诉日期 char(30),
受诉日期 char(30),
constraint PK_投诉 primary key (工作号, 学号)
);

/*==============================================================*/
/* Index: 投诉_PK */
/*==============================================================*/
create unique index 投诉_PK on 投诉 (
工作号 ASC,
学号 ASC
);

/*==============================================================*/
/* Index: 投诉_FK */
/*==============================================================*/
create index 投诉_FK on 投诉 (
工作号 ASC
);

/*==============================================================*/
/* Index: 投诉2_FK */
/*==============================================================*/
create index 投诉2_FK on 投诉 (
学号 ASC
);

/*==============================================================*/
/* Table: 登记 */
/*==============================================================*/
create table 登记
(
工作号 char(10) not null,
学号 char(10) not null,
ISBN char(20) not null,
证书日期 char(30) not null,
还书日期 char(30) not null,
违章状况 char(160),
累计借书 char(160),
备注 char(160),
constraint PK_登记 primary key (工作号, 学号, ISBN)
);

/*==============================================================*/
/* Index: 登记_PK */
/*==============================================================*/
create unique index 登记_PK on 登记 (
工作号 ASC,
学号 ASC,
ISBN ASC
);

/*==============================================================*/
/* Index: 登记_FK */
/*==============================================================*/
create index 登记_FK on 登记 (
工作号 ASC
);

/*==============================================================*/
/* Index: 登记2_FK */
/*==============================================================*/
create index 登记2_FK on 登记 (
学号 ASC
);

/*==============================================================*/
/* Index: 登记3_FK */
/*==============================================================*/
create index 登记3_FK on 登记 (
ISBN ASC
);

/*==============================================================*/
/* Table: 管理员信息 */
/*==============================================================*/
create table 管理员信息
(
工作号 char(10) not null,
姓名 char(10),
性别 char(5),
电话 char(15),
所在院系 char(25),
constraint PK_管理员信息 primary key (工作号)
);

/*==============================================================*/
/* Index: 管理员信息_PK */
/*==============================================================*/
create unique index 管理员信息_PK on 管理员信息 (
工作号 ASC
);

/*==============================================================*/
/* Table: 读者信息 */
/*==============================================================*/
create table 读者信息
(
学号 char(10) not null,
姓名 char(10),
性别 char(5),
电话 char(15),
所在院系 char(25),
constraint PK_读者信息 primary key (学号)
);

/*==============================================================*/
/* Index: 读者信息_PK */
/*==============================================================*/
create unique index 读者信息_PK on 读者信息 (
学号 ASC
);
7.主要数据操纵语句
7.1管理员操作
(1)注册(register)
INSERT INTO 管理员 (工作号,姓名,性别,电话,家庭住址,备注)
VALUES(#工作号,#姓名,#性别,#电话,#家庭住址,#备注)
说明:在登记操作后,管理员得到一个唯一的工作号,可以根据这个工作号采查询和修改数据。
(2)注销(unregister)
DELETE
FROM Provider
WHERE(工作号=#工作号);
(3)修改个人信息(update)
UPdate 管理员
Set (工作号=#工作号,姓名=#姓名,性别=#性别,电话=#电话,家庭住址=#家庭住址)
WHERE(工作号=#工作号)
(4)增加书籍(addbooks)
INSERT INTO 图书 (ISBN,书名,作者,出版社,出版日期,简介,)
VALUES(#ISBN,#书名,#作者,#出版社,#出版日期,#简介,#备注) INSERT INTO
管理员_书籍表(工作号,ISBN,添加时间,是否在馆)
VALUES(#工作号,#ISBN,#添加时间,#是否在馆)
(5)删除书籍(deletebooks)
DELETE 图书
WHERE(ISBN =# ISBN)
(6)修改书籍(updatebooks)
UPDATE 图书(书名=#书名, 作者=#作者, 出版社=#出版社, 出版日期=
#出版日期, 简介=#简介)
WHERE(ISBN =# ISBN)

7.2读者操作
(1)注册(register)
INSERT INTO 读者(读者学号,读者姓名,读者性别,联系电话,所在系,
生效日期,失效日期,违章状况,累计借书,备注)
VALUES(#读者学号,#读者姓名,#读者性别,#联系电话,#所在系,
#生效日期,#失效日期,#违章状况,#累计借书,#备注)
说明:在登记操作后,读者得到一个唯一的ID,可以根据这个ID来查询和修改自己的信息。
(2)注销(unregister)
DELETE 读者
WHERE(读者学号=#读者学号)
(3)修改个人信息(update)
UPDATE 读者 Set(读者姓名=#读者姓名,联系电话=#联系电话,
所在系=#所在系,生效日期=#生效日期,失效日期=#失效日期,
违章状况=#违章状况,累计借书=#累计借书,备注=#备注)
WHERE(读者学号=#读者学号)
(4)查询(select)
SELECT ISBN,书名,作者,出版社
FROM图书
WHERE ISBN=#ISBN OR书名=#书名

7.3管理员对借阅关系的操作
(1)插入读者的信息(insert)
INSERT INTO 借阅(工作号,读者学号,ISBN,是否续借,借书日期,还书日期,备注)
VALUES(#工作号,#读者学号,#ISBN,#是否续借,#借书日期,
#还书日期,#备注)
(2)更新信息(update)
①更新借出信息
UPDATE借阅
SET(借书日期=#借书日期,还书日期=借书日期+30,是否续借=0)
WHERE(工作号=#工作号 AND 读者学号=#读者学号 AND ISBN =#ISBN)
UPDATE管理员_图书
SET(是否在馆=0)
WHERE(ISBN=#ISBN)
UPDATA 学生
SET (累积借书=累积借书+1)
WHERE(读者学号=#读者学号)
INSERT INTO管理员_学生(工作号,读者学号,确认借还,ISBN)
VALUES(#工作号,#读者学号,”0”, #ISBN))
②更新续借信息
UPDATE 借阅
SET(是否续借=#是否续借)
WHERE(工作号=#工作号 AND 读者学号=#读者学号 AND ISBN =#ISBN)
③更新还书信息
UPDATE管理员_图书
SET(是否在馆=1)
WHERE(ISBN=#ISBN)
UPDATE管理员_学生
SET(确认借还=”1”)
WHERE(工作号=#工作号 AND 读者学号=#读者学号 AND ISBN=#ISBN)
另外,站长团上有产品团购,便宜有保证
参考技术A 看了check意思你添加check约束。
ALTER TABLE tableName
ADD CONSTRAINT chk_column CHECK (column>=100000 AND column<=999999)
参考技术B 在sql server中可以采用增加约束的方法来固定某一字段的长度必须为某一长度。
比如:
ALTER TABLE [dbo].[tab_library]
ADD CONSTRAINT [LengthConstraint] CHECK (DATALENGTH([图书证号]) = 6)
以上alter语句中:
add是增加的意思,CONSTRAINT 是约束关键字,[LengthConstraint] 就是长度约束,
CHECK 是检查关键字,DATALENGTH([图书证号]) = 6是判断图书证号的长度是不是6位。

这样当图书证号输入不是六位就会报错,不满足精确长度约束。
参考技术C 添加约束 参考技术D 右击,check约束

SQL课堂笔记--聚合函数

 

 

 


     2017.11.13

聚合函数:
 COUNT(*)统计表中元组个数
 COUNT(属性名)统计一列中列值的个数 //不统计空值
 SUM计算一列值的总和(此列必须是数值行)
 AVG计算一列的平均值(此列必须是数值行)
 MAX求一列值中的最大值
 MIN求一列值中的最小值
    元组:每一条数据
 
 例1.求计算机专业学生的平均年龄:
  select avg(sage) as 平均年龄 from student where sdept=‘计算机‘
 
 例2.统计学校共开设课多少们课程:
  select count(*) from course
  select count(cno) from course

 例3.统计交了学费的学生人数:
  select count(*) from course --统计所有的记录:交了的没交的都被统计了
  select count(fees) from course  --统计交了的学生个数,没交的不统计

 例4:如何去掉重复的项目再统计:
  如:查询选修了课程的学生人数
   select count(distinct sno) from sc
    注:用distinct以避免重复计算学生人数
     (在access中不能用这种结构,在SQL server2008中可以)

 ex:查询选修课成绩最高分,最低分和平均分,(查询的列注意重命名为:最高分,最低分,平均分,
    结果存放在新表abc中)
  select MAX(grade) as 最高分 ,MIN (grade)最低分,AVG(grade) as 平均分 into abc from sc
 
order by 子句: 

  例5:将课程按学分升序排序:
  select * from course order by credit
  select * from course order by ccredit desc(降序)

 例6:查询选修了2课程的学生的学号和成绩,查询结果按成绩降序排序:
  select cno, sno,grade from sc where cno=2 order by grade desc
 
 例7:查询电子,计算机专业学生的姓名,专业名,结果按专业名升序,姓名降序排序:
  order by后面可以跟多个字段进行排序:
       用A1代表第一个字段,A2代表第二个字段
   1.order by A1,A2 desc    --A1升序,A2降序
   2.order by A1 asc,A2 desc     --A1升序,A2降序   asc可省略
   3.order by A1 desc,A2 desc    --A1,A2降序
  select sname AS 姓名,sdept AS 系名 from student where sdept in(‘电子‘,‘计算机‘) order by sdept,sname desc
  
group by 子句(分组之后进行统计):

 例8:查询各门课程的选修人数:
  select cno,count(*) from sc group by cno

 例9:统计男女生各有多少人:
  select ssex,count(ssex) as 人数 from student group by ssex
 
 例10:求学生的总分:
  select sno,sum(grade) as 总分 from sc group by sno

having 子句(已经分组后的元组,并不针对整张表,一般接到group by后使用):

 例11:求选课在2门以上的学生,并统计平均成绩:
  select sno, avg(grade) as average from sc group by sno having count(*)>=2
  
 例12:求选课在2门以上并且成绩及格的学生,并统计平均成绩:
  select sno,avg(grade) as average from sc where grade>=60 group by sno having count(*)>=2  --这是错误的写法
  select sno,avg(grade) as average from sc group by sno having count(*)>=2 and min(grade)>=60 --对的
  

 

----所用的表是博客文件"student表"

练习:

-- 一、在商场销售数据库“Customer”中书写SQL代码进行查询:
use Customer
go

--1、查询顾客姓名以及联系方式。
select 姓名,联系方式 from 顾客

--2、查询所有商品类别(结果中不能有重复的商品类别)。
select distinct 商品类别 from 商品

--3、查询单价在100到200之间的商品名。
select 商品名 from 商品 where 单价>100 and 单价<200

--4、查询单价在300以上的鞋类的商品名。
select 商品名 from 商品 where 商品类别=‘鞋子‘ and 单价>300

--5、查询购买了C101,D201或E301商品号的顾客号(结果中顾客号不能有重复)。
select distinct 顾客号 from 购买 where 商品号 in(‘C101‘,‘D201‘,‘E301‘)

--6、查询姓王的的顾客姓名和联系方式。
select 姓名,联系方式 from 顾客 where 姓名 like ‘王%‘

--7、查询除姓刘的以外的顾客姓名和联系方式。
select 姓名,联系方式 from 顾客 where 姓名 not like ‘刘%‘


--二.在students数据库中(已给出)用SQL查询完成下面查询:(书写sql语句)
use students
go
--1、查询考试成绩有不及格学生的学号。
select sno from sc where grade<60

--2、将课程按学分升序排序。
select * from course order by ccredit

--3、查询2号课程的成绩在前3名学生的学号 。
select top 3 sno from sc  where cno=2  order by grade desc

--4、查询各门课程的选修人数。
select cno,count(*)as 人数 from sc group by cno

--5、统计男女生各有多少人。
select ssex,count(ssex) as 人数 from student group by ssex

--6、求各学生的总分。
select sno,sum(grade) as 总分 from sc group by sno

--7、求选课在2门以上并且成绩及格的学生,并统计平均成绩。
select sno,avg(grade) as average from sc group by sno having count(*)>=2 and min(grade)>=60

--8、查询选修了2课程的学生的学号、课程号和成绩,查询结果按成绩降序排序。
select sno,cno,grade from sc where cno=2 order by grade desc

--9、查询专业人数少于2人的专业名称及人数。
select sdept,COUNT(*) as 人数 from student group by sdept having COUNT(sdept)<2

--10、查询女学生的姓名、专业名,结果按姓名升序排序,专业名降序。
select sname AS 姓名,sdept as 专业名 from student where ssex in(‘女‘)order by sname,sdept desc

 









































































以上是关于sql server 如何限制某一列值的数值长度 如:在某一数据库中图书证号必须是6位数字???谢谢啦的主要内容,如果未能解决你的问题,请参考以下文章

sql 查询某列值为 a和b

c#计算datatable中某一列值的和

SQL数据库中 如何让某一列的值自动累加1?

SQL课堂笔记--聚合函数

sql 怎样查1列多值全都在一个集合里面

sql语句更新字段里面的值,比方说 我要去掉某一列里面所有值的最后的一个字母(有空值)