SQLServer数据库数据库技术研究解决计算机信息处理过程中大量数据有效地组织和存储的问题,在数据库系统中减少数据存储冗余,实现数据共享,保障数据安全以及高效地检索数据和处理数据。相互关联的数据的集合数据库中的数据不是孤立的,数据与数据之间是相互关联的。也就是说,在数据库中不仅要能够表示数据本身,还要能够表示数据与数据之间的联系数据冗余小、可供多个用户共享数据库中的数据可以共享但是是可控制、受约束的教务文件后勤文件……学生基本情况冗余!冗余带来什么问题?能够保证数据的安全、可靠数据库技术要能够保证数据库中的数据是安全、可靠的。有效地防止数据库中的数据被非法使用或非法修改数据遭到破坏时能立刻将数据完全恢复最大限度地保证数据的正确性保证数据正确的特性在数据库中称之为数据完整性。允许并发地使用在多个用户同时使用数据库时,能够保证不产生冲突和矛盾,保证数据的一致性和正确性。什么是数据库?数据库是长期储存在计算机存储设备上、相互关联的、可以被用户共享的数据集合:是相互关联的数据的集合用综合的方法组织数据,保证尽可能高的访问效率具有较高的数据独立性具有较小的数据冗余,可供多个用户共享具有安全控制机制,能够保证数据的安全、可靠最大限度地保证数据的正确性允许并发地使用,能有效、及时地处理数据,并能保证数据的一致性和完整性1.1数据库系统简介数据管理是指对数据的组织、存储、维护和使用等。数据管理的方法分为三个阶段:人工管理阶段、文件管理阶段和数据库系统阶段。1.2数据库系统的组成一个数据库系统(DatabaseSystem)一般是由数据库(Database)、数据库管理系统(DatabaseManagementSystem,DBMS)以及数据库用户组成。广义地说,数据库系统是由计算机硬件、操作系统、数据库管理系统以及在它支持下建立起来的数据库、数据库应用程序、用户和维护人员组成的一个整体。1.2.1数据库1.数据库的基本概念数据库是存储在计算机系统内的有结构的数据的集合。这些数据是被数据库管理系统按一定的组织形式存放在各个数据库文件中的。数据库是由很多数据库文件以及若干辅助操作文件组成的。2.数据库的基本模型基本的数据库模型有三种:网状数据库模型、层次数据库模型和关系型数据库模型。关系型数据库模型是以二维矩阵来存储数据的,行和列形成一个关联的数据表。1.2.2数据库管理系统数据库管理系统是指在操作系统的支持下帮助用户建立、使用和管理数据库的软件系统。通常包含数据描述语言、数据操作语言以及管理和控制程序三个组成部分。1.数据描述语言(DataDescriptionLanguage)用来描述数据库的结构,供用户建立数据库。2.数据操作语言(DataManipulationLangUage,DML)供用户对数据库进行数据的查询(数据的检索和统计等)和处理(数据的增加、删除和修改等)等操作。3.管理和控制程序包括安全、通信控制和工作日志等。1.2.3数据库系统的用户1.系统程序员2.数据库管理员3.应用程序员4.操作员1.2.4数据库系统的网络结构1.MainFrame大型数据库2.本地小型数据库3.分布式数据库4.客户机/服务器数据库三层C/S结构发送命令处理命令后请求数据返回数据处理数据后返回结果ClientApplicationServerDatabaseServer表示服务的最小商业逻辑商业逻辑数据访问和管理1.3关系型数据库关系型数据库是指一些相关的表和其他数据库对象的集合。在关系型数据库中,信息存放在二维表格结构的表中,一个关系型数据库包含多个数据表,每一个表包含行(记录)和列(字段)。关系型数据库都有多个表。关系型数据库所包含的表之间是有关联的,关联性由主键、外键所体现的参照关系实现。关系型数据库不仅包含表,还包含其他数据库对象,例如关系图、视图、存储过程和索引等。SQLServer2000常用数据对象1、表表是存放数据对象的二维表格,按列和行存储数据。数据库的大部分工作室处理表,每个表支持4中操作:查询、插入、更新、删除。2、视图视图是浏览数据的方式,并不表明数据的存储。视图和表很相似,可以用来检索特定的数据,但是不存储数据,只是存放SQL命令,记录如何检索表中的数据,打开视图时,SQL执行这些命令,形成虚拟表。虚拟表只在使用时存在,使用完毕后撤销。3、存储过程存储过程和视图很相似,也是存放SQL命令。但存储过程的主要目的不是为了浏览数据,而是对数据进行处理。如果经常要对表中的数据做相同的处理,并且处理过程比较复杂,则可以考虑将处理数据的命令组织成存储过程,以后每次只需要执行存储过程即可。(存储过程的命令,系统会经过编译,提高执行效率。)4、触发器触发器是一种特殊的存储过程。触发器可以自动响应用户的操作,也可以强制复杂的业务规则或要求。UPDATE、INSERT和DELETE等操作可以触发触发器。1.3.2关系型数据库与表关系型数据库是由多个表和其他数据库对象组成的。表是一种最基本的数据库对象,是由行和列组成的,表中的每一行通常称为一条记录,表中的每一列称为一个字段,表头的各列给出了各个字段的名称。横的一行称为一个记录纵的一列称为一个字段表头给出字段名图1-1学生信息表数据完整性在SQLServer中,根据数据完整措施所作用的数据库对象和范围不同,可以将数据完整性分为以下几种:1、实体完整性(主键、唯一性约束)2、参照完整性(外键约束)3、域完整性(check、默认值约束)4、用户定义的完整性主键约束使用数据表中的一列数据或者多列数据来唯一的标识一行数据。也就是说,在数据表中不能存在主键相同的两行数据,而且主键约束下的列不能为空(NULL),在创建表时,最好每个数据表都拥有自己唯一的主键,主键也可以由几个列组合成。每个表只能有一个主键。不能定义TEXT或IMAGE数据类型的字段列为主键。1.3.3主键与外键SSMS创建主键的步骤①在创建表结构的时候,选定列名或列名组合(shift键),在所选列上右击弹出相应菜单,如右图所示。②单击有钥匙图标的菜单项。③创建成功后该列名前出现一个小钥匙形状的图标如右图所示。外键(ForeignKey)约束外键约束定义了表之间的关系,主要用来维护两个表之间的一致性。出于某种关联的需要,当一个表需要引用另一个表的主键作为自己的一个字段时,我们称这个引用来的字段为外键。这样,当主键更新或删除时,其它所有表中与这个主键关联的外键也将被相应的更新或删除。当向外键所在的表插入或更新数据(外键字段)时,如果与外键表相关联的主键表的主键中无与插入或更新的外键有相同的值时,系统会报错并拒绝插入或更新数据。不能定义TEXT或IMAGE数据类型的列为外键。外键约束例如,“班级”表中的列“班号”是“班级”表的主键,而“学生”表中的“班号”是“学生”表的外键,学生必须属于一个特定的班级,一旦在设计数据库表时,确定了“班级”表和“学生”表的主键与外键的这种关系,在给“学生”表输入数据时,学生所在的“班号”必须存在于“班级”表中,否则,该学生的数据无法输入到系统中,这有效地避免了无意间数据录入的错误,保证了数据库中数据的完整性。*学号姓名性别籍贯出生日期班号学生表1.用EnterpriseManager建表的步骤如下:创建了“班级”表和“学生”表之间的一个关系。保存建立表之间的引用关系:建立表之间关系图步骤如下:1)启动“企业管理器”,展开“数据库”文件夹,选中要为其创建表之间关系的数据库,并将该数据库展开,用鼠标右键单击“关系图”“新建数据库关系图”。单击“下一步”。建立表之间关系图步骤如下:2)选择要添加的表,单击“下一步”。单击“完成”。建立表之间关系图步骤如下:3)整理,保存,完成“教学管理”表之间的关系图。唯一性(UNIQUE)约束可以使用UNIQUE约束确保在非主键列中不输入重复的值。尽管UNIQUE约束和PRIMARYKEY约束都强制唯一性,但想要强制一列或多列组合(不是主键)的唯一性时应使用UNIQUE约束而不是PRIMARYKEY约束。可以对一个表定义多个UNIQUE约束,但只能定义一个PRIMARYKEY约束。而且,UNIQUE约束允许NULL值,这一点与PRIMARYKEY约束不同。不过,当与参与UNIQUE约束的任何值一起使用时,每列只允许一个空值。FOREIGNKEY约束可以引用UNIQUE约束。SSMS创建惟一约束右击表名称,选择快捷菜单中的“设计”,进入表结构修改状态。单击工具栏处“管理索引和键”按钮,进入惟一约束设置界面,单击添加按钮,定义类型为“唯一键”选定惟一约束的列,为惟一约束定义标识名,完成后关闭窗体。默认值约束如果插入行时没有为列指定值,默认值则指定列中使用什么值。默认值可以是计算结果为常量的任何值,例如常量、内置函数或数学表达式。若要应用默认值,可以通过在CREATETABLE中使用DEFAULT关键字来创建默认值定义。这将为每一列分配一个常量表达式作为默认值。默认值必须与要应用DEFAULT定义的列的数据类型相配。例如,int列的默认值必须是整数,而不能是字符串。后续版本的MicrosoftSQLServer将删除该功能。请避免在新的开发工作中使用该功能,并应着手修改当前还在使用该功能的应用程序。SSMS中设置默认值约束CHECK约束通过限制列可接受的值,CHECK约束可以强制域的完整性。此类约束类似于FOREIGNKEY约束,因为可以控制放入列中的值。但是,它们在确定有效值的方式上有所不同:FOREIGNKEY约束从其他表获得有效值列表,而CHECK约束通过不基于其他列中的数据的逻辑表达式确定有效值。例如,可以通过创建CHECK约束将成绩列中值的范围限制为从0到100之间的数据。这将防止输入的成绩值超出正常的成绩范围。可以通过任何基于逻辑运算符返回TRUE或FALSE的逻辑(布尔)表达式创建CHECK约束。对于上面的示例,逻辑表达式为:grade=0ANDgrade=100。可以将多个CHECK约束应用于单个列。还可以通过在表级创建CHECK约束,将一个CHECK约束应用于多个列。使用SSMS删除CHECK约束1、在对象资源管理器中,右键单击具有CHECK约束的表,再单击“修改”。此时,将在表设计器中打开该表。2、在“表设计器”菜单中,单击“CHECK约束”。3、在“CHECK约束”对话框中,从“选定的CHECK约束”列表中选择约束。4、单击“删除”按钮。使用SSMS删除CHECK约束CHECK约束限制输入到一列或多列中的可能值,只有符合条件与格式的数据才能存放字段,通过检查输入表列的数据的值来维护值域的完整性。检查约束通过对一个逻辑表达式的结果进行判断来对数据进行检查,对于单独一列可使用多个CHECK约束,按约束创建的顺序对其检查。一个表可以定义多个检查约束,但每个CREATETABLE语句只能为每列定义一个检查约束;在每次插入记录或修改记录时,检查约束会做相应检查;自动编号字段不能应用检查约束。1.3.5表的关联表之间的关联方式分为以下3种类型。1.一对一关联(one-to-one)设在一个数据库中有A、B两个表,对于表A中的任何一条记录,表B中只能有一条记录与之对应;反过来,对于表B中的任何一条记录,表A中也只能有一条记录与之对应,则称这两个表是一对一关联的。2.一对多关联(one-to-many)设在一个关系型数据库中有A、B两个表,对于表A中的任何一条记录,表B中可能有多条记录与之对应;反过来,对于表B中的任何一条记录,表A中却只能有一条记录与之对应,则称这两个表是一对多的关联。(a)学生表一(b)学生表二(c)成绩表(d)课程表图1-3关系型数据库表的关联3.多对多关联(many-to-many)设一个关系型数据库中有A、B两个表,对于表A中的任何一条记录,表B中可能有多条记录与之对应;反过来,对于表B中的任何一条记录,表A中也有多条记录与之对应,则称这两个表是多对多关联的。第二章关系数据库标准语言SQL表1SQL语言的动词SQL功能动词数据定义CR