搜档网
当前位置:搜档网 › Oracle 主键约束

Oracle 主键约束

Oracle  主键约束
Oracle  主键约束

Oracle 主键约束

主键约束用于惟一地确定表中的每一行数据。在一个表中,最多只能有一个主键约束,主键约束即可以是一个列组成的,也可能是由两个或两个以上列组成的。对于表中的每一行数据,主键约束列都是不同的,主键约束同时也具有非空约束。

如果主键约束由一列组成时,该主键约束被称为行级约束。如果主键约束由两个或两个以列组成时,则该主键约束被称为表级约束。这两种不同类型的主键,在定义上有一点差异。

例如,在定义EMPLOYEES表时,为表定义了一个表级主键约束EMP_PK,该主键约束由EMPNO列组成:

SQL> create table employees(

2 empno number(10),

3 ename varchar2(20) not null,

4 sex char(2),

5 salary number(8,2),

6 hiredate date default sysdate,

7 job varchar2(10),

8 email varchar2(50),

9 deptno number(3) not null,

10 constraint EMP_PK primary key (empno,ename));

表已创建。

使用ALTER TABLE语句增加主键约束的部分语法形式如下:

alter table table_name

add constraint constraint_name primary key(column1[,column2]);

如果表上已经存在主键约束,那么当试图在该表上再增加一个主键约束时,系统就会生生一个错误信息。即使在不同的列上增加约束也是如此。例如,当在EMPLOYEES表的EMAIL列上再增加一个约束时,系统将产生“表中能具有一个主键”的错误消息。如下所示:

SQL> alter table employees

2 add constraint emp_email_pk primary key (email);

add constraint emp_email_pk primary key (email)

*

第 2 行出现错误:

ORA-02260: 表只能具有一个主键

与NOT NULL约束相同,当为表添加主键约束时,如果该表中已经存在数据,并且主键列具有相同的值或存在NULL值,则添加主键约束的操作将失败。

如果要为PRIMARY KEY约束指定名称,则必须使用CONSTRAINT关键字,如上面的示例所示。如果要使用系统自动为其分配的名称,则可以省略CONSTRAINT关键字。例如,下面的语句在创建EMPLOYEES表时在EMPNO列上定义了一个主键约束:

create table employees(

empno number(10) primary key,

数据完整性约束-主键约束

数据完整性约束(一) —— SQL Server 2016数据库及应用

由于数据库中的数据是从外界输入的,然而数据的输入由于种种原因,会发生输入无效或错误信息,数据的完整性正是为了保证输入的数据符合规定而提出的。 数据完整性分为四类: 实体完整性、域完整性、参照完整性和用户自定义完整性。

1. 实体完整性: 实体完整性要求如果属性A是关系R的主属性,则属性A不能取空值。实体完整性用于保证关系数据库表中的每条记录都是唯一的,建立主键的目的就是为了实现实体完整性。 2. 域完整性: 用来保证数据的有效性,它可以限制录入的数据与数据类型是否一致,规定字段的默认值,设置字段是否可以为空,域完整性可以确保不会输入无效的数据。

3. 参照完整性:参照完整性是基于外键的,如果表中存在外键,则外键的值必须与主表中的某条记录的被参照列的值相同,参照完整性用于确保相关联表之间的数据保持一致。当添加、删除或修改数据表中记录时,可以借助于参照完整性来保证相关表之间数据的一致性。 ClassNo ClassName Specialty EnterYear Dno 0111801 网络3181 计算机网络技 术 2018 D01 0121901 软件3191 软件技术 2019 D01 主键 Class Sno Sname Sex Birth ClassNo s011180106 陈骏 男 2000/7/5 0111801 s012190118 陈天明 男 2000/7/18 0121901 主键 外键 Student

4. 用户自定义完整性: 用户自定义完整性约束就是针对某一具体关系数据库的约束条件,它反映某一具体应用所涉及的数据必须满足的语义要求。 如何实现数据完整性,可以通过为表的字段设置约束来保证表中数据完整性。

约束语法

SQL Server 2000支持下列五类约束:(1)DEFAULT约束(默认约束):当向数据库表中插入数据时,如果没有明确的提供输入值时,SQL S自动为该列输入指定值。(2)CHECK约束(检查约束):通过逻辑表达式判断限制插入到列中的值。(3)PRIMARY KEY约束(主键约束):不允许数据库表在指定列上具有相 同的值,且不允许有空值。(4)FOREIGN KEY约束(外键约束):定义数据库 表中指定列上插入或更新的数值必须在另一张被参照表中的特定列上存在。(5)UNIQUE约束(惟一约束):不允许数据库表在指定列上具有相同的值,但允许 有空值。约束也被分为列约束和表约束两类。列约束是指只对某一列起作用的约束。当一个约束中包含了数据库表中一个以上的列时,称为表约束。 24、约束的创建约束可以通过使用CREATE TABLE命令创建。具体语法如下: CREATE TABLE table_name (column_name data_type (NULL | NOT NULL)[[CONSTRAINT constraint_name]{PRIMARY KEY [CLUSTERED | NONCLUSTERED] | UNIQUE [CLUSTERED | NONCLUSTERED] | [FOREIGN KEY] REFERENCES ref_table [(ref_column)] | DEFAULT constant_expression | CHECK(logical_expression)}][,...]) 其中,各参数的意义 为: table_name:创建约束的表名称 column_name:创建约束的列的名 称 data_type:所在列的数据类型 constraint_name:新建约束的名称 [例题37] 在tsinghua数据库中创建一张用于教师信息管理的表teachers,表中包括的教师信息分别为:教师编号、教师姓名、性别、出身年月、所在系代号、职称、办公室电话号码、科研方向以及工作状态,在创建时定义有列约束和表约束。具体命令如下: use tsinghua CREATE TABLE tsinghua.dbo.teachers (TeacherID int NOT NULL, name nvarchar(5) NOT NULL, gender nchar(1) NULL, birthday datetime NULL, DeptCode tinyint NOT NULL, Title nvarchar(5) NULL, TelCode char(8) NOT NULL, aspect nvarchar(200) NULL, status nvarchar(5) NOT NULL CONSTRAINT DF_Status DEFAULT(' 在职'), CONSTRAINT PK_Teacher PRIMARY KEY CLUSTERED(TeacherID), CONSTRAINT FK_DeptCode FOREIGN KEY (DeptCode) REFERENCES dbo.departments(DeptCode), CONSTRAINT CK_TelCode CHECK(TelCode LIKE '627[0-9][0-9][0-9][0-9][0-9]'),) go 在这个例子中,用户可以看到我们使用的约束类型依次为非空约束、默认约束、主键约束、外键约束和检查约束。在结果显示窗口中可以看到错误提示: 服务器: 消息 1767,级别 16,状态 1,行 2 外键 'FK_DeptCode' 引用了无效的表 'dbo.departments'。服务器: 消息 1750,级别 16,状态 1,行 2 未能创建约束。请参阅前面的错误信息。 这是由于还没有在数据库tsinghua中创建外键约束FK_DeptCode所需表departments,用户可以通过下面指令先创建表departments: CREATE TABLE tsinghua.dbo.departments (DeptCode tinyint NOT NULL Primary Key, DeptName nchar(20) NOT NULL, TelCode char(8) NULL) go

实验七完整性约束的创建

实验七完整性约束的创建 一、实验目的 理解数据库完整性约束的概念,掌握SQL Server 2008的完整性约束的类型及相应的创建技术。 二、实验内容 1、定义和管理主键约束。 2、定义和管理唯一性约束。 3、定义和管理检查约束。 4、定义和管理外键约束。 5、定义和管理默认值约束。 三、实验指导 在关系数据库中,实体完整性约束、参照完整性约束和域完整性约束是必须满足的完整性约束条件。在SQL Server中,通过建立“约束”等措施来实现数据完整性约束,约束包括:主键(PRIMARY KEY)约束、唯一性(UNIQUE)约束、检查(CHECK)约束、默认值(DEFAULT)约束和外键(FOREIGN KEY)约束。约束的建立可以通过对象资源管理器进行操作,也可以利用T-SQL语句进行设置。 (一)主键(PRIMARY KEY)约束 主键约束指在表中定义一个主键来唯一标识表中每一行数据。 1、在SQL Server Management Studio中设置和修改主键 在表设计器中,单击要定义为主键的列的行选择器(如果要选择多列,在单击其他列的行选择器时按住Ctrl键)。然后右键单击该列的行选择器,选择“设置主键”命令,自动创建名为“PK_”(后跟表名)的主键索引。如图7.1所示。 2、利用T-SQL语句定义和修改主键 实验7.1 在教学管理数据库JXGL中创建学生表S的同时定义主键。 在数据库引擎查询文档中输入以下语句: USE JXGL GO CREATE TABLE S (

Sno char(8) PRIMARY KEY, Sname char(8), Sex char(2), Sage smallint, Sdept varchar(50) ) GO 注意:如果要设置多列的组合为主键,需要把主键定义为表级完整性约束。 图7.1 利用表设计器管理主键 实验7.2 在定义数据表S时没有定义主键,则需要添加主键。 在数据库引擎查询文档中输入以下语句: USE JXGL GO ALTER TABLE S ADD CONSTRAINT PK_Sno PRIMARY KEY clustered(Sno) GO 单击“执行”按钮则执行该程序段,这样就创建了名字为PK_Sno的主键。(二)唯一性(UNIQUE)约束

列级约束与表级约束

列级约束与表级约束 在SQL Server中有5种约束: 主键约束(primary key constraint) 唯一性约束(unique constraint) 检查约束(check constraint) 缺省约束(default constraint) 外部键约束(foreign key constraint) 在SQL SERVER中, (1)对于基本表的约束分为列约束和表约束 约束是限制用户输入到表中的数据的值的范围,一般分为列级约束与表级约束。 列级约束有六种:主键Primary key、外键foreign key 、唯一unique、检查checck、默认default 、非空/空值not null/ null 表级约束有四种:主键、外键、唯一、检查 列约束是对某一个特定列的约束,包含在列定义中,直接跟在该列的其他定义之后,用空格分隔,不必指定列名; 表约束与列定义相互独立,不包括在列定义中,通常用于对多个列一起进行约束,与列定义用’,’分隔,定义表约束时必须指出要约束的那些列的名称。完整性约束的基本语法格式为: [ CONSTRAINT <约束名> ] <约束类型> 约束名:约束不指定名称时,系统会给定一个名称。 (2)列级约束与表级约束的区别 如果完整性约束涉及到该表的多个属性列,必须定义在表级上,否则既可以定义在列级也可以定义在表级。 简而言之: 列级约束:列级约束是行定义的一部分,只能应用于一列上。 表级约束:表级约束是独立于列的定义,可以应用在一个表中的多列上。 (3)列级约束与表级约束在SQL中的用法(即如何在SQL中定义约束) 在创建表时定义约束: CREATE TABLE table_name ({ -------列级约束定义 |column_name AS computed_column_expression -------计算列定义 | ------表级约束定义 }[,….n] )

oracle主键的设置方法

主键: 1.主键约束:一个表只能有一个主键约束。主键可以是单个字段,也可以是多个字段。无论是哪种情况,其所有字段都是NOT NULL。 2.Unique约束:一个表可以有多个Unique约束,Unique的字段可以为NULL。 3.主键与Unique:不同点在于一个表只能有一个主键约束,但是可以有多个Unique约束;主键所有字段都是not null,unique可以是 null;相同点在于都能保证唯一性。 4.主键、Unique与索引:主键约束与Unique约束默认会成为索引。当主键和Unique有多个字段时,有索引前缀性问题,即where语 句中的条件必须有主键或者unique的第一个字段,否则不会使用索引。 5. 外键与主键、Unique:外键必须为另外一张表(父表)的主键或者唯一索引。如果要添加记录,而父表中没有则报错。反之,如 果要删除父表中的记录,而子表中有记录,也会报错。但是如果在创建外键约束时,如果使用on delete cascade,则删除父表中数据时 ,不报错而直接把子表关联的数据删除。 如果要删除父表,则需要加上cascade constraints,此时子表的foreign key被去除,表中记录保持不变。 外键: 外键是该表是另一个表之间联接的字段 外键必须为另一个表中的主键 外键的用途是确保数据的完整性。它通常包括以下几种: 实体完整性,确保每个实体是唯一的(通过主键来实施). oracle主键的设置方法有2种: 一种是设置自增长主键,另一种是生成唯一序列; 1.自增长主键 SQL> create table Prim_key_Increase_Test( 2 id number(10) primary key, 3 name varchar2(30) 4 ); 表已创建。 SQL> create sequence Prim_key_Incre_Sequence 2 minvalue 1 3 nomaxvalue 4 start with 1 5 increase by 1 6 nocycle 7 nocache; increase by 1 * 第5 行出现错误: ORA-00933: SQL 命令未正确结束 SQL> 5

主键、索引等的区别

键、索引、约束及其区别 今天下午刚好没事,把一些基础性的概念理顺一下,存档,省的麻烦,嘿嘿 一.索引 1.什么是索引? 索引是对数据库表中一列或多列的值进行排序的一种结构。 在关系型数据库中,索引是一种与表有关的数据库结构,是事实存在的。 它可以使对于表的select等等操作更加快速,相当于一本书的目录。 对于一张表,如果我们想要找到某一列符合特定值的记录,第一种方法是全表搜索,匹配,然后把所有符合的记录列出,但是这样做会消耗大量数 据库系统时间,并造成大量磁盘I/O操作;第二种就是在表中建立索引,然 后在索引中找到符合查询条件的索引值,最后通过保存在索引中的ROWID(相 当于页码)快速找到表中对应的记录。 索引是一个单独的、物理的数据库结构,它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单。由此可 知,索引是要消耗数据库空间的。 并非所有的数据库都以相同的方式使用索引。作为通用规则,只有当经常查询索引列中的数据时,才需要在表上创建索引。索引占用磁盘空间,并 且降低添加、删除和更新行的速度。在多数情况下,索引用于数据检索的速 度优势大大超过它的不足之处。但是,如果应用程序非常频繁地更新数据或 磁盘空间有限,则可能需要限制索引的数量。 可以使用单列作为索引,也可以使用多列联合作为索引。 2.索引的优缺点 优点: (1)大大加快数据的检索速度; (2)创建唯一性索引,保证数据库表中每一行数据的唯一性; (3)加速表和表之间的连接; (4)在使用分组和排序子句进行数据检索时,可以显著减少查询中分组和排 序的时间。 缺点: (1)索引需要占物理空间。 (2)当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,降低了数据的维护速度。 建立索引时的注意事项: (1)考虑已在表上创建的索引数量。最好避免在单个表上有很多索引 (2)检查已在表上创建的索引的定义。最好避免包含共享列的重叠索引 (3)检查某列中唯一数据值的数量,并将该数量与表中的行数进行比较。 比如如果有1000w记录,某字段为性别,只有男,女。也就是说一半 的记录都是重复的,这样就要考虑是否还有必要建立索引了。 3.一些索引类别 (1)普通索引 也即不加任何限制的索引。可通过以下语句理解。 create table zjj_temp_1 (id number(10),first_name char(10),last_name char(10),age number(3),val number(10,2));

主键,外键等约束详解实例

1、--创建表 create table tb_Dept ( Deptid char(2)Primary key, DeptName char(16)Not Null ) 2、--外键约束 create table tb_Student ( Studid char(10)Primary key, Studname char(8)Not null, Deptid char(2)Not null, Constraint FK_DeptID Foreign Key(Deptid) References Tb_Dept(DeptID) ) 3、--外键约束简化形式,必须要求tb_Dept表中DeptID为主键,且数值类型相同create table Tb_Student ( StudId char(10)Primary key, StudName char(8)Not null, DeptID char(2)not null References Tb_Dept ) 4、--创建表,无主键 create table Tb_Class ( ClassID char(8)not null, ClassName varchar(30)not null, DeptId char(2)not null, ClassStuNumber int ) 5、--创建表,同时定义主键 create table Tb_Class ( classid char(8)not null, ClassName varchar(30)not null, DeptID char(2)not null, ClassStuNumber int constraint PK_ClassID Primary key (ClassID,ClassName) ) 6、--新增主键 Alter table Tb_class ADD Constraint PK_ClassID primary key(Classid) 7、--删除主键 Alter table tb_Class Delete Constraint PK_ClassID Primary key(ClassID) 8、--外键级联更新,删除,简化形式 Create table tb_student (

SQL的主键和外键约束

SQL的主键和外键约束 SQL的主键和外键的作用: 外键取值规则:空值或参照的主键值。 (1)插入非空值时,如果主键表中没有这个值,则不能插入。 (2)更新时,不能改为主键表中没有的值。 (3)删除主键表记录时,你可以在建外键时选定外键记录一起级联删除还是拒绝删除。 (4)更新主键记录时,同样有级联更新和拒绝执行的选择。 简而言之,SQL的主键和外键就是起约束作用。 关系型数据库中的一条记录中有若干个属性,若其中某一个属性组(注意是组)能唯一标识一条记录,该属性组就可以成为一个主键。 比如: 学生表(学号,姓名,性别,班级) 其中每个学生的学号是唯一的,学号就是一个主键; 课程表(课程编号,课程名,学分) 其中课程编号是唯一的,课程编号就是一个主键; 成绩表(学号,课程号,成绩) 成绩表中单一一个属性无法唯一标识一条记录,学号和课程号的组合才可以唯一标识一条记录,所以,学号和课程号的属性组是一个主键。

成绩表中的学号不是成绩表的主键,但它和学生表中的学号相对应,并且学生表中的学号是学生表的主键,则称成绩表中的学号是学生表的外键;同理,成绩表中的课程号是课程表的外键。 定义主键和外键主要是为了维护关系数据库的完整性,总结一下: 一、主键是能确定一条记录的唯一标识,比如,一条记录包括身份正号,姓名,年龄。身份证号是唯一能确定你这个人的,其他都可能有重复,所以,身份证号是主键。 外键用于与另一张表的关联。是能确定另一张表记录的字段,用于保持数据的一致性。比如,A 表中的一个字段,是B表的主键,那他就可以是A表的外键。 二、主键、外键和索引的区别 定义: 主键--唯一标识一条记录,不能有重复的,不允许为空 外键--表的外键是另一表的主键, 外键可以有重复的, 可以是空值 索引--该字段没有重复值,但可以有一个空值 作用: 主键--用来保证数据完整性 外键--用来和其他表建立联系用的 索引--是提高查询排序的速度 个数: 主键--主键只能有一个 外键--一个表可以有多个外键 索引--一个表可以有多个唯一索引

Oracle 主键约束

Oracle 主键约束 主键约束用于惟一地确定表中的每一行数据。在一个表中,最多只能有一个主键约束,主键约束即可以是一个列组成的,也可能是由两个或两个以上列组成的。对于表中的每一行数据,主键约束列都是不同的,主键约束同时也具有非空约束。 如果主键约束由一列组成时,该主键约束被称为行级约束。如果主键约束由两个或两个以列组成时,则该主键约束被称为表级约束。这两种不同类型的主键,在定义上有一点差异。 例如,在定义EMPLOYEES表时,为表定义了一个表级主键约束EMP_PK,该主键约束由EMPNO列组成: SQL> create table employees( 2 empno number(10), 3 ename varchar2(20) not null, 4 sex char(2), 5 salary number(8,2), 6 hiredate date default sysdate, 7 job varchar2(10), 8 email varchar2(50), 9 deptno number(3) not null, 10 constraint EMP_PK primary key (empno,ename)); 表已创建。 使用ALTER TABLE语句增加主键约束的部分语法形式如下: alter table table_name add constraint constraint_name primary key(column1[,column2]); 如果表上已经存在主键约束,那么当试图在该表上再增加一个主键约束时,系统就会生生一个错误信息。即使在不同的列上增加约束也是如此。例如,当在EMPLOYEES表的EMAIL列上再增加一个约束时,系统将产生“表中能具有一个主键”的错误消息。如下所示: SQL> alter table employees 2 add constraint emp_email_pk primary key (email); add constraint emp_email_pk primary key (email) * 第 2 行出现错误: ORA-02260: 表只能具有一个主键 与NOT NULL约束相同,当为表添加主键约束时,如果该表中已经存在数据,并且主键列具有相同的值或存在NULL值,则添加主键约束的操作将失败。 如果要为PRIMARY KEY约束指定名称,则必须使用CONSTRAINT关键字,如上面的示例所示。如果要使用系统自动为其分配的名称,则可以省略CONSTRAINT关键字。例如,下面的语句在创建EMPLOYEES表时在EMPNO列上定义了一个主键约束: create table employees( empno number(10) primary key, …

数据库中的五种约束

数据库中的五种约束 数据库中的五种约束及其添加方法 五大约束 1.—-主键约束(Primay Key Coustraint)唯一性,非空性 2.—-唯一约束(Unique Counstraint)唯一性,可以空,但只能有一个 3.—-检查约束(Check Counstraint)对该列数据的范围、格式的限制(如:年龄、性别等) 4.—-默认约束(Default Counstraint)该数据的默认值 5.—-外键约束(Foreign Key Counstraint)需要建立两表间的关系并引用主表的列 五大约束的语法示例 1.—-添加主键约束(将stuNo作为主键) alter table stuInfo add constraint PK_stuNo primary key(stuNo) 2.—-添加唯一约束(身份证号唯一,因为每个人的都不一样) alter table stuInfo add constraint UQ_stuID unique(stuID) 3.—-添加默认约束(如果地址不填默认为“地址不详”) alter table stuInfo add constraint DF_stuAddress default(‘地址不详’)for stuAddress 4.—-添加检查约束(对年龄加以限定15-40岁之间) alter table stuInfo add constraint CK_stuAge check(stuAge between15and40) alter table stuInfo add constraint CK_stuSex check(stuSex=’男’or stuSex=’女′) 5.—-添加外键约束(主表stuInfo和从表stuMarks建立关系,关联字段stuNo) alter table stuInfo add constraint FK_stuNo foreign key(stuNo)references stuinfo(stuNo) 约束(Constraint)是Microsoft SQL Server提供的自动保持数据库完整性的一种方法,定义了可输入表或表的单个列中的数据的限制条件(有关数据完整性的介绍请参见第9章)。在SQL Server中有5种约束:主关键字约束(Primary Key Constraint)、外关键字约束(Foreign Key Constraint)、惟一性约束(Unique Constraint)、检查约束(Check Constraint)和缺省约束(Default Constraint)。 1主关键字约束 主关键字约束指定表的一列或几列的组合的值在表中具有惟一性,即能惟一地指定一行记录。每个表中只能有一列被指定为主关键字,且IMAGE和TEXT类型的列不能被指定为主关键字,也不允许指定主关键字列有NULL属性。

mysql 约束的使用

约束类型 总的来说有五种:唯一性和主键约束、外键约束、检查约束、空值约束、默认值约束,有五大关键词,UNIQUE和Primary Key, Foreign Key, CHECK, NOT NULL, DEFAULT 1。唯一性和主键约束。 要求某一列,或几列不能有重复的值,建立主键约束和唯一约束时,Oralce会基于约束列自动建立唯一索引;主键约束不允许为NULL,唯一约束允许为NULL,一张表只能建立一个主键约束。唯一性和主键约束类似,只是关键词不同而已,语法一致。创建约束 CREATE TABLE TABLE_NAME ( COL1 VARCHAR2(32) NOT NULL PRIMARY KEY, ) CREATE TABLE TABLE_NAME ( COL1 VARCHAR2(32) NOT NULL CONSTRAINT PK_ID PRIMARY KEY, ) CREATE TABLE TABLE_NAME ( COL1 VARCHAR2(32) NOT NULL, COL2 VARCHAR2(32) NOT NULL Foreign Key, CONSTRAINT PK_TABLE_NAME PRIMARY KEY(COL1,COL2) ) 修改约束 ALTER TABLE Table_Name ADD CONSTRAINT PK_Table_Name PRIMARY KEY NONCLUSTERED(Col1)【这里表明了是聚集还是非聚集主键索引】 如果唯一性约束保护多个数据列,那么唯一性约束要作为表约束增加。语法如下:CONSTRAINT CONSTRAINT_NAME (COL1,COL2) UNIQUE USING INDEX TABLESPACE (TABLESPACE_NAME) STORAGE (STORED CLAUSE) 2。外键约束。 剩下的约束写法都是差不多,这里就不多举例了。 CREATE TABLE TABLE_NAME ( COL1 VARCHAR2(32) NOT NULL REFERENCES PRIMARY_TABLE(PRIMARY_COL) ON DELETE CASCADE, ) CREATE TABLE TABLE_NAME ( COL1 VARCHAR2(32) NOT NULL, CONSTRAINT FK_TABLE_NAME FOREIGN KEY REFERENCES PRIMARY_TABLE(PRIMARY_COL) ON DELETE SET NULL

实验6-表的结构设计与约束设计_答案

实验6:SQL Server数据表的结构设计与约束设计1.实验目的 (1)掌握使用SQL Server管理平台和Transact-SQL语句CREATE TABLE和ALTER TABLE创建和修改表的方法。 (2)了解SQL Server的常用数据类型。 (3)掌握SQL Server管理平台和Transact-SQL语句定义和删除约束的方法,并了解约束的类型。 2.实验内容及步骤 (1)启动SQL Server管理平台,创建studentsdb数据库。 Create database studentsdb (2)在studentsdb数据库中包含有数据表student_info、curriculum、grade,这些表的数据结构如图1-1至图1-3所示。 图1-1 学生基本情况表student_info 图1-2 课程信息表curriculum 图1-3 学生成绩表grade USE studentsdb go CREATE TABLE student_info

(学号char(4), 姓名char(8), 性别char(2), 出生日期datetime, 家庭住址varchar(50), 备注text ) GO CREATE TABLE curriculum (课程编号char(4), 课程名称nchar(50), 学分int ) GO CREATE TABLE grade (学号char(4), 课程编号char(4), 分数float ) GO (3)在SQL Server管理平台中创建student_info、curriculum、grade表。将student_info表的学号列设置为主键,非空。将curriculum表的课程编号设置为主键,非空。将grade表主键设置为学号和课程编号。 --1添加非空约束(设置主键约束时字段值不能为空,先设置非空,再设置主键约束) ALTER TABLE student_info ALTER COLUMN学号char(4)NOT NULL ALTER TABLE curriculum ALTER COLUMN课程编号char(4)NOT NULL ALTER TABLE grade ALTER COLUMN学号char(4)NOT NULL ALTER TABLE grade ALTER COLUMN课程编号char(4)NOT NULL --2 添加主键 ALTER TABLE student_info ADD PRIMARY KEY (学号) ALTER TABLE curriculum ADD PRIMARY KEY (课程编号) ALTER TABLE grade ADD PRIMARY KEY (学号,课程编号) (4)在SQL Server管理平台中为student_info、curriculum、grade表添加数据。数据如图1-4至图1-6所示。

测验答案-第8章索引的创建与维护

测验 填空题 (1) 在SQL Server 2005中,索引分为两大类,分别是、。 答案:聚集索引、非聚集索引 (2) 在一个表中可以定义个聚集索引,个非聚集索引。 答案:一、多 (3) 索引确保索引键不包含重复的值。 答案:唯一 (4) 系统访问数据中数据时,可以采用两种方法,分别是和。 答案:表扫描、索引查找 选择题 (1) 某公司有数据库,其中有一个表包含几十万个数据,但是用户抱怨数据查询速度太慢,下面哪种方法能够最好地提高查询速度。 A. 收缩数据库 B. 换个高档的服务器 C. 减少数据库占用空间 D. 在该表上建立索引 答案:D (2) 下列不适合建立索引的选项是哪一个。 A. 用作查询条件的列 B. 频繁搜索的列 C. 取值范围很少的列 D. 连接中频繁使用的列 答案:C (3) 执行下列语句时,系统自动建立几个索引。 CREATE TABLE TEST( C1 int primary key, C2 char(4) unique, C3 bit default 1, C4 char(4) foreign key references test1(C1) ) A. 1个 B. 2个 C. 3个 D. 多个 答案:B (4) 以下哪个命令是在表TABLE的C1列上创建一个唯一的非聚集索引IX1,且索引的中间结点和叶级结点的填满度均为70%。 A. CREATE CLUSTERED INDEX IX1 ON TABLE(C1) WITH (FILLFACTOR = 50,PAD_INDEX = ON)

B. CREATE NONCLUSTERED INDEX IX1 ON TABLE(C1) WITH (FILLFACTOR = 50,PAD_INDEX = ON) C. CREATE UNIQUE INDEX IX1 ON TABLE(C1) WITH (FILLFACTOR = 50,PAD_INDEX = ON) D. CREATE UNIQUE CLUSTERED INDEX IX1 ON TABLE(C1) WITH (FILLFACTOR = 50,PAD_INDEX = ON) 答案:C 判断题 (1) 创建主键约束时系统自动创建聚集索引。 答案:√ (2) 系统自动创建的索引可以手工删除。 答案:× (3) 一个表可以创建若干个聚集索引。 答案:× (4) 一个表可以创建若干个非聚集索引。 答案:√ 问答题 (1)删除索引时所对应的数据表会删除吗为什么。 答案:不会,因为索引是针对一个表,以表列为基础建立的数据库对象,它保存着表中排序的索引列,并且记录了索引列在数据表中的物理存储位置,实现了表中数据的逻辑排序。删除索引时所对应的数据表中的数据不会删除。 (2)引入索引的主要目的是什么 答案:使用索引的主要目的是提高SQL Server系统的性能,加快数据的查词速度和减少系统的响应时间。索引通过记录表中的关键值指向表中的记录,这样数据库引擎就不用扫描整个表而定位到相关的记录。索引还可以加速表与表之间的连接,在实现数据的参照完整性时,可以将表的外键制作成索引,这样可以使表和表之间的连接速度加快。 (3)创建索引的缺点有哪些 答案:带索引的表在数据库中占用更多的物理空间,因为除了数据表占用空间之外,索引也需要一定的物理空间;创建索引和维护索引要耗费时间;建立索引加快了数据检索速度,却减慢了数据修改速度。 (4)如何查看索引的碎片 答案:使用DBCC SHOWCONTIG语句来扫描表,并通过其返回值确定该索引页是否已经严重不连续。 (5)说明在SQL Server中聚集索引和非聚集索引的区别。 答案:聚集索引数据表的物理顺序和索引表的顺序相同,它根据表中的一列或多列值的组合对表和视图进行物理排序,有利于范围搜索,最适合于范围搜索,因为相邻的行将被物理地存放在相同或相邻近的页面上。对于非聚簇索引,数据表的物理顺序和索引表的顺序不相同,即表的数据并不是按照索引列排序的。索引是有序的,而表中的数据是无序的。

SQL Server 5种常见的约束

SQL Server 5种常见的约束 SQLServer 中有五种约束,Primary Key 约束、Foreign Key 约束、Unique 约束、Default 约束和Check 约束,用SQL Server2008 来演示下这几种约束的创建和使用的方法。 1、Primary Key 约束 在表中常有一列或多列的组合,其值能唯一标识表中的每一行。 这样的一列或多列成为表的主键(PrimaryKey)。一个表只能有一个主键,而且主键约束中的列不能为空值。只有主键列才能被作为其他表的外键所创建。 创建主键约束可以右键单击表,选择设计。 选中要创建主键的列,然后单击上面的小钥匙。 也可以右键需要创建主键的列,然后单击小钥匙。

2、Foreign Key 约束 外键约束是用来加强两个表(主表和从表)的一列或多列数据之间的连接的。创建外键约束的顺序是先定义主表的主键,然后定义从表的外键。也就是说只有主表的主键才能被从表用来作为外键使用,被约束的从表中的列可以不是主键,主表限制了从表更新和插入的操作。 右键单击需要设置外键的列(此时的表是作为从表在外键中出现),选择关系。 接下来点击添加--> 表和列规范。 在主键表中选择主表和主表的主键列。

设置完后保存即可。 3、Unique 约束 唯一约束确保表中的一列数据没有相同的值。与主键约束类似,唯一约束也强制唯一性,但唯一约束用于非主键的一列或者多列的组合,且一个表可以定义多个唯一约束。 右键单击要设置的列选择索引/ 键。 然后单击添加按钮。

选择需要设置的列,可以是一列也可以是多列的组合。 关闭并保存设置。

导入导出时主键与约束丢失的问题解决

最近使用MSSQL数据库,将数据导入到服务器的时候,主键老是丢失,烦死我了.一直一直烦.没办法,我是菜鸟.今天上网搜索了一下,居然找到了一个好东西,立马试验一下.结果表明,已经成功!看图: 下面介绍一下这个事情要怎么处理: 导入数据时,使用默认选项,会丢失主键、约束、默认值等属性,按如下步骤操作:-->导出向导 -->选择数据源 -->选择目的 -->指定表复制或查询:不要使用默认选项,选择“在SQL Server数据库之间复制对象和数据” -->选择要复制的对象:在本页中根据需要选择相应的开关项,对于列约束,必须选择“扩展属性”,若去掉“复制所有对象”,可以选择你要导出的表或对象 -->其余按默认步骤即可 下面是详细流程: 1、打开本地企业管理器,先创建一个SQL Server注册来远程连接服务器端口SQL Server。 步骤如下图:

2、弹出窗口后输入内容。"总是提示输入登陆名和密码"可选可不选,如下图.

3、注册好服务器后,点击打开。如果是选择了"总是提示输入登陆名和密码"的话再点了确定后会提示输入用户密码,如图3。 4、进入后,选择到您的数据库,如testdb。在上面点右键,"所有任务">>"导入数据",如图4。 5、进入DTS导入/导出向导,点击“下一步”按钮继续

6、选择数据源,输入数据源所在的数据库服务器名称、用户名、密码和要复制数据的源数据库,点击“下一步”按钮

7、选择“在SQL Server数据库之间复制对象和数据”方式,点“下一步”继续 8、这一步可以把"包括扩展属性"和"排序规则"两个选择上。接着去掉左下的"使用默认选项",点击右下角的"选项"来进行配置。

oracle约束键解析

oracle约束键解析 一、数据库约束的作用和分类 primarykey 和unique他们的作用是为了不让表中有重复的数据(一个表)check表示表中列的数据的范畴性的定义(一个表) defult表示表中的默认值 foreignkey 表与表之间的联系(两个或两个以上的表) 【unique是能够包含null值的,同时一个表中能够有多个unique constraint 而primarykey在一个表中只能有一个.同时不能有null值】 二、针对约束创建有两种不同的思想 第一、创建标的时候一同将约束创建了 第二、你的表差不多创建好了,向表中添加约束 三、下面我就一一的介绍他们 一、primary key 主键约束 Ⅰ两种写法 ①在差不多创建的表中添加约束 说明:添加约束的时候一定要修改表故用(alter[修改]) Alter table table1 Add primary key (列名1,列名2) ②同表一起创建 Create table table1 (列名1 数据类型是否为空primary key , 列名1 数据类型是否为空 ) 上面的是两种情形为一个字段设置主键,接下来是以多个列作为主键。 Create table table1 ( 列名1 数据类型是否为空, 列名2 数据类型是否为空, 列名3 数据类型是否为空, Primary key (列名1 ,列名2) ) 二、Check约束 那个和主键约束差不多

Alter table table1 Add unique(列名) 三、外键约束 好多的同学一直也都不明白得外键约束,到底什么才是外键?主键在那个表上?外键在那个表上?用T-SQL语句写的时候是主表在前,依旧外间表在前?等等一系列的问题! 接下来我讲给大伙儿说说那个主外键到底如何弄的。 事实上,主外键之间正如它的名字一样,他们之间有一个主从关系,一个主表,一个从表,主表上面设置的是主键,从表上面设置的是外键(foreign key),主键表中的数据发生变化的时,外键(foreign key)表的数据赶忙就发生改变。 Ⅰ向已有的表中添加一个主键(没有确实是添加,添加确实是修改表) Alter table table1 Add foreign key (列名1)references table2(列名2) Ⅱ创建表的时候一同创建外键 Create table table1 (列名4 数据类型是否为空primary key, 列名3 数据类型是否为空, 列名1 数据类型references table2 (列名2) ) 注: Table1外键表 Table2主键表 列名1是主表列 列名2是外键表列 最一样常用的是主表的列和外键表的列的字段是一样的 一样多为ID 能够作为主键的。这是两个之间的交互。 四、Check约束 他也是基于一个表中的约束,限定表中列直截了当爱你数据的参照关系。 Ⅰ向一个以创建的表中添加约束 Alter tabel table1 Add constraint 约束名check(列名关于列的限制条件) 多是一些能够找到范畴的数据,例如年龄,身高,体重。 五、default 默认约束 他是一个关于某一个值的约束,他是唯独的一个用for关联词的句子 向表中添加一个默认约束 Alter tabletable1 Add default ‘默认值’for 列名

创建主键约束

实训4 创建主键约束 实训目标 在SQL Server2005环境下编写代码,完成各个表的主键约束设置。 实训说明 1.本次实训以小组为单位进行,在SQL Server2005环境下编写代码完成数据库 的创建。 2.编写sql脚本代码时,请养成良好的编码习惯,如适当添加注释提高代码可 读性,移行提高代码的清晰性。 3.约束命名格式:表名_identy 。 实训过程 1.阅读人事管理系统——详细设计说明书(SQL 部分),明确表的主键约束 2.打开SQL Server2005,编写脚本createPK.sql。每位同学单独完成小组分配的 主键约束的任务。 提示: ●为了方便执行代码,使用if exists语句判断是否存在主键对象和主键创建后自动生成的索引,若存在, 则删除 /* ** 表tblEmployee 创建EmployeeID主键 */ --如果存在系统对象名称为tblEmployee_ident,则修改tblEmployee表,删除约束 tblEmployee_ident IF EXISTS(SELECT name FROM sysobjects WHERE name='tblEmployee_ident') ALTER TABLE tblEmployee DROP CONSTRAINT tblEmployee_ident --如果存在系统索引名称为tblEmployee_ident,则删除索引tblEmployee.tblEmployee_iden IF EXISTS(SELECT name FROM sysindexes WHERE name='tblEmployee_ident') DROP INDEX tblEmployee.tblEmployee_ident ●使用alter table语句修改表,add constraint语句添加主键 --修改tblEmployee表,添加约束tblEmployee_ident,在文件组EmployeeTablesFG创建聚集索引ALTER TABLE tblEmployee ADD CONSTRAINT tblEmployee_ident PRIMARY KEY CLUSTERED(EmployeeID)ON

相关主题