完整性约束条件
- 格式:ppt
- 大小:1012.50 KB
- 文档页数:96
完整性约束实验实验目的:熟悉通迷Q射数据库进行操作完整性控制,包括三类完涮制短语、constrain子句°1. 实体完整性定义表的主码关系模型的实体完整性reate table中用primary keyt义。
定义主码的方法为定义歹U级约束条件和定义为表级约束条件两种。
⑴定义Student并将其中的noli性定义为主码。
Create table student(Sno char(7) primary key,Sname char(8) not null,Ssex char(2),Sage smallint,Sdept char(20));或者:Create table student(Sno char(7),Sname char(8) not null,Ssex char(2),Sage smallint,Sdept char(20),Primary key(sno));⑵定义bourse并将其中的no届性定义为主码。
Create table course(cno char(7) primary key,cname char(8) not null);2. 参照完整性关系模型的参照完整性^rfeate table中用foreign key语句来定义的,并references来指明外码参照的是哪些表的主码。
定义衣c,其床nc#照studen饮的主5%nq cn叠照course勺主S^nQCreate table sc(Sno char(7) not null,Cno char(7) not null,Grade smallint,Primary key(sno,cno),Foreign key(sno) references student(sno),Foreign key(cno) references course(cno))3. 用户自定义完整性用户定义的届性上的约束条件。
⑴ 列值非空。
第5章数据库完整性与安全性1. 什么是数据库的完整性?什么是数据库的安全性?两者之间有什么区别和联系?解:数据库的完整性是指数据库中数据的正确性、有效性和相容性,其目的是防止不符合语义、不正确的数据进入数据库,从而来保证数据库系统能够真实的反映客观现实世界。
数据库安全性是指保护数据库,防止因用户非法使用数据库造成数据泄露、更改或破坏。
数据的完整性和安全性是两个不同的概念,但是有一定的联系:前者是为了防止数据库中存在不符合语义的数据,防止错误信息的输入和输出,即所谓垃圾进垃圾出所造成的无效操作和错误结果。
后者是保护数据库防止恶意的破坏和非法的存取。
也就是说,安全性措施的防范对象是非法用户和非法操作,完整性措施的防范对象是不合语义的数据.2。
什么是数据库的完整性约束条件?完整性约束条件可以分为哪几类?解:完整性约束条件是指数据库中的数据应该满足的语义约束条件。
一般可以分为六类:静态列级约束、静态元组约束、静态关系约束、动态列级约束、动态元组约束、动态关系约束.静态列级约束是对一个列的取值域的说明,包括以下几个方面:①数据类型的约束,包括数据的类型、长度、单位、精度等;②对数据格式的约束;③对取值范围或取值集合的约束;④对空值的约束;⑤其他约束.静态元组约束就是规定组成一个元组的各个列之间的约束关系,静态元组约束只局限在单个元组上。
静态关系约束是在一个关系的各个元组之间或者若干关系之间常常存在各种联系或约束。
常见的静态关系约束有:①实体完整性约束;②参照完整性约束;③函数依赖约束.动态列级约束是修改列定义或列值时应满足的约束条件,包括下面两方面:①修改列定义时的约束;②修改列值时的约束。
动态元组约束是指修改某个元组的值时需要参照其旧值,并且新旧值之间需要满足某种约束条件.动态关系约束是加在关系变化前后状态上的限制条件,例如事务一致性、原子性等约束条件。
3. 试述DBMS如何实现完整性控制.解:为了维护数据库的完整性,DBMS提供了以下三种机制:①完整性约束条件定义完整性约束条件也称为完整性规则,是数据库中的数据必须满足的语义约束条件.SQL标准使用了一系列概念来描述完整性,包括关系模型的实体完整性、参照完整性和用户定义完整性。
第五章-完整性约束⽬录1. 概述数据库的完整性指数据的正确性(correctness)和相容性(compat-ability)。
正确性:指数据符合现实语义。
相容性:指同⼀对象在不同关系表中的数据是符合逻辑的。
为了维护数据库的完整性,数据库管理系统(DBMS)必须实现如下功能:定义完整性约束在SQL标准中定义了⼀系列定义完整性约束的语句。
完整性检查检查数据是否符合完整性约束条件的机制成为完整性检查。
完整性检查通常在INSERT、UPDATE、DELETE语句执⾏后开始检查,也可在事务提交时检查。
违约处理在DBMS发现⽤户的操作违背了完整性约束条件,将采取⼀定的操作。
关系数据库管理系统使得完整性控制成为其核⼼⽀持的功能,从⽽能为所有⽤户和应⽤提供⼀致的数据库完整性。
数据库完整性主要分为:实体完整性、参照完整性和⽤户定义完整性。
在下⽂中,我将逐⼀介绍上述三类完整性,并且还会介绍⼀些SQL中定义的⼀些特性。
2. 实体完整性定义实体完整性⽰例:CREATE TABLE Student(Sno CHAR(9) PRIMARY KEY, -- 在列⼀级定义主码Sname CHAR(20),Ssex CHAR(2),Sage SMALLINT,Sdept CHAR(20)PRIMARY KEY(Sno) -- 在表⼀级定义主码);实体完整性检查和违约处理使⽤PRIMARY KEY短语定义关系的主码后。
每当⽤户插⼊或更新记录时,DBMS都会⾃动进⾏实体完整性检查:检查主码是否唯⼀,若不唯⼀便拒绝插⼊或修改。
检查主码的各个属性是否为空,若存在为空便拒绝插⼊或修改。
3. 参照完整性关系模型的参照完整性在创建表时使⽤FOREIGN KEY短语定义参照关系。
定义参照完整性⽰例: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 Student(Cno) -- 定义表级参照完整性);参照完整性检查如你所知,参照完整性将两个表中相应的元组联系起来。
DATABASE@UESTC学以致用电子科技大学计算机学院胡旺scuhuwang@ 2011年3月29日星期二《数据库原理及应用》第4章完整性约束DATABASE@UESTC学以致用Click to add Title 1数据库完整性概述Click to add Title 2完整性约束的分类Click to add Title 2完整性约束的定义3Click to add Title 1完整性约束的修改4Click to add Title 1*完整性约束的验证5Click to add Title 1*数据库产品的完整性支持4DATABASE@UESTC学以致用完整性约束是加在数据库模式上的一个具体条件,它规定什么样的数据能够存储到数据库系统中。
例如:学生的年龄必须是整数,取值范围为14--29;学生的性别只能是“男”或“女”;学生的学号一定是唯一的;学生所在的系必须是学校开设的系;DATABASE@UESTC学以致用数据完整性和安全性是两个不同概念数据的完整性是为了防止数据库中存在不符合语义的数据,防止错误数据的输入和输出所造成的无效操作和错误结果。
数据的安全性是防止非法用户的非法操作所造成的对数据库的恶意破坏。
DATABASE@UESTC学以致用完整性约束条件定义机制完整性约束条件:数据模型的组成部分,约束数据库中数据的语义 DBMS应提供定义数据库完整性约束条件,并把它们作为模式的一部分存入数据库中完整性检查机制检查用户发出的操作请求是否违背了完整性约束条件违约反应如果发现用户的操作请求使数据违背了完整性约束条件,则采取一定的动作来保证数据的完整性DATABASE@UESTC学以致用按照完整性约束条件作用的对象分:类型约束属性约束关系变量约束数据库约束按照完整性约束条件声明时的位置分:列级约束表级约束两种状态静态: 对静态对象的约束是反映数据库状态合理性的约束动态: 对动态对象的约束是反映数据库状态变迁的约束,新旧值之间满足的约束DATABASE@UESTC学以致用Primary Key约束:实体完整性规则?列级约束CREATE TABLE RecipeMaster{Rno VARCHAR(10) PRIMARY KEY ,DGno VARCHAR(10),Rdatetime DATETIME}表级约束:单属性主键CREATE TABLE Medicine{Mno VARCHAR(10),Mname VARCHAR(50) NOT NULL,Mprice DECIMAL(18,2) NOT NULL,Munit VARCHAR(10),Mtype VARCHAR(10),PRIMARY KEY(Mno)}DATABASE@UESTC学以致用表级约束:多属性组合主键CREATE TABLE RecipeDetail{Rno VARCHAR(10),Mno VARCHAR(10) NOT NULL,Mamount DECIMAL(18,0),PRIMARY KEY(Rno,Mno)}UNIQUE约束定义和PRIMARY KEY约束定义不能在同一属性上PRIMARY KEY子句中的每个属性的取值都必须是NOT NULLDATABASE@UESTC学以致用列级约束CREATE TABLE Dept{DeptNo VARCHAR(10) PRIMARY KEY,DeptName VARCHAR(50) UNIQUE ,ParentDeptNo VARCHAR(10),Manager VARCHAR(10)}索引对象约束CREATE UNIQUE INDEX deptname_index ON dept(DeptName) UNIQUE与Primary Key在一个关系中,PRIMARY KEY只有一个,而UNIQUE可以声明多个 PRIMARY KEY要求属性取值不能为NULL,而UNIQUE允许属性取空值,允许多个空值同时存在在定义了UNIQUE,PRIMARY KEY 约束的属性上建立索引是十分必要的,它可以使约束的检查执行起来更有效DATABASE@UESTC 学以致用列级约束CREATE TABLE Diagnosis{DGno VARCHAR(10) PRIMARY KEY,Pno VARCHAR(10) NOT NULL ,Dno VARCHAR(10) NOT NULL ,Symptom VARCHAR(100),Diagnosis VARCHAR(100),DGtime DATETIME,Rfee DECIMAL(18,2) NOT NULL}域对象约束CREATE DOMAIN fee DECIMAL(18,2) NOT NULL ;DATABASE@UESTC学以致用表级约束CREATE TABLE Doctor{Dno VARCHAR(10),Dname VARCHAR(50) NOT NULL,Dsex VARCHAR(2),Dage INT,Ddeptno VARCHAR(10),Dlevel VARCHAR(50),Dsalary DECIMAL(18,2),PRIMARY KEY(Dno),CHECK( Dsex IN (‘男’, ‘女’)),CHECK( Dage > 0 AND Dage <60)}DATABASE@UESTC学以致用域对象约束CREATE DOMAIN rfee DECIMAL(18,2)CONSTRAINT rfee_test CHECK(VALUE >0)SQL条件约束CREATE TABLE RecipeDetail{Rno VARCHAR(10),Mno VARCHAR(10) NOT NULL,Mamount DECIMAL(18,0),PRIMARY KEY(Rno,Mno),CHECK (Mno IN (SELECT Mno FROM medicine))}上述CHECK语句实际上是定义了一个参照完整性约束一般而言,由于Check条件中允许出现包含其他关系的子查询,Check条件可能变得更复杂,也更难检测。
静态列级约束:是对一个列的取值的说明对数据类型的约束:数据的类型、长度、单位、精度等;Mysql支持数据类型的名称后面指定该类型的显示宽度;虽设置显示宽度,但仍然可以插入大于显示宽度的值。
varchar() 存储一个字符,使用2字节表示实际数据长度,一共需要3bytes物理存储空间。
VARCHAR(N)中,N指的是字符的长度对数据格式的约束:YYYY-MM-DD对于日期格式可以以字符串直接insert .字段约束:1、NULL和NOT NULL修饰符;mysql默认情况下指定字段为NULL修饰符。
2、default修饰符可以使用DEFAULT修饰符为字段设定一个默认值。
当插入记录时,忘记传该字段的值,MySQL会自动为您设置上该字段的默认值。
虽能创建成,但有警告。
如果指定字段可以为NULL,则mysql为其设置默认值NULL。
如果NOT NULL,则,MySQL对于数值类型插入0。
3、auto_increment修饰符(只适用于int字段,表明自动为该字段生成一个数(每次在上一次生成的数值上加1))在插入记录时,默认情况第一条记录的值从1开始自增。
因此,该字段不可能出现相同的值。
注意:通常情况下,auto_increment 作为id字段的约束条件,并将id 字段作为表的主键不加primary key ,则创建不成功从主键(primary key )、外键(foreign key)、唯一性约束(unique):1、设置段主键作用1、唯一标识一行;2、作为一个可以被外键所有效引用的对象(非空);3、保证数据的完整性;创建表的时候加上primary key1、2、但如果建立表后已经输入记录,表中的记录要设为主键的字段出现相同的,则此时不能设置主键成功。
2、设置多个字段的主键;1、创建表的时候设置此时的主键是由多个属性组合而成,设置时应该统一设置。
下面不能成功创建主键:(这样就与主键的唯一性相矛盾)2、表已经创建好A在创建好的表中已有一个主键,此时再创建主键(主键的唯一性)则不会成功。
数据库安全性一、内容提要数据库的安全性是指保护数据库以防止不合法的使用所造成的数据泄漏、更改或破坏。
通过本章的学习,应重点掌握:(1)安全性基本概念;(2)方法与实现。
(一)基本概念(1)安全性:是指保护数据库,防止不合法的使用,以免数据的泄露、非法更改和破坏。
计算机系统中的三类安全性:技术安全性、管理安全性、政策法律安全性。
安全性的五个级别:环境级、职员级、OS级、网络级、数据库系统级。
特别需要指出的是现代DBMS通常采用自主存取控制方法来解决安全性问题。
自主存取控制功能一般通过SQL的GRANT和REVORK语句来实现的。
(2)权限:是指用户(或应用程序)使用数据库的方式称为“权限”。
用户访问数据库的权限有读、插入、修改、删除等四种。
(3)权限的转授与回收;权限转授图。
(4)SQl中的安全性控制①视图机制,可以用来对无权用户屏蔽数据。
视图机制使系统具有三个优点:数据的安全性、数据的独立性和操作简便性。
②SQL中用户权限及其操作:六类权限(SELECT,INSERT,DELETE,UPDATE,REF—ERENCES,USAGE)授权语句(GRANT)回收语句(REVOKE)(5)数据加密法:为了更好地保证数据库的安全性,可用密码存储口令和数据,数据传输采用密码传输,防止中途被非法截获等方法。
(6)自然环境的安全性:指数据库系统的设备、硬件和环境的安全性。
二、典型题解析今有两个关系模式:职工(职工号,姓名,年龄,职务,工资,部门号)部门(部门号,名称,经理名,地址,电话号)请用SQL的GRANT和REVOKE语句(加上视图机制)完成授权定义或存取控制功能。
(1)用户王明对两个表有SElECT权力;(2)用户李勇对两个表有INSERT和DELETE权力;(3)每个职工只对自己的记录有SELECT权力;(4)用户刘星对职工表有SELECT权力,对工资字段具有更改权力;(5)用户张星具有修改这两个表结构的权力;(6)用户周平具有这两个表的所有权力(读、插入、修改、删,并具有给其它用户授权的权力;(7)用户杨兰具有从每个部门职工中SELECT最高工资、最C资、平均工资的权力,但他不能查看每个人的工资;解(1)用户王明对两个表有SELECT权力。
目录1.1.1 四个基本概念 (1)数据(Data) (1)数据库(Database,简称DB) (1)长期储存在计算机内、有组织的、可共享的大量数据的集合、 (1)基本特征 (1)数据库管理系统(DBMS) (1)数据定义功能 (1)数据组织、存储和管理 (1)数据操纵功能 (1)数据库的事务管理和运行管理 (1)数据库的建立和维护功能(实用程序) (2)其它功能 (2)数据库系统(DBS) (2)1.1.2 数据管理技术的产生和发展 (2)数据管理 (2)数据管理技术的发展过程 (2)人工管理特点 (3)文件系统特点 (3)1.1.3 数据库系统的特点 (3)数据结构化 (3)整体结构化 (3)数据库中实现的是数据的真正结构化 (4)数据的共享性高,冗余度低,易扩充、数据独立性高 (4)数据独立性高 (4)物理独立性 (4)逻辑独立性 (4)数据独立性是由DBMS的二级映像功能来保证的 (4)数据由DBMS统一管理和控制 (4)1.2.1 两大类数据模型:概念模型、逻辑模型和物理模型 (5)1.2.2 数据模型的组成要素:数据结构、数据操作、数据的完整性约束条件 (5)数据的完整性约束条件: (6)1.2.7 关系模型 (6)关系数据模型的优缺点 (7)1.3.1 数据库系统模式的概念 (7)型(Type):对某一类数据的结构和属性的说明 (7)值(Value):是型的一个具体赋值 (7)模式(Schema) (7)实例(Instance) (7)1.3.2 数据库系统的三级模式结构 (7)外模式[External Schema](也称子模式或用户模式), (7)模式[Schema](也称逻辑模式) (8)内模式[Internal Schema](也称存储模式) (8)1.3.3 数据库的二级映像功能和数据独立性 (8)外模式/模式映像:保证数据的逻辑独立性 (8)模式/内模式映象:保证数据的物理独立性 (8)1.4 数据库系统的组成 (9)数据库管理员(DBA)职责: (9)2.1.1 关系 (9)域(Domain):是一组具有相同数据类型的值的集合 (9)候选码(Candidate key) (9)全码(All-key) (9)主码(Primary key) (9)主属性 (9)2.2.1基本关系操作 (10)2.3.1 关系的三类完整性约束 (10)实体完整性和参照完整性: (10)用户定义的完整性: (10)2.3.2 实体完整性:主码不为空 (10)2.3.4 用户定义的完整性 (10)2.4.2 专门的关系运算:选择、投影、连接、除 (11)象集Zx:本质是一次选择运算和一次投影运算 (11)悬浮元组 (11)外连接 (11)左外连接 (11)右外连接 (11)除:查找在被除数R中能够完全覆盖除数S的部分[的剩余值] 11 3.1.2 SQL的特点 (11)1.综合统一 (12)2.高度非过程化 (12)3.面向集合的操作方式 (12)4.以同一种语法结构提供多种使用方式 (12)5. 语言简洁,易学易用 (12)3.3.1 模式的定义和删除 (12)CREATE SCHEMA <模式名> AUTHORIZATION <用户名> (12)DROP SCHEMA <模式名> <CASCADE|RESTRICT> (12)CASCADE(级联) (12)RESTRICT(限制) (13)3.3.2 基本表的定义、删除和修改 (13)CREATE TABLE <表名>(<列名> <数据类型>[ <列级完整性约束条件> ] (13)ALTER TABLE <表名> (13)DROP TABLE <表名>[RESTRICT| CASCADE]; (13)RESTRICT:删除表是有限制的。
表完整性约束介绍认识:约束条件和数据类型宽度⼀样,都是可选类型作⽤:⽤于保证数据的完整性、⼀致性有哪⼏种约束:primary key (PK):标识该字段为该表的主键,可以唯⼀标识的记录foreign key (FK):标识该字段为该表的外键not null:标识该字段不能为空,必须赋值unique key (UK):标识该字段的值是唯⼀的auto_increment:标识该字段的值⾃动增长(整数类型,⽽且为主键)default:为该字段设置默认值,如果插⼊时不给该字段设置值,此字段使⽤默认值。
unsigned:表⽰⽆符号zerofill:表⽰使⽤0填充例⼦:sex enum('male','female') not null default 'male' 不允许为空,默认是maleage int unsigned NOT NULL default 20 必须为正值(⽆符号)不允许为空默认是20not null 和 default是否可空,null表⽰空,⾮字符串not null - 不可空null - 可空默认值,创建列时可以指定默认值,当插⼊数据时如果未主动设置,则⾃动添加默认值mysql> create table t1(-> id int not null default 2,-> name char(18) not null);mysql> insert into t1 values(1,'游帅');Query OK, 1 row affected (0.01 sec)mysql> select * from t1;+----+--------+| id | name |+----+--------+| 1 | 游帅 |+----+--------+1 row in set (0.00 sec)练习:往表中插⼊数据的时候可以指定字段进⾏插⼊不需要全部都插insert into table1(name,id) values('egon',2);mysql> create table student(-> name varchar(10) not null,-> age tinyint unsigned not null,-> sex enum('male', 'female'),-> hobby set('a', 'b', 'c', 'd') default 'a,b');Query OK, 0 rows affected (0.02 sec)===================================================================mysql> insert into student values('游爹',18,'male','a,c,b');Query OK, 1 row affected (0.00 sec)=================================================================mysql> select * from student;+--------+-----+------+-------+| name | age | sex | hobby |+--------+-----+------+-------+| 游爹 | 18 | male | a,b,c |+--------+-----+------+-------+1 row in set (0.00 sec)unique:唯⼀单列唯⼀:限制某⼀个字段是唯⼀的=====================⽅法1==========================mysql> create table t1(-> name varchar(20) unique-> );Query OK, 0 rows affected (0.03 sec)mysql> insert into t1 values('游爹');Query OK, 1 row affected (0.00 sec)mysql> insert into t1 values('游爹');ERROR 1062 (23000): Duplicate entry '游爹' for key 'name'mysql> select * from t1;+--------+| name |+--------+| 游爹 |+--------+1 row in set (0.00 sec)=====================⽅法2==========================⽅法⼆:create table department2(id int,name varchar(20),comment varchar(100),constraint uk_name unique(name));联合唯⼀:在语句的最后⽤括号的形式表⽰哪⼏个字段组合的结果是唯⼀的mysql> create table server(-> id int primary key,-> ip varchar(15),-> port tinyint,-> unique(ip,port)-> );Query OK, 0 rows affected (0.03 sec)mysql> insert into server values(1,'127.0.0.1',8080);ERROR 1264 (22003): Out of range value for column 'port' at row 1mysql> insert into server values(1,'127.0.0.1',10);Query OK, 1 row affected (0.01 sec)mysql> select * from server;+----+-----------+------+| id | ip | port |+----+-----------+------+| 1 | 127.0.0.1 | 10 |+----+-----------+------+1 row in set (0.00 sec)mysql> insert into server values(2,'127.0.0.1',10);ERROR 1062 (23000): Duplicate entry '127.0.0.1-10' for key 'ip' primary key限制效果跟 not null + unique 组合效果⼀致⾮空且唯⼀单列做主键==================⽅法⼀:not null+uniquecreate table department1(id int not null unique, #主键name varchar(20) not null unique,comment varchar(100));mysql> desc department1;+---------+--------------+------+-----+---------+-------+| Field | Type | Null | Key | Default | Extra |+---------+--------------+------+-----+---------+-------+| id | int(11) | NO | PRI | NULL | || name | varchar(20) | NO | UNI | NULL | || comment | varchar(100) | YES | | NULL | |+---------+--------------+------+-----+---------+-------+rows in set (0.01 sec)====================⽅法⼆:#⽅法⼆:在某⼀个字段后⽤primary keycreate table department2(id int primary key, #主键name varchar(20),comment varchar(100));mysql> desc department2;+---------+--------------+------+-----+---------+-------+| Field | Type | Null | Key | Default | Extra |+---------+--------------+------+-----+---------+-------+| id | int(11) | NO | PRI | NULL | || name | varchar(20) | YES | | NULL | || comment | varchar(100) | YES | | NULL | |+---------+--------------+------+-----+---------+-------+rows in set (0.00 sec)=====================⽅法三:在所有字段后单独定义primary key create table department3(id int,name varchar(20),comment varchar(100),constraint pk_name primary key(id); #创建主键并为其命名pk_namemysql> desc department3;+---------+--------------+------+-----+---------+-------+| Field | Type | Null | Key | Default | Extra |+---------+--------------+------+-----+---------+-------+| id | int(11) | NO | PRI | NULL | || name | varchar(20) | YES | | NULL | || comment | varchar(100) | YES | | NULL | |+---------+--------------+------+-----+---------+-------+rows in set (0.01 sec)多列做主键==================多列做主键================create table service(ip varchar(15),port char(5),service_name varchar(10) not null,primary key(ip,port));mysql> desc service;+--------------+-------------+------+-----+---------+-------+| Field | Type | Null | Key | Default | Extra |+--------------+-------------+------+-----+---------+-------+| ip | varchar(15) | NO | PRI | NULL | || port | char(5) | NO | PRI | NULL | || service_name | varchar(10) | NO | | NULL | |+--------------+-------------+------+-----+---------+-------+3 rows in set (0.00 sec)mysql> insert into service values-> ('172.16.45.10','3306','mysqld'),-> ('172.16.45.11','3306','mariadb')-> ;Query OK, 2 rows affected (0.00 sec)Records: 2 Duplicates: 0 Warnings: 0mysql> insert into service values ('172.16.45.10','3306','nginx');ERROR 1062 (23000): Duplicate entry '172.16.45.10-3306' for key 'PRIMARY' primary key也是innodb引擎查询必备的索引,索引你就把当成书的⽬录innodb引擎在创建表的时候必须要有⼀个主键当你没有指定主键的时候1.会将⾮空且唯⼀的字段⾃动升级成主键2.当你的表中没有任何的约束条件 innodb会采⽤⾃⼰的内部默认的⼀个主键字段该主键字段你在查询时候是⽆法使⽤的查询数据的速度就会很慢类似于⼀页⼀页的翻书create table t19(id int,name char(16),age int not null unique,addr char(16) not null unique);主键字段到底设置给谁呢通常每张表⾥⾯都应该有⼀个id字段并且应该将id设置为表的主键字段联合主键:多个字段联合起来作为表的⼀个主键,本质还是⼀个主键ps:innodb引擎中⼀张表有且只有⼀个主键auto_increment主键字段应该具备⾃动递增的特点每次添加数据不需要⽤户⼿动输⼊auto_increment ⾃动递增create table t21(id int primary key auto_increment,name varchar(16)); create table t22(id int primary key,name varchar(16));mysql> create table t1(-> id int auto_increment primary key,-> name varchar(100)-> );Query OK, 0 rows affected (0.09 sec)mysql> desc t1-> ;+-------+--------------+------+-----+---------+----------------+| Field | Type | Null | Key | Default | Extra |+-------+--------------+------+-----+---------+----------------+| id | int(11) | NO | PRI | NULL | auto_increment || name | varchar(100) | YES | | NULL | |+-------+--------------+------+-----+---------+----------------+2 rows in set (0.00 sec)mysql> insert into t1 values(1, '游爹');Query OK, 1 row affected (0.00 sec)mysql> select * from t1;+----+--------+| id | name |+----+--------+| 1 | 游爹 |+----+--------+1 row in set (0.00 sec)。
《数据库原理及应用》复习题及答案[1](2)数据库原理及应用复习题填空题1.事务的ACID特性指的是:原子性、一致性、隔离性和持久性。
2.实体-联系模型的基本要素是:实体、联系、属性。
3.目前最常用的数据模型有:层次模型、网状模型、关系模型。
4.数据管理技术的发展主要经历了以下三个阶段:人工管理阶段、文件系统阶段、数据库系统阶段。
5.关系的三类完整性约束:域完整性、实体完整性、参照完整性。
6.关系模型由三部分组成:数据结构、数据操作或运算、完整性约束。
7.各分E-R图之间的冲突主要有3类:属性冲突、命名冲突、结构冲突。
8.模式分解等价的标准有:分解具有无损连接性、分解要保持函数依赖、分解既要保持函数依赖,又要具有无损连接性。
9.数据字典通常包括数据项、数据结构、数据流、数据存储和处理过程五个部分。
10.DBMS单项选择题1.现在采用的概念模型主要是(A)。
A.实体-联系模型B.结构模型C.数据模型D.抽象模型2.数据字典通常包括(D)A.数据项和数据结构B.数据流和数据存储C.处理过程D.ABC均正确。
3.完整性约束条件作用的对象层次有:(D)A.列级 B.元组级 C.关系层 D.ABC均正确4.SQL语言中,条件“年龄BETWEEN 20 AND 30”表示年龄在20至30之间,且(A)。
A.包括20岁和30岁B. 不包括20岁和30岁C.包括20岁但不包括30岁D. 包括30岁但不包括20岁5.SQL语言具有(B)的功能A.关系规范化、数据操纵、数据控制台B.数据定义、数据操纵、数据控制C.数据定义、关系规范化、数据控制D.数据定义、关系规范化、数据操纵6.语句SELET COUNT(*) FROM human返回(A)行。
A.1B.2C.3D.47.在SQL语言中,子查询是(D)。
A.返回单表中数据子集的查询语句B.选取多表中字段子集的查询语句C.选取单表中字段子集的查询语句D.嵌入到另一个查询语句之中的查询语句8.假设数据表“test1” 中有10 条数据行,可获得最前面两条数据行的命令为(B)A.SELECT 2 * FROM test1B.SELECT TOP 2 * FROM test1C.SELECT PERCENT 2 * FROM testD.SELECT PERCENT 20 * FROM test19.并发操作不会带来的问题:(B)A.丢失更新B.可重复读C.未提交读D.幻象读10.有两种错误可能造成事务执行失败:(C)A.逻辑错误和数据错误 B.系统错误和数据错误C.逻辑错误和系统错误 D.均不正确11.关系模型是用(B)来表示数据之间的联系。
数据库完整性一、选择题1.完整性检查和控制的防范对象(),防止它们进入数据库。
安全性控制的防范对象是(),防止他们对数据库数据的存取。
A. 不合语义的数据B. 非法用户C. 不正确的数据D. 非法操作2.下述哪个是SQL语言中的数据控制命令()。
A. GRANTB. COMMITC. UPDATED. SELECT3.下述SQL语言中的权限,哪一个允许用户定义新关系时,引用其他关系的主码作为外码()。
A. INSERTB. DELETEC. REFERENCESD. SELECT选择题答案:(1)A C B D(2)A(3)C二、简答题1.什么是数据库的完整性?答:数据库的完整性是指数据的正确性和相容性。
2.数据库的完整性概念与数据库的安全性概念有什么区别和联系?答:数据的完整性和安全性是两个不同的概念,但是有一定的联系。
前者是为了防止数据库中存在不符合语义的数据,防止错误信息的输入和输出,即所谓垃圾进垃圾出(G a r b a g e I n G a r b a g e O u t)所造成的无效操作和错误结果。
后者是保护数据库防止恶意的破坏和非法的存取。
也就是说,安全性措施的防范对象是非法用户和非法操作,完整性措施的防范对象是不合语义的数据。
3.什么是数据库的完整性约束条件?可分为哪几类?答:完整性约束条件是指数据库中的数据应该满足的语义约束条件。
一般可以分为六类:静态列级约束、静态元组约束、静态关系约束、动态列级约束、动态元组约束、动态关系约束。
静态列级约束是对一个列的取值域的说明,包括以下几方面:1.对数据类型的约束,包括数据的类型、长度、单位、精度等2.对数据格式的约束3.对取值范围或取值集合的约束。
4.对空值的约束5.其他约束静态元组约束就是规定组成一个元组的各个列之间的约束关系,静态元组约束只局限在单个元组上。
静态关系约束是在一个关系的各个元组之间或者若干关系之间常常存在各种联系或约束。
第九章数据库安全性习题解答和解析1. 1.什么是数据库的安全性?答:数据库的安全性是指保护数据库以防止不合法的使用所造成的数据泄露、更改或破坏。
2. 2.数据库安全性和计算机系统的安全性有什么关系?答:安全性问题不是数据库系统所独有的,所有计算机系统都有这个问题。
只是在数据库系统中大量数据集中存放,而且为许多最终用户直接共享,从而使安全性问题更为突出。
系统安全保护措施是否有效是数据库系统的主要指标之一。
数据库的安全性和计算机系统的安全性,包括操作系统、网络系统的安全性是紧密联系、相互支持的。
3.试述可信计算机系统评测标准的情况,试述TDI/TCSEC标准的基本内容。
答:各个国家在计算机安全技术方面都建立了一套可信标准。
目前各国引用或制定的一系列安全标准中,最重要的是美国国防部(DoD)正式颁布的《DoD可信计算机系统评估标准》(Trusted Computer System Evaluation Criteria,简称 TCSEC,又称桔皮书)。
(详细介绍参见《概论》9.1.2)。
TDI/TCSEC标准是将TCSEC扩展到数据库管理系统,即《可信计算机系统评估标准关于可信数据库系统的解释》(Trusted Database Interpretation 简称TDI, 又称紫皮书)。
在TDI中定义了数据库管理系统的设计与实现中需满足和用以进行安全性级别评估的标准。
TDI与TCSEC一样,从安全策略、责任、保证和文档四个方面来描述安全性级别划分的指标。
每个方面又细分为若干项。
这些指标的具体内容,参见《概论》9.1.2。
4.试述TCSEC(TDI)将系统安全级别划分为4组7个等级的基本内容。
答:根据计算机系统对安全性各项指标的支持情况,TCSEC(TDI)将系统划分为四组(division)7个等级,依次是D、C(C1,C2)、B(B1,B2,B3)、A(A1),按系统可靠或可信程度逐渐增高。
这些安全级别之间具有一种偏序向下兼容的关系,即较高安全性级别提供的安全保护包含较低级别的所有保护要求,同时提供更多或更完善的保护能力。