精华内容
下载资源
问答
  • 知识点:数据库表的相关概念、创建数据库表的方法、设计数据库表、向数据库表中插入数据、建立不同数据库表之间的关系、删除数据库表。 1、数据相关的一些概念 1.1 数据库里的数据是如何保存的? 数据库...

    知识点:数据库表的相关概念、创建数据库表的方法、设计数据库表、向数据库表中插入数据、建立不同数据库表之间的关系、删除数据库表。

     

    1、数据表相关的一些概念

     

    1.1 数据库里的数据是如何保存的?

            数据库到底是怎么存储数据的?比如要把学生信息存储到数据库里,能把学生塞进数据库吗?肯定是把学生的数据信息抽象出来,把一些重要信息以文字或数字的形式保存到数据库中去。

           具体是怎么保存的,有点类似于excel,是用一张二维表的形式来进行数据保存的。这里有两个名词需要注意,行(称之为记录),列(称之为字段)。表中一条记录表示现实中的一个实体(学生)。所以以后的重点就是围绕这个表来进行设计,设计他的列。这个就是存储数据的概念。

     

     

    • 记录:数据库中存储的数据表格,每一“行”(Row)实际上对应一个实体(如每一行都对应一个名人),在数据库中,通常叫作一条“记录”(Record)。
    • 字段:表格中的每一个“列”,如编号、姓名、性别、职业、代表角色/作品等,在数据库中,通常称之为“字段”。

     

    1.2  数据冗余

     

    数据冗余:在一个数据集合重复的数据称为数据冗余

            在数据库系统中,数据冗余是指数据之间的重复(比如上面学生信息表中,3条记录中都出现了“演影视剧表演”),也可以说是同一数据存储在不同数据文件中的现象(比如还有一个表,学生成绩表(该表的字段有姓名、专业、成绩),那么可以看到专业这个字段出现在两个表中,并且等同于它在其本来所属表的意义表示,那么这个字段就是一个冗余字段)。

     

    减少数据冗余最常见的方法是分类存储

           比如,对上面的学生信息表进行调整,先制作一个专业编码表,然后再制作一个学生信息统计表。

     

           通过这样的方法,可以减少数据冗余,但是会增加查找数据的复杂性。比如,要查找专业为“主持人”的学生信息,原来只需要查找一个表就可以了。而现在则需要先在“专业编码表”里查询,专业为“主持人”的编码是多少,然后再到学生信息表里查到对应的人。这样一来,就增加了查找的复杂性,降低了效率。因此,在数据库中,通常允许有必要的冗余

     

    1.3 数据完整性

           数据完整性是指数据库中数据的准确性,如果多个表互相关联,那么只要修改其中一个表,与之相关的所有表都要做出相应的修改。否则数据将不再准确,也就失去完整性。(比如上面的职业编码表,将计算机专业对应的编码改为5,那么对应的学生信息表里的信息也要对应发生变化,否则就会出问题。)

            数据准确性是通过数据库表的设计和约束来实现的。例如在“学生信息表”中,如果不对表中存储的年龄信息加以限制(约束),那么学生的年龄可能会出现负数(录入错误等原因),这样的数据就不具备完整性。

             为了实现数据完整性,SQLServer提供了四种类型的约束:实体完整性约束、域完整性约束、引用完整性约束、自定义完整性约束。

    (1)实体完整性约束

    实体的概念:数据库表中的每一行数据都是一个实体。

    什么是实体完整性?实体完整性是指数据库表中行的完整性,即要求每一行数据都是唯一的不重复的。

    如何保证实体完整性?(后面详细讲解)

    • 设置主键约束:每个数据库表有且仅有一个主键,每一个主键值必须唯一,而且不允许为“空”(NULL)或重复。
    • 设置唯一键约束:唯一键在一张表中可以有多个,并且唯一键允许字段数据为NULL。
    • 设置标识列属性:标识列又称标识符列,习惯上又叫自增列。(保证了不会重复且不会为空)

     

    (2)域完整性约束

    域的概念:域就是字段,数据库表中的每一列都是一个域/字段。

    什么是域完整性?域完整性指的是必须保证字段的值是合理的。即数据库表中的列必须满足某种特定的数据类型或约束。其中约束又包括取值范围、精度等规定。

    如何保证域完整性?可以使用CHECK约束、UNIQUE约束、default默认值、identity自增、not null/null保证列的值域的完整性。

     

    (3)引用完整性

    引用的概念:一个表中的某个字段引用另一个表中的字段,被引用的表称为主表,引用表称为从表或外键表。

    什么是引用完整性?引用完整性也叫参照完整性,引用完整性指被主表中的主关键字和从表中的外部主关键字之间的关系。引用完整性是保证从表中外键列不会出现主表中对应主键列没有的项。

     

           举例:上面两张表“专业编码表”和“学生信息表”,观察他们有什么关系?“学生信息表中”的专业字段所对应的编号,引用自“专业编码表”中的专业编码字段。这时候这两张表之间就有了引用和被引用的关系。

    • 被引用的表“专业编码表”   ——主表。(用来约束其他表
    • 引用数据的表“学生信息表”——从表(或外键表)。(被主表约束
    • 建立主外键联系的字段之间的类型和意义必须一致(主表中的专业编码字段和从表中的专业字段,类型和意义必须一致)。
    • 主表中建立关系的字段必须是主键或者唯一键。
    • 删除主表数据:从表如果没有引用所要删除的主表数据,则可以删除。否则会报错。(先删除从表相关记录,再删除主表数据)

     

    (4)自定义完整性

    自定义的概念:用户自己定义规则。

    什么是自定义完整性?自定义完整性,也称域完整性规则,是对数据表中字段属性的约束。包括字段的值域、字段的类型和字段的有效规则(如小数位数)等约束,是由确定关系结构时所定义的字段的属性决定的。如,百分制成绩的取值范围在0~100之间等。再比如输入性别信息时,只允许输入“男”或“女”。

     

    1.4 主键(Primary Key)

            如果在表中存储了很多行数据,就会引发这样的问题:如何判断表中没有重复的数据行?这时就需要有一个列,这一列的值能够唯一标识表中的每一行(即一条记录),用来强制实现表的实体完整性,这样的列称之为表的“主键”。

     

            数据库主键:指的是一个列或多列的组合,其值能唯一地标识表中的每一行,通过它可强制表的实体完整性。主键主要是用于和其他表的外键关联,以及本表记录的修改与删除。

    比如:
    学生表(学号,姓名,性别,班级)
    其中每个学生的学号是唯一的,学号就是一个主键

    专业表(专业编码,专业)
    其中课程编号是唯一的,课程编号就是一个主键

    注意:

    • 一个表只能有一个主键,并且主键列不允许出现空值(NULL),尽管有的表中允许没有主键,但是通常情况下,建议为表设置一列为主键。
    • 如果两列或多列组合起来唯一地标识表中的每一行,则该主键也叫作“复合主键”。
    • 在同一张表中,如果有多个列可以用来当做主键,在选择哪个列做为主键时,需要考虑两个原则:最少性和稳定性

     

     

    1.5 外键(Foreign Key)

            外键是实施引用完整性的约束,外键涉及到两个以上的表。如果一张表中的某一列是引用另一张表中的主键,那么这列就成为外键。比如学生信息表里的列“专业”,不是学生信息表的主键,但是它和专业编码表里的列“专业编码”对应,并且“专业编码”列是专业编码表的主键。因此,学生信息表里的列“专业”,是该表的外键。一个表可以有多个外键。

     

    1.6 列的数据类型

           在创建数据库表时,必须为表中的每列指派一种数据类型。

    • 文本数据类型选择:

    Unicode编码:(统一码、万国码、单一码)是一种在计算机上使用的字符集。它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。

    Char、Varchar、Text储存的字符是基于ASCII编码格式,是国际化通用与标准。对于其他编码格式的字符可能会造成存储问题。Unicode字符集(万国码)就是为了解决字符集这种不兼容的问题而产生的,它所有的字符都用两个字节表示,即英文字符也是用两个字节表示。

    Nchar、 Nvarchar、Ntext存储的正是Unicode编码格式的字符。所以一般来说,如果含有中文字符,用Nchar、Nvarchar、Ntext, 如果只含英文字符,就用Char、Varchar、Text。

    Char性能好;Varchar节省空间。选择方法:10个字节以上的用Varchar。N类型的占用空间大,性能低,如果不准备存中文或中亚文字则尽量避免使用。

    • 整数类型选择:首先int,空间占用合适,运算速度快。如果非常在意空间的话,考虑tinyint,   超大应用场合,考虑bigint。

     

    2、创建数据库表

            数据表(或称表)是数据库最重要的组成部分之一。数据库只是一个框架,数据表才是其实质内容。如“教学管理系统”中,教学管理”数据库包 含分别围绕特定主题的6个数据表:“教师”表、“课程”表、“成绩”表、“学生”表、“班级”表和 “授课”表,用来管理教学过程中学生、教师、课程等信息。这些各自独立的数据表通过建立关系被联接起来,成为可以交叉查阅、一目了然的数据库。

    创建数据库表的前提:已经在SSMS中建立了数据库,这里已经提前创建好数据库SchoolDB.

    2.1 在SSMS中建立数据库表

    第一步:在对象资源管理器中,点击数据库SchoolDB前面的“+”号,展开数据库,展开表,单击数据右键,点击【表】

    第二步:系统会创建一个空白表,在右侧区域定义表的列名和数据类型、是否允许Null值以及其他属性

    第三步:对表进行设计,这里先设计一个学生信息表。(列名不允许中文,数据类型根据该列的值选中适合的数据类型。)

    第四步:设置表的主键,这里设置MajorNumber为主键。设置方法:选中第一列,单击数据右键,在弹出的下拉菜单中单击【设置主键】即可。

    主键设置成功以后,会在改列的左侧出现一个钥匙符号,代表该列是主键。

     

    2.2 保存数据库表

    第五步:保存数据库表。方法:单击工具栏上的保存按钮,或者快捷键Ctrl+S,进行保存。初次保存时会弹出保存对话框,按照提示给表起个名称,然后单击确定即可。这里给表起名Student。

    刷新对象资源管理器,可以看到新创建的表。

     

    2.3 完善表的设计结构

    1、是否允许为空值

           数据库表的列是否允许为空,也是一种约束。如果该列允许为空,那么在输入数据行的时候,这一列的值可以不输入。比如注册账号的时候,一些非必填项,用户可以不填写。

     

    2、建立主键

           确定了列的名称、数据类型和是否允许为空后,表的基本框架就完成了。建立主键的方法在上面第四步已经详细说明,这里不再重复。

    思考几个问题:设置为主键的列,可以允许为空吗?一个表的主键可以由多列组成吗?列设置好以后,怎么调整顺序?

     

    3、默认值

            为了存储数据的方便,在设计表的时候,可以对一些列设置默认值。比如同一个学校的学生,地址如果不填写,默认值可以是学校地址,比如教师的级别如果不输入,默认值可以是“讲师”。

           表的默认值能够未某一列定义一个值,当用户没有在某一列中输入数据时,则将定义的值赋值给这一列。

           举例,在表中新添加一列,Address,设置数据类型,允许为空,并在表的下方设置默认值。

     

    4、标识列

           在很多情况下,存储的信息中很难找到不重复的信息作为表的主键。比如一个学生信息表,如果用姓名作为主键,那么在存储数据的时候,就不允许同一个班级、甚至同一个学校存在重名的学生。这样显然比较麻烦。SQL Sererver提供了一个“标识列”,来解决这样的en问题。

           标识列本身没有具体的意义,不反映诸如地址、性别这样的信息,只是用来区别不同的学生。设置标识列的方法:举例新增加一列Id,int类型,在表的下方列属性里点击“标识规范”,在(是标识)选项中点选“是”。

    注意:

    • 如果一列的数据属于数字类型(如整数),那么可以把该列定义为标识列。
    • 定义成标识列之后,还需要分别指定“标识种子”和“标识增量”,默认值都是 1。
    • 定义了标识列之后,在以后每次输入数据的时候,该列随数据行的增加而自动增加数值,并且不会重复,第一次的数字就是“标识种子”值,以后每次按照“标识增量”增加数值。
    • 标识列通常也被定义为主键,通常所说的“自动编号”就是指标识列的数字自动增加。
    • 标识列中的数据是自动生成的,不能在该列上输入数据。

    思考:标识列可以是字符串吗? 标识列可以允许空吗? 

    测试:如果标识列的标识种子是2,标识增量是3,先添加三行数据,然后删除,接着再向表中添加数据时,标识列的值会是多少?

     

     

    2.4 向表中插入数据

            数据库表设计好以后,就需要往表中添加数据了。

    方法:选择要添加数据的表,单击鼠标右键,在弹出的下拉菜单中选择【编辑前200行】

    在SSMS右侧出现添加数据,按照自己的设计添加数据就可以了。

    这里先添加两条数据,注意观察默认值和标识列、非空属性的应用。

    数据添加完成以后,要保持,在空白地方单击鼠标右键,点击【执行SQL】即可。

     

    2.5 建立表之间的关系

    准备工作:

    1、在SchoolDB数据库中新创建一个Major表。专业编号和专业名称,其中专业编号是主键。

    2、在Major表中添加专业信息(添加4条记录)

    两个表之间的关系:Student表中的Major列,引用Major表中的MajorNumber列。因此,Student表是从表,Major表是主表。

    建立两个表之间的关系:

    第一步:选中Student表中的Major列,单击数据右键,单击【关系】

    第二步:弹出一个【外键关系】对话框,点击【添加】

    第三步:点击【添加】以后,默认添加一个【关系】

    第四步:在右侧【表和列规范】后面的输入框里单击一下数据左键,出现一个按钮,单击该按钮。

    第五步:弹出一个【表和列】窗口,这个窗口是用来对关系进行设置的。这里要分清楚两个表,谁是主表、谁是从表。点击选择设置主键表是Major里的MajorNumber列,外键吧是Student里的Major列。然后单击【确定】

    单击确定后【表和列】窗口会关闭,直接在【外键关系】窗口单击【关闭】即可。

    第六步:由于刚才的Student表已经有了改动,单击保存,在弹出的【保存】窗口中,单击【是】。

    此时两个表之间已经建立了关系。

    思考:向Student表中插入数据,测试如果Major列输入数字5,是否可以?实际演练一下看看结果。

     

     

    2.6 建立数据库关系图

            要查看表之间的关系,可以在 SQL Server Management Studio 中展开该数据库(SchoolDB),右击“数据库关系图”,在弹出的快捷菜单中选择“新建数据库关系图”选项,然后根据提示信息新建数据库关系图,在向导中选择要显示关系的表。

    第一步:选择【数据库关系图】,单击鼠标右键,选择【新建数据库关系图】。

    第二步:弹出提示框,选择【是】。

    第三步:在弹出的【添加表】窗口中,将有关系的表全部选中,然后点击【添加】

    第四步:系统创建数据库表关系图。(注意观察不同符号)

    第五步:保存数据库关系图,单击工具栏保存按钮,弹出【选择名称】窗口,起个名字,然后单击【确定】即可。

    此时可以看到关系图文件已经保存

     

     

    2.7 建立检查约束

             检査约束也叫作 CHECK 约束,用于定义列中可接受的数据值或者格式,在设计表的时候,在快捷菜单中选择“CHECK 约束”选项,然后在弹出的“CHECK 约束”对话框中单击“添加”按钮,将添加一个新的约束。

    举例:设置Student表中Age列的值为18~30

    设置方法:

    第一步:重新设计Student表。在SchoolDB数据库中找到Student表,单击鼠标右键,选择【设计】

    第二步:选中Age列,单击鼠标右键,选择【CHECK约束】

    第三步:弹出【检查约束】窗口,在窗口上点击【添加】按钮

    第四步:系统新添加一个约束,点击右侧表达式后面的输入框,然后点击最右侧的按钮

    第五步:在弹出的【CHECK约束表达式】窗口中,添加对应的表达式,然后点击【确定】

    第六步:点击【检查约束】窗口上的【关闭】按钮

    第七步:保存Student表,单击工具栏保存按钮即可。

    第八步:验证CHECK约束。方法:选中Student数据表表单击右键选择【编辑前200行】,添加一行数据,如第三行,在填写Age列的值是填写16,全部填写完成要进入下一行填写时,提示错误,错误提示与CHECK约束起冲突。

     

     

    2.8 删除数据库表

            对于不再使用的数据库表,可以删除以释放磁盘空间,右击该表,在弹出的快捷菜单中选择“删除”选项可以把该表直接删除。对于建立主外键关系的表,若要删除主表,则首先要删除相关的从表以保证数据的引用完整性。

    举例:直接删除Major表时,提示删除失败,因为有外键约束。

     

     

     

     

    =================这里是结束分割线======================

    展开全文
  • (1)理解并掌握数据库中的一些基本概念,包括:数据库定义、数据定义和数据类型等。 (2)理解并掌握关系型数据库标准SQL语言。 (3)掌握并熟练使用数据库的创建语句。 3.数据库完整性 (1)理解...

     数据库及数据库中表的建立实验  

    一、实验目的

    1.数据库的服务操作命令

    (1)熟悉上机环境MySQL以及Navicat。

    (2)掌握如何启动MySQL服务以及登录MySQL的方法。

    2.数据库、表的创建

    (1)理解并掌握数据库中的一些基本概念,包括:数据库的定义、数据表的定义和数据类型等。

    (2)理解并掌握关系型数据库标准SQL语言。

    (3)掌握并熟练使用数据库,表的创建语句。

    3.数据库完整性

    (1)理解关系数据库三类完整性约束的基本概念。

    (2)掌握实现实体完整性、参照完整性、用户自定义完整性的方法。

    4.数据库的安全性

    (1)掌握数据库安全性的概念。

    (2)MySql数据库的安全性需要通过账户管理来保证,掌握MySql提供的语句进行创建用户、删除用户和权限管理的操作。

    二、实验内容

    1.熟悉上机环境。

    2.建立学生-课程数据库

    其中包括以下三个表:

    学生表:Student(Sno,Sname,Ssex,Sage,Sdept)

    课程表:Course(Cno,Cname,Cpno,Ccredit)

    学生选课表:SC(Sno,Cno,Grade)

    Student

    学号Sno

    姓名Sname

    性别Ssex

    年龄Sage

    所在系Sdept

    201215121

    李勇

    20

    CS

    201215122

    刘晨

    19

    CS

    201215123

    王敏

    18

    MA

    201215125

    张立

    19

    IS

    Course

    课程号Cno

    课程名Cname

    先行课Cpno

    学分Ccredit

    1

    数据库

    5

    4

    2

    数学

     

    2

    3

    信息系统

    1

    4

    4

    操作系统

    6

    3

    5

    数据结构

    7

    4

    6

    数据处理

     

    2

    7

    PASCAL语言

    6

    4

    SC

    学号Sno

    课程号Cno

    成绩Grade

    201215121

    1

    92

    201215121

    2

    85

    201215121

    3

    88

    201215122

    2

    90

    201215122

    3

    80

    3.实现上述关系数据库的整体性约束。

    4.安全性控制——用户和权限控制:

    (1)创建名为xxxxxxxxxxx,密码为xxx的用户;

    (2)授予用户名为xxxxxxxxxxx,密码为xxx的用户使用所有数据库stu的所有权限,并允许他向其他人授予这些权限;

    (3)撤销用户xxxxxxxxxxx的所有权限;

    (4)将用户名为xxxxxxxxxxx的用户重命名为xxx;

    (5)删除用户名为xxx的用户。

    三、实验环境

    (1)Windows10系统

    (2)MySQL5.7

    (3)Navivcat MySQL:一个MySQL数据库服务器管理和开发工具。

    四、实验前准备

    (1)提前在自己的笔记本电脑上将实验所需环境安装好。

    下载MySQL5.7-->安装-->配置环境变量-->下载安装Navicat for MySQL。

    (2)理解并掌握数据库的基本概念。

    A.数据库(Database):是按照数据结构来组织、存储和管理数据的仓库,是存储在一起的相关数据的集合。

    B.数据库系统(DataBase System,DBS):是采用数据库技术的计算机系统,是由数据库(数据)、数据库管理系统(软件)、数据库管理员(人员)、硬件平台(软件)5部分构成的运行实体。

    C.数据库管理系统(DataBase Management System,DBMS):是数据库管理系统的一个重要组成部分,是位于用户与操作之间的一层数据管理软件,负责数据库中的数据组织、数据操纵、数据维护和数据服务等。

    D.数据库常用对象:

    表:是包含数据库中所有数据的数据库对象,由行和列组成,用于组织和存储数据。

    字段:表中每列称为一个字段。

    (3)预习MySQL数据库的基本操作语句以及数据库完整性的实现方法。

    (4)预习数据库安全性控制的措施及实现。

    五、实验步骤及实验结果

    1、MySQL服务的操作命令(命令行输入):

    service mysql start|stop|restart|status

    start:启动服务

    stop:停止服务

    restart:重启服务

    status:查看服务状态

    (1)启动与关闭mysql服务器:

    启动:net start mysql

    退出:exit

    (2)连接服务器:

    mysql -uroot -pmysql

    2、数据库、表的创建

    (Navicat命令列界面,由于其环境限制,截图有一些不清晰)

    (1)查看当前服务器上管理的所有数据库:

    mysql>show databases; 

    (2)创建数据库:

    mysql>create database 库名; 

    数据库创建好后,可以使用show create database 库名;声明查看数据库 的定义。

    (3)选择数据库:

    mysql>use 库名;

    (4)查看当前选择的数据库:

    mysql> select database(); 

    (5)创建表

    注意:在创建表之前,应该先选择数据库。

    create table <表名>(

    字段名1,数据类型 [列级别约束条件] [默认值],

    字段名2,数据类型 [列级别约束条件] [默认值],

    .......

    );

    常见属性含义:

    PRIMARY KEY :主键;

    unique :唯一;

    not null/null :非空/空;

    AUTO_INCREMENT :自动加载;

    default :如果没有填写自动补写默认信息。

    A.表student

    a.创建:

    b.表结构

    B.表course

    a.创建

    b.表结构

    C.表SC

    a.创建:

    b.表结构:

    3、关系的完整性(Navicat命令列界面)

    (1)实体完整性——主键约束

    主键:能够唯一地标识表中地一条记录。

    要求:主键列的数据唯一,并且不允许为空。

    分类:单字段主键/多字段联合主键。

    A.单字段主键

    a.在定义列的同时指定主键:

    字段名 数据库类型 PRIMARY KEY [默认值]

    例:sno char(9) primary key, /*列级完整性约束条件,sno是主码*/

    b.在定义完所有列之后指定主键:

    [constraint <约束名>] primary key [字段名]

    例:primary key(sno)

    注意:

    如果发现主键设置错了,第一步,先删除主键:alter table student drop primary key;第二步,再增加主键:alter table student add primary key(sno);

    B.多字段联合主键

    primary key [字段1,字段2,......,字段n]

    例:PRIMARY KEY(sno,cno)

    (2)参照完整性——外键约束

    外键:一个表可以有一个或多个外键。其对应的是参照完整性,一个表的外键可以为空值,若不为空值,则每一个外键值必须等于另一个表中主键的某个值。

    注意:定义外键后,不允许删除在另一个表中具有关联关系的行。

    作用:保持数据的一致性、完整性。

    主表(父表):对于两个具有关联关系的表而言,相关联字段中主键所在的那个表。

    从表(子表):对于两个具有关联关系的表而言,相关联字段中外键所在的那个表。

    A.创建外键:

    [CONSTRAINT <外键名> ] FOREIGN KEY 字段名1 [,字段名2,...]

    REFERENCES <主表名> 主键列1 [,主键列2,...]

    注意:一个表中不能有相同名称的外键。

    说明:参照表与被参照表可以是同一个表。

    外键:

    B.为已经添加好的数据表添加外键:

    alter table 表名 add constraint FK_ID foreign key(你的外键字段名) REFERENCES 外表表名(对应的表的主键字段名);

    例: alter table tb_active add constraint FK_ID foreign key(user_id) REFERENCES tb_user(id);

    (3)用户自定义完整性——以非空约束为例

    创建课程course信息表,并为其cname字段添加非空约束,代码如下:

    表的结构如下所示:

    4.安全性

    (1)创建用户CREATE USER:

    创建名为xxxxxxxxxxx,密码为xxx的用户:

    (2)权限授予GRANT:

    授予用户名为xxxxxxxxxxx,密码为xxx的用户使用所有数据库stu的所有权限,并允许他向其他人授予这些权限:

    (3)撤销权限REVOKE:

    撤销用户xxxxxxxxxxx的所有权限:

    (4)重命名用户RENAME USER:

    将用户名为xxxxxxxxxxx的用户重命名为xxx:

    (5)删除用户DROP USER:

    删除用户名为xxx的用户:

     

     

     

    展开全文
  • 是指数据库的同一对象不同的关系表中的数据是符合逻辑的, 例如 学生所选的课程必须是学校开设的课程 学生所在的院系必须是学校已经成立的院系 数据库的完整性 数据的正确性和相容性 数据的完整性和安全性是两个...

    关注公众号凡花花的小窝,收获更多的考研计算机专业编程相关的资料
    第二十一讲 数据库的安全性
    数据库完整性
    数据的正确性
    是指数据是符合现实世界的语义,反映了当前实际的状况
    例如:
    学生学号必须唯一
    性别只能是男或者女
    成绩的取值范围是0-100
    数据的相容性
    是指数据库的同一对象在不同的关系表中的数据是符合逻辑的,
    例如
    学生所选的课程必须是学校开设的课程
    学生所在的院系必须是学校已经成立的院系
    数据库的完整性
    数据的正确性和相容性

    数据的完整性和安全性是两个不同概念
    数据的完整性
    防止数据库中存在不符合语义的数据,也就是防止数据库中存在不正确的数据
    防范对象:不合语义的、不正确的数据
    数据的安全性
    保护数据库防止恶意的破坏和非法的存取
    防范对象:非法用户和非法操作

    完整性是组织合法用户通过合法操作向数据库中加入不正确的数据
    安全性防范是指非法用户和非法操作存取数据库中的正确数据

    为了维护数据库的完整性,数据库管理系统必须:
    1.提供定义完整性约束的条件的机制
    完整性约束条件也称为完整性规则,是数据库中的数据必须满足的语义约束条件
    sql标准使用了一系列的概念来描述完整性,包括关系模式的实体完整性,参照完整性和用户定义完整性
    这些完整性一般是由SQL的数据定义语言语句来实现的。

    2.提供完整性检查机制
    数据库管理系统中检查数据是否满足完整性约束条件,称为完整性检查
    一般在INSERT,UPDATE,DELETE语句执行后开始检查,也可以在事务提交的时候检查

    为维护数据库的完整性,DBMS必须:
    1.提供定义完整性约束条件的机制
    2.提供完整性检查的方法
    3.违约处理

    3.违约处理
    数据库管理系统如果发现用户的操作违背了完整性约束条件,就采取一定的动作
    拒绝No action执行该操作
    级联CASCADE执行其他的操作
    由DBMS进行完整性检查的好处
    不必由应用程序来完成从而减轻了应用程序的分担,能够为所有的用户和所有的应用提供一致的数据完整性,,避免出现漏洞

    5.1实体完整性定义
    关系模型的实体完整性
    CREATE TABLE 中用PRIMARY KEY来定义
    单属性构成的码由两种说明方法
    定义为列级约束条件
    定义为表级约束条件
    对多个属性 构成的码只有一种说明方法
    定义为表级约束条件

    [例1] 将Student表中的Sno属性定义为码

    (1)在列级定义主码
    CREATE TABLE Student
    (Sno CHAR(9) PRIMARY KEY,
    Sname CHAR(20) NOT NULL,
    Ssex CHAR(2) ,
    Sage SMALLINT,
    Sdept CHAR(20));

    (2)在表级定义主码
    CREATE TABLE Student
    (Sno CHAR(9),
    Sname CHAR(20) NOT NULL,
    Ssex CHAR(2) ,
    Sage SMALLINT,
    Sdept CHAR(20),
    PRIMARY KEY (Sno)
    );

    eg.2将SC表中的Sno和Cno属性定义为码
    CREATE TABE SC
    (Sno CHAR(9) NOT NULL,
    Cno CHAR(4) NOT NULL,
    Grade SMALLINT,
    PRIMARY KEY(Sno,Cno),只能在表级定义主码
    );
    5.1.2实体完整性检查和违约处理
    插入或者对主码列进行更新操作的时候,关系数据库管理系统按照实体完整性规则进行检查
    检查主码值是否唯一,如果不唯一则拒绝插入或者修改
    检查主码的各个属性是否为空,只要有一个为空就拒绝插入或者修改
    检查记录中主码值是否唯一的一种方法是进行全表扫描

    依次判断表中的每一条记录的主码值与将要插入记录的主码值(或者修改的新主码值)是否相同
    在这里插入图片描述表扫描的缺点
    十分耗时
    为了避免对基本表 进行全表扫描,RDBMS核心一般都在主码上自动建立一个索引
    在这里插入图片描述在这里插入图片描述小结:
    什么是数据库的完整性
    RDBMS完整性控制机制的三个组成部分
    定义机制
    检查机制
    违约处理
    实体完整性
    定义方法
    检查方法以及违约处理

    5.2.1 参照完整性定义

    关系模型的参照完整性定义
    在CREATE TABLE中用FOREIGN KEY短语定义哪些列为外码
    用REFERENCES短语指明这些外码参照哪些表的主码

    如果属性或者属性组F是基本关系R的外码它与基本关系主码Ks相对应(基本关系R和S不一定是不同的关系)
    则对于R中的每一个元组在F上的值必须为:
    或者取控制(F中的每一个属性值均为空值)
    或者等于S中某个元组的主码值

    例如,关系SC中一个元组表示一个学生选修的某门课程的成绩,(Sno,Cno)是主码。Sno,Cno分别参照引用Student表的主码和Course表的主码
    [例3] 定义SC中的参照完整性
    CREATE TABLE SC
    (Sno CHAR(9) NOT NULL,
    Cno CHAR(4) NOT NULL,
    Grade SMALLINT,
    PRIMARY KEY (Sno, Cno), /在表级定义实体完整性/
    FOREIGN KEY (Sno) REFERENCES Student(Sno),
    /在表级定义参照完整性/
    FOREIGN KEY (Cno) REFERENCES Course(Cno)
    /在表级定义参照完整性/
    );
    在这里插入图片描述eg:Student表中的Sdept属性是外码,参照DEPT表的主码Deptno
    CREATE TABLE Student
    (Sno CHAR(9)PRIMARY KEY,/列级完整性约束条件,Sno是主码/
    Sname CHAR(20) UNIQUE,
    Ssex CHAR(2),
    Sage SMALLINT,
    Sdept CHAR(20) FOREIGEN KEY REFERENCES DEPT(Deptno)
    /在列级定义参照完整性/
    );
    FORGEIN KEY(Sdept) REFERENCES DEPT(Deptno)

    eg:关系SC中(Sno,Cno)是主码,Snoo,Cno分别参照Student表的主码和COURSE表的主码
    CREATE TABLE SC
    (Sno CHAR(9) NOT NULL,
    CNO CHAR(4) NOT NULL,
    Grade SMALLINT,
    PRIMARY KEY(Sno,Cno),/在表级定义实体完整性/
    FOREIGN KEY(Sno)REFERENCES Student(Sno),/在表级定义参照的完整性/
    FOREIGN KEY(Cno) REFERENCES Course(Cno),/在表级定义参照完整性/
    );

    5.2.2 参照完整性检查和违约处理

    可能破坏参照完整性的情况及违约处理
    在这里插入图片描述一个参照完整性将两个表中相应的元组联系起来
    对被参照表和参照表进行增删改操作的时候有可能破坏参照完整性。必须进行检查
    DBMS什么时候要进行参照完整性检查?
    eg:表SC和Student有四种可能破坏参照完整性
    1.
    在这里插入图片描述在这里插入图片描述
    在这里插入图片描述
    参照完整性和违约处理

    参照完整性违约处理
    1.拒绝(NO ACTION)执行
    不允许该操作执行,该策略一般设置为默认策略
    2.级联(CASCADE)操作
    当删除或者修改被参照表(Student)的一个元组造成了与参照表(SC)的不一致,则删除或者修改参照表中的所有造成不一致的元组
    在这里插入图片描述
    在这里插入图片描述3.设置为空值(SET-NULL)
    当删除或者修改被参照表的一个元组的时候造成了不一致,则将参照表中的所有造成不一致的元组的对应的属性设置为空值
    在这里插入图片描述在这里插入图片描述在这里插入图片描述
    在这里插入图片描述

    。/在这里插入图片描述[例4] 显式说明参照完整性的违约处理示例
    CREATE TABLE SC
    (Sno CHAR(9) NOT NULL,
    Cno CHAR(4) NOT NULL,
    Grade SMALLINT,
    PRIMARY KEY(Sno,Cno),
    FOREIGN KEY (Sno) REFERENCES Student(Sno)
    ON DELETE CASCADE /级联删除SC表中相应的元组/
    ON UPDATE CASCADE, /级联更新SC表中相应的元组/
    FOREIGN KEY (Cno) REFERENCES Course(Cno)
    ON DELETE NO ACTION
    /当删除course 表中的元组造成了与SC表不一致时拒绝删除/
    ON UPDATE CASCADE
    /当更新course表中的cno时,级联更新SC表中相应的元组/
    );

    小结
    参照完整性的定义方法
    CREATE TABLE…FORERIGN KEY…REFERENCE
    参照完整性的检查实际
    对被参照表和参照表进行增删改操作时
    参照完整性的违约处理
    拒绝执行
    级联操作
    设置为空值

    5.3用户定义的完整性
    用户定义的完整性是:针对某一具体应用的数据必须满足的语义要求
    关系数据库管理系统提供了定义和检验用户定义完整性机制,不必由应用程序承担

    5.3.1 属性上的约束条件的定义
    CREATE TABLE 的时候定义属性上的约束条件
    列值非空NOT NULL
    列值唯一 UNIQUE1
    检查列值是否满足一个条件表达式CHECK

    1.不允许取空值
    eg.在定义SC表的时候,说明Sno,Cno,Grade属性不允许取空值
    CREATE TABLE SC(
    SNO(CHAR(9) NOT NULL,
    CHO CHAR(4)NOT NULL,
    Grade SMALLINT NOT NULL,
    PRIMARY KEY(Sno,Cno),
    /* 如果在表级定义实体完整性,隐含了Sno,Cno不允许取空值,则在列级不允许取空值的定义就不必写了 * /

    …);

    2.列值唯一
    eg5.6建立专业表DEPT,要求专业名称Dname列取值为一而且不能取空值,专业编号Deptno列为主码
    CREATE TABLE DEPT
    (Deptno NUMERIC(2),
    Dname CHAR(9) UNIQUE NOT NULL,
    要求Dname列值唯一,并且不能取空值
    PRIMARY KEY(Deptno));

    3.用CHECK短语指定列值应该满足的条件
    eg.STUDENT表的Ssex只允许取男或者女
    CREATE TABLE Student
    (Sno char(9) primary key,
    Sname CHAR(8)NOT NULL
    Ssex CHAR(2) CHECK (Ssex IN (‘男’,‘女’)),
    性别属性Ssex只允许取男或者女
    Sage SMALLINT,
    Sdept(CHAR(20));

    EG.5.8SC表的Grade的值应该在0-100之间
    CREATE TABLE SC(
    Sno CHAR(9),
    Cno CHAR(4),
    Grade SMALLINT CHECK(Grade>=0 AND Grade<=100),
    GRADE取值范围是0-100
    PRIMARY KEY(Sno,Cno),
    FOREIGN KEY(Sno)REFERENCES Student(Sno),
    FOREIGN KEY(Cno) REFERENCES Course(Cno));

    2.属性上的约束条件检查和违约处理
    属性上的约束条件检查和违约处理
    插入元组或者修改属性的值的时候,关系数据库管理系统检查属性上的约束条件是否被满足
    如果不满足则操作被拒绝执行

    5.3.2元组上的约束条件
    1.元组上的约束条件定义
    属性上的约束条件只涉及单个属性
    CREATE TABLE Student
    (
    Sno CHAR(9) PRIMARY KEY,
    Sname CHAR(8) NOT NULL,
    Ssex CHAR(2) CHECK(Ssex IN(‘男’,‘女’)),
    Ssage SMALLINT,
    Sdept CHAR(20));

    1.元组上的约束条件
    属性上的约束条件:只涉及单个属性
    元组级限制:可以 设置不同属性之间的取值的相互约束条件
    数据库课程的学分不能低于2学分
    在CREATE TABLE 的时候可以用CHECK 子句定义元组上的约束条件
    元组上的约束条件的定义
    eg 5.9当学生的性别是男的时候,其名字不能以Ms.打头
    CREATE TABLE Student
    (Sno CHAR(9),
    Sname CHAR(8) NOT NULL,
    Ssex CHAR(2),
    Saage SMALLINT,
    Sdept CHAR(20,
    PRIMARY key(SNO),
    CHECK(Ssex=‘女’ OR Sname NOT LIKE ‘MS.%’)
    定义了元组中的sname和Ssex两个属性之间的约束条件);
    性别是女性的元组都能通过该项检查,因为Ssex=‘女’成立,
    当性别是男性的时候,要通过检查则名字一定不能以MS打头
    元组上的约束条件检查和违约处理
    插入元组或者修改属性的值的时候,关系数据库管理系统检查元组上的约束条件是否被满足
    如果不满足则操作被拒绝执行

    [例9] 当学生的性别是男时,其名字不能以Ms.打头。
    CREATE TABLE Student
    (Sno CHAR(9),
    Sname CHAR(8) NOT NULL,
    Ssex CHAR(2),
    Sage SMALLINT,
    Sdept CHAR(20),
    PRIMARY KEY (Sno),
    CHECK (Ssex=‘女’ OR Sname NOT LIKE ‘Ms.%’)
    /定义了元组中Sname和 Ssex两个属性值之间的约束条件/
    );
    性别是女性的元组都能通过该项检查,因为Ssex=‘女’成立;
    当性别是男性时,要通过检查则名字一定不能以Ms.打头

    小结
    属性上的用户定义完整性
    定义方法
    检查时机
    违约处理
    元组上的用户定义完整性
    定义方法,检查实际 ,违约处理
    在这里插入图片描述

    展开全文
  • 数据库实验一——数据库定义与操作语言实验一、实验题目二、实验内容和要求三、实验步骤(一)数据库定义实验(二)数据基本查询实验(三)数据高级查询实验(四)数据更新实验(五)视图(六)索引实验四、实验心得...

    一、实验题目

    数据库定义与操作语言实验

    二、实验内容和要求

    数据库定义与操作语言实验包含6 个实验项目,其中5 个必修实验项目, 1 个选修实验项目。其中实验项目1至5为设计型实验,实验项目6为验证型实验。
    六个实验的实验目的和内容如下:
    1.理解和掌握SQL DDL 语句的语法,特别是各种参数的具体含义和使用方法; 使用SQL 语句创建、修改和删除数据库、模式和基本表。
    2. 针对某个数据库设计各种单表查询SQL 语句、分组统计查询语句;设计单个表针对自身的连接查询,设计多个表的连接查询。
    3.针对自定义数据库,正确分析用户查询要求,设计各种嵌套查询和集合查询。
    4.针对自定义数据库设计单元组插入、批量数据插入、修改数据和删除数据等SQL语句。理解和掌握INSERT、UPDATE和DELETE语法结构的各个组成成分,结合嵌套SQL子查询,分别设计几种不同形式的插入、修改和删除数据的语句,并调试成功。
    5.针对给定的数据库模式,以及相应的应用需求,创建视图和带WITH CHECK OPTION的视图,并验证视图WITH CHECK OPTION选项的有效性。
    6.针对给定的数据库模式和具体应用需求,创建唯一索引、函数索引、复合索引等;修改索引;删除索引。设计相应的SQL查询验证索引有效性。

    三、实验步骤

    (一)数据库定义实验

    创建基本表时,为不同的列选择合适的数据类型,正确创建表级和列级完整性约束,如列值是否允许为空、主码和外码等。
    在这里插入图片描述
    这里创建了三个表,Student表中以Sno作为主码,Sname加上unique约束、Course表中Cno作为主码,Cname加上not null约束,同时引用本身的Cno(主码)为Cpno属性列(非主码)作为外码、表SC以Sno、Cno属性组作为主码,同时Sno引用自Student的主键Sno,Cno引用自Course表的主键Cno;
    数据库testdb与三个表都创建成功;
    在这里插入图片描述
    注意:数据完整性约束,可以在创建基本表时定义,也可以先创建表然后定义完整性约束。由于完整性约束的限制,被引用的表要先创建。

    (二)数据基本查询实验

    已经向三个表中填充了一些元组,可以进行基本的查询操作;
    实验重点:分组统计查询、单表自身连接查询、多表连接查询。
    2.1.查询指定列(投影)、选择 在这里插入图片描述

    2.2. 不带分组过滤条件 和 带分组过滤条件的分组统计查询
    在这里插入图片描述
    前者查询选修每门课程的选修人数,后者查询平均成绩大于等于80的学生学号与他的平均成绩,两者都用到了GROUPY BY分组查询,后者还用到HAVING过滤条件;
    在这里插入图片描述
    2.3. 两表连接 与 自身连接
    在这里插入图片描述
    两表连接查询student、sc表中Sno相同的并且将元组连接,而后者同样如此但却将相同的属性仅保留一个,从结果也可以看出;
    在这里插入图片描述
    2.4. 三表连接
    在这里插入图片描述
    可以看到,三表连接涉及到Student、Course、SC三个表,目的是将所有的学生信息查询出来,计算查询表示将查询的结果(某一列的值)经过计算得到新的值打印出来;
    在这里插入图片描述

    (三)数据高级查询实验

    针对自定义数据库,正确分析用户查询要求,设计各种嵌套查询和集合查询。
    实验难点:嵌套查询、相关子查询、多层EXIST嵌套查询。
    3.1. 相关子查询与不相关子查询
    相关子查询表示子查询的查询条件依赖于父查询,不相关子查询则相反;
    在这里插入图片描述
    第一个查询表示不相关子查询,第一步的查询确定刘晨所在的系名,第二部查询是查找所有在CS系中的学生,第一部查询嵌入到第二部查询中,先执行子查询再进行父查询;
    第二个查询是相关子查询,旨在找出每个学生查过他自己选修课程平均成绩的课程号;
    X是表SC的别名,用来表示SC的一个元组,内层循环是求一个学生所有选修课程平均成绩,至于是哪一个学生的平均成绩需要看x.Sno的值,与父查询相关;
    其中该语句的执行过程如下:
    ①外层查询中取出SC的一个元组x,将x的Sno传入内层查询
    ②执行内层查询,得到平均值,用该值代替内层查询,得到外层查询
    ③执行该外层查询
    (与刘晨同系学生)
    3.2. 谓词ANY查询 和 带EXISTS的查询
    子查询返回单值时可以用比较运算符,返回多值时要用ANY;
    EXISTS代表存在量词,带有该谓词的子查询不返回任何数据,只产生逻辑真或假。
    在这里插入图片描述
    前者为带ANY谓词的查询,查找非计算机系中比任意一个计算机系学生年纪小的学生姓名与学号。后者为带EXISITS的查询,查询所有选修了1号课程的学生。
    在这里插入图片描述
    3.3. 多层嵌套EXISTS 与 集合查询
    与EXISTS相对应的就是NOT EXISTS谓词,若内层查询结果为空,则外层的WHERE字句返回真值,否则返回假值。
    SLELE语句的查询结果是元组的集合,所以多个SELETE语句的结果可进行集合操作,包括并操作UNION、交操作INTERSET和差操作EXCEPT。
    注意,参加集合操作的各查询结果列数必须相同,对应项的数据类型也必须相同。
    在这里插入图片描述
    多层嵌套EXISTS查询,查询了全部课程的学生学号、姓名;它表达的语义为;不存在这样的课程y,学生201215122选修了y,而学生x没有选。
    集合UNION查询,查询了计算机科学系的学生与年龄不大于19岁学生的并集,简单的将两个SELETE查询结果并起来;
    在这里插入图片描述

    (四)数据更新实验

    熟悉数据库的数据更新操作,能够使用SQL语句对数据库进行数据的插入、修改、删除操作。
    实验重点:插入、修改和删除数据的SQL。
    实验难点:与嵌套SQL子查询相结合的插入、修改和删除数据的SQL语句;利用一个表的数据来插入、修改和删除另外一个表的数据。
    4.1. 插入数据
    在这里插入图片描述
    插入操作比较简单,使用insert into语句即可;
    但需要注意的是:我们插入的信息需要满足各个表的约束条件,如UNIQUE、PRIMARY KEY条件等;
    在这里插入图片描述
    4.2. 与嵌套子查询相结合的插入
    在这里插入图片描述
    这里建立一个表dept_age用于存储各个系的平均年龄;
    然后使用与嵌套子查询相结合的插入方式对Student表按系分组求平均年龄,再把结果存入新表中;
    在这里插入图片描述
    4.3. 单条更新与批量更新数据
    在这里插入图片描述
    UPDATE语句用于修改指定表中的元组,SET自居给出的表达式的值用于取代相应的属性列值,省略WHERE则表示要修改表中所有元组。
    上面的语句中前者更新一条课程数据,将Cpno为8的元组的Cpno修改为2;
    后者省略where语句,将表中所有语句的Sage加1;
    在这里插入图片描述

    4.4.单条删除与批量删除
    在这里插入图片描述
    DELETE语句的功能是从指定的表中删除满足WHERE子句条件的所有元组,省略Where子句则表示删除表中全部元组,但表定义仍在。
    在这里插入图片描述
    在这里插入图片描述
    4.5. 带子查询的删除
    在这里插入图片描述
    子查询同样可以嵌套在DELETE语句中,用于构造执行删除操作的条件。
    上述语句为删除MBA系所有学生的选课记录。
    在这里插入图片描述
    注:对某个基本表中数据的增、删、改操作有可能会破坏参照完整性!

    (五)视图

    熟悉SQL语言有关视图的操作,能够熟练使用SQL语句来创建需要的视图,定义数据库外模式,并能使用所创建的视图实现数据管理。
    实验重点:创建视图。
    实验难点:可更新的视图和不可更新的视图的区别, WITH CHECK OPTION的验证。
    5.1. 创建视图(带和不带检查选项)
    在这里插入图片描述
    与创建表的方法类似,关键字为CREATE VIEW;
    子查询可以是任意的SELECT语句,是可以包含ORDER BY子句和DISTINCT短语的;
    WITH CHECK OPTION表示对视图进行UPDATE、INSERT、DELETE操作时要保证更新、插入、删除的行满足视图定义中的谓词条件。
    第一个不带检查选项的视图是信息系学生的视图,忽略了IS_Student的列名,隐含了由子查询中三个列名组成。
    第二个带检查选项的视图是成年学生的学号、年龄组成的视图,当我们对视图数据进行更改时需要首先判断是否可行。
    在这里插入图片描述
    5.2. 验证WITH CHECK OPTION选项
    在这里插入图片描述
    我们从adult视图中删除一个元素,那么如果可以删除对应的表中的元组同样会删除;
    在这里插入图片描述
    删除失败!
    这里失败的原因在于student中的Sno 201215121已经被SC表引用作为SC表的外键了,因此不能删除;
    这里可以看出OPTION CHECK OPTION选项有效。
    5.3. 分组视图
    在这里插入图片描述
    用带有聚集函数和GROUPY BY字句查询来定义视图,这种视图成为分组视图。
    上述语句中,将学生的学号以及平均成绩定义为一个视图;
    AS语句中的SELECT语句的目标列平均成绩是通过作用聚集函数得到的,所以CREATE VIEW中必须明确定义组成S_G视图的各个属性列名。S_G是一个分组视图。
    在这里插入图片描述
    5.4. 可更新与不可更新视图
    由于视图是不实际存储数据的虚表,因此对视图的更新最终要转换为对基本表的更新。
    在这里插入图片描述
    前者将信息系学生视图IS_Student中学号为201215125的学生年龄改为19。
    在这里插入图片描述
    更新成功;
    而后一个更新是对视图S_G表中学号为201515121的学生平均成绩改为90;
    在这里插入图片描述
    可以看到,更新一个无法更新的表必然失败!
    关系数据库中,并不是所有视图都是可更新的,有些视图的更新不能唯一的有意义地转换成对相应基本表地更新。
    上面对S_G地更新无法转换成对基本表的更新,因为系统无法修改各科成绩使得平均成绩为90。

    5.5. 视图消解
    在这里插入图片描述
    视图消解就是指将对视图的操作转换成对基本表的操作。
    (视图)(表)
    两者结果相同,视图消解一致。

    (六)索引实验

    为了验证索引效果,要求实验数据集达到10万条记录以上的数据量,因此我在MySql官网中下载了employees数据库并且导入到我的本机Mysql中。
    在这里插入图片描述
    6.1.展示索引
    在这里插入图片描述
    通过SHOW函数来展示出当前表的索引;
    在这里插入图片描述
    此时有处于主键上的索引,类型为BTREE;
    6.2.唯一索引
    在这里插入图片描述
    通过指定UNIQUE字段来创建唯一索引,但是这里的emp_no并不是UNIQUE约束类型的,含有很多重复元素,因此无法创建成功:
    在这里插入图片描述
    6.3.简单索引和复合索引
    在这里插入图片描述
    简单索引就是在单列上进行创建的,而复合索引则是在两列或两列以上创建。
    在这里插入图片描述
    这里可以看到创建索引需要的时间很多,说明索引是需要消耗资源的。

    6.4.使用索引与不使用索引的对比
    在这里插入图片描述
    可以看到,这里通过ignore index字段来指示查询忽略主键,同时通过EXPLAIN来判断是否有使用索引;

    • 使用索引(EXPLAN语句查询是否使用索引)
      在这里插入图片描述

    • 不使用索引(ignore index)
      在这里插入图片描述
      可以看出,使用索引后速度是不使用索引的27倍左右,提高的效率百分比为276.3%;

    四、实验心得

    本次实验通过实践学习了书本上对于数据库的DDL语句的语法、使用SQL 语句创建、修改和删除数据库的语句,SQL 查询语句,SQL嵌套查询和集合查询等各种高级查询,SQL语句对数据库进行数据的插入、修改、删除操作,创建视图和带WITH CHECK OPTION的视图,尤其是掌握索引设计原则和技巧,能够创建合适的索引以提高数据库查询,收获巨大。
    不过碍于实验内容过多,最近太忙,不能非常完整的完成每一个实验所涉及的所有细节,比较遗憾,希望下次实验有充足的时间进行设计、修正。

    展开全文
  • SQL数据定义功能包括定义数据库、基本、索引和视图。 首先,让我们了解一下SQL所提供的基本数据类型:(如^00100009b^) 1.数据库的建立与删除 (1)建立数据库数据库是一个包括了多个基本的数据集,其...
  • SQL数据库中数据的定义和数据查询

    千次阅读 2015-10-24 22:17:08
    SQL数据定义功能包括定义数据库、基本、索引和视图。 首先,让我们了解一下SQL所提供的基本数据类型:(如^00100009b^) 1.数据库的建立与删除 (1)建立数据库数据库是一个包括了多个基本的数据集,其...
  • 数据库表的约束

    千次阅读 热门讨论 2014-06-19 19:25:57
    设计数据库时,为了确保数据库表中数据的质量,需要考虑数据的完整性(数据的完整性是指数据的正确性和一致性)。举个例子:当你要为学生建立一个基本信息StudentInfo时,这个中学生的名字可以相同但是学号...
  • 数据库关系集合必须由数据库定义语言DDL来定义,包括:数据库模式、关系模式、每个属性的值域、完整性约束、每个关系的索引值、关系的物理存储结构。 SQL数据定义语言包括: 数据库的定义:创建、修改、删除 基本...
  • 数据库表设计 数据库表结构设计方法及原则(li)  数据库设计的三大范式:为了建立冗余较小、结构合理的数据库,设计数据库时必须遵循一定的规则...如果数据库表中的所有字段值都是不可分解的原子值,就说明该数...
  • 数据库技术——数据定义与查询

    千次阅读 2019-06-18 15:04:48
    数据定义与查询一、数据定义1、模式的定义与删除a、定义模式b、删除模式2、基本定义、删除与修改a、定义基本b、数据类型c、模式与d、修改基本e、删除基本3、索引的定义与删除a、建立索引b、修改索引c、...
  • 数据库表的复杂操作

    千次阅读 2017-07-02 13:52:50
    50个常用的sql语句 Student(S#,Sname,Sage,...SC(S#,C#,score) 成绩表 Teacher(T#,Tname) 教师 问题: 1、查询“001”课程比“002”课程成绩高的所有学生的学号;  select a.S# from (select s#,scor
  • 创建学生: 第一种: create table student (sno char(5) primary key,/*学号*/ /*可以直接指定主键*/ sname char(20) not null,/*姓名*/ ssex char(3) not null,/*性别*/ sage integer not null,/*年龄...
  • 数据库

    千次阅读 2017-03-25 18:08:20
    关系完整性是为保证数据库中数据的正确性和相容性,对关系模型提出的某种约束条件或规则。...包括限制类型(数据类型),格式(通过检查约束和规则),可能值范围(通过外键约束,检查约束,默认值定义,非空约束和
  • 1.实验题目:数据定义 2.实验目和要求: 掌握数据的创建,修改,删除的方法 熟悉常用数据类型 掌握索引的创建,删除。通过实验理解唯一索引,聚簇索引 掌握视图的概念,视图的创建和删除 掌握利用视图进行...
  • 数据库表的设计基础

    2011-12-16 10:43:22
    数据库设计的三少原则: 1、 数据的数目要少 2、 数据的字段要少 3、 组合主键的字段要少 正确认识数据冗余: 数据冗余可以简单的分为低级冗余和高级冗余。低级冗余就是字段的重复出现;对于一个已经...
  • sql server基础语法 创建数据库 创建

    千次阅读 多人点赞 2019-03-23 23:18:08
    现有表中添加标识4.创建外键5.添加外键6.约束7.创建局部临时8.创建全局临时9.创建具有check约束字段的数据库表10.创建含有计算字段的数据库表11.创建含有自动编号字段的数据库表12.创建含有排序字段和默认值...
  • 数据库完整性5.1 实体完整性5.1.1 实体完整性定义5.1.2 实体完整性检查和违约处理5.2 参照完整性5.2.1 参照完整性定义5.2.2 参照完整性检查和违约处理小结5.3 用户定义的完整性5.3.1 属性上的约束条件不允许取空值...
  • 数据库视频—数据库的管理

    千次阅读 热门讨论 2017-09-10 16:26:10
    数据库管理  (1)数据库收缩时,不可以直接用sql语句修改数据库的大小,而应该用管理工具,右击需要收缩的数据库,点击任务选择收缩。      原因:因为如果直接用代码收缩数据库时,不知道数据库已经用了...
  • 本篇博客分享SQL语言视图操作--详细实践学习报告(以截图方式展示),大家多多捧场咯! 软件:Oracle SQL Developer 目录 1、学生-课程数据库 ...1、视图是从一个或几个基本(或视图)导出的。 2、视图是...
  • 和数据完整性 是SQL Server数据库中最重要的数据对象,也是构建高性能数据库的基础。程序开发与应用过程是存储数据的基本单元...数据库中的所有数据都存放按行与格式组织的表中,数据类型是数据的...
  • 管理数据库 函数和存储过程 用户和权限管理 MySQL架构 存储引擎 服务器选项,系统和状态变量 优化查询和索引管理 锁和事务管理 日志管理 备份还原 MySQL集群 22.1 关系型数据库基础 数据库的发展...
  • 第三章关系数据库标准语言SQL之数据定义
  • SQL语句详解------数据库表

    千次阅读 2017-09-11 18:28:36
    把之前零零散散的SQL资料整理了一下。 总结了一些SQL语句的使用。 感谢所有为我提供帮助的博客,太多太久远,无法一一标明,望谅解。 一.需要的的数据库表 ...SC(Sid,Cid,score) 成绩表 Teacher(Tid,Tname) 教师
  • 数据库SQL SERVERsql常用语句

    千次阅读 2017-03-30 16:40:24
    DDL —数据定义语言 (Create , Alter , Drop , DECLARE) DML —数据操纵语言 (Select , Delete , Update , Insert) DCL —数据控制语言 (GRANT , REVOKE , COMMIT , ROLLBACK) ...
  • 数据库应用技术系列第一讲 1 创建数据库快照 CREATE DATABASE数据库快照名 ON( NAME = 逻辑文件名, FILENAME = '操作系统文件名' ) AS SNAPSHOT OF源数据库名 例:创建test1数据库的快照test1_s1 CREATE ...
  • 数据库数据库概论

    千次阅读 2015-05-03 12:40:31
    数据库地位数据库技术产生于六十年代末,是数据管理的最新技术,是计算机...数据数据(Data)是数据库中存储的基本对象 数据的定义 描述事物的符号记录 数据的种类 文本、图形、图像、音频、视频、学生的档案记录、货物的
  • 数据库链接

    2014-12-26 20:33:34
    定义:联合查询(连接查询)的表中需要有数据类型和长度都相同的属性,称为“连接属性”,实现查询的时候需要两个数据的连接属性相同。 比如两个:学生(学号,姓名,年龄)和学习(学号,课程号,成绩),...
  • 基本更新---TABLE(1)插入数据---INSERT INTO① 插入元组② 插入子查询结果(2)修改数据---UPDATE SET① 修改某一个元组的值(3)删除数据 ---DELETE① 删除某一个元组的值② 删除多个元组的值③ 带子查询的删除...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 11,281
精华内容 4,512
关键字:

在数据库的表定义中限制成绩属性列