列级约束与表级约束

合集下载

第四节:常见的约束

第四节:常见的约束

第四节:常见的约束⼀、约束 1、什么是约束 含义:⼀种限制,⽤于限制表中的数据,为了保证表中的数据的正确性、有效性和可靠性。

为了保证数据的⼀致性和完整性,SQL规定以约束的⽅式对表数据进⾏额外的条件限制。

约束是表级的强制规定。

可以在创建表时规定约束(通过create table语句),或者在表创建之后也可以(通过 alter table语句)。

2、约束分类 有以下六种约束:NOT NULL:⾮空约束,规定某个字段不能为 nullUNIQUE:唯⼀约束,规定某个字段在整个表中是唯⼀的PRIMARY KEY:主键(⾮空且唯⼀)CHECK :检查约束(MySQL不⽀持)DEFAULT:默认值,⽤于保证该字段有默认值FOREIGN KEY:外键,⽤于限制两个表的关系,⽤于保证该字段的值必须来⾃于主表的关联列的值,在从表添加外键约束⽤于引⽤主表中某列的值 注意:MySQL 不⽀持 check 约束,但可以使⽤ check 约束,⽽没有任何效果。

根据约束数据列的限制,约束可分为: ①单列约束:每个约束只约束⼀列 ②多列约束:每个约束可约束多列数据 根据约束的作⽤范围,约束可分为: ①列级约束只能作⽤在⼀个列上,跟在列的定义后⾯; ②表级约束可以作⽤在多个列上,不与列⼀起,⽽是单独定义; 3、⼆、六⼤约束 1、NOT NULL约束 (1)NOT NULL 约束概述 ⾮空约束⽤于确保当前列的值不为空值,⾮空约束只能出现在表对象的列上。

NULL 类型特征: ①所有的类型的值都可以是 null,包括 int、float 等数据类型; ②空字符串 "" 不等于 null,0 也不等于 null; (2)设置NOT NULL 约束 ①创建 NOT NULL 约束CREATE TABLE emp(id INT(10) NOT NULL,NAME VARCHAR(20) NOT NULL DEFAULT 'abc',sex CHAR NULL); ②增加 NOT NULL 约束ALTER TABLE empMODIFY sex VARCHAR(30) NOT NULL; ③取消 NOT NULL 约束ALTER TABLE empMODIFY sex VARCHAR(30) NULL; ④取消 NOT NULL 约束,增加默认值ALTER TABLE empMODIFY NAME VARCHAR(15) DEFAULT 'abc' NULL; 2、UNIQUE 约束 (1)UNIQUE 约束概述 唯⼀约束概念:表中的某⼀列不能出现重复的值,必须保证值的唯⼀性。

2023年计算机二级《MySQL数据库程序设计》考试全真模拟易错、难点汇编贰(答案参考)试卷号:42

2023年计算机二级《MySQL数据库程序设计》考试全真模拟易错、难点汇编贰(答案参考)试卷号:42

2023年计算机二级《MySQL数据库程序设计》考试全真模拟易错、难点汇编贰(答案参考)(图片大小可自由调整)一.全考点综合测验(共50题)1.【单选题】面向对象的设计方法与传统的面向过程的方法有本质不同,它的基本原理是( )。

A.模拟现实世界中不同事物之间的联系B.强调模拟现实世界中的算法而不强调概念C.使用现实世界的概念抽象地思考问题从而自然地解决问题D.不强调模拟现实世界中的算法而强调概念正确答案:C2.【单选题】若有定义“ int a=5 ,b=7;”,则表达式a%一(b%2) 运算后, a 的值为( )。

A.0B.1C.11D.3正确答案:A3.【单选题】恢复MySQL数据库可使用的命令是______。

A.mysqldumpB.mysqladminC.mysqlD.mysqld正确答案:C4.【单选题】下列关于表和视图的叙述中错误的是______。

A.视图可以和表一起使用B.表和视图上都可以创建索引C.表和视图的数据都可以进行更新操作,但视图的更新受限D.表和视图都可以使用SQL语句进行查询正确答案:B5.【单选题】查找学生表student 中姓名的第二个字为"t" 的学生学号Sno 和姓名sname,下面A.SELECT SRO ,shame FROM student WHERE sname="_t%";B.SELECT Sno,sname FROM student WHERE shame LIKE "_t%" ;C.SELECT sno,shame FROM student WHERE sname="%t_";D.SELECT sno,shame FROM student WHERE sname LIKE "%t_" ;正确答案:B6.【单选题】关于E-R 图,以下描述中正确的是______。

《数据库系统原理》复习题(答案)

《数据库系统原理》复习题(答案)

(一)填空题1.数据管理经历了_______阶段、________阶段到________阶段的变迁。

(手工管理、文件管理、数据库管理)2.实体之间联系的基本类型有______、_______、_______。

(一对一、一对多、多对多)3.在E-R图中,用____表示实体,用______表示联系,用______表示属性。

(矩形框、菱形框、椭圆框)4.数据库的三层模式结构是________、_________、_______。

(外模式、逻辑模式、内模式)5.关系模型中一般讲数据完整性分为三类:_________、___________、__________。

(实体完整性、参照完整性、用户定义完整性)6.数据模型由三部分组成:数据结构、数据操作和____________。

(数据的约束条件或数据完整性规则)7.SQL语言是一种标准的数据库语言, 包括数据的查询、定义、操纵和______四部分功能。

(控制)8.视图是从其它________或视图导出的虚表。

(基本表)9.在关系模式R 中,若属性或属性组X 不是关系R 的关键字,但X 是其他关系模式的关键字,则称X 为关系R 的___________。

(外关键字)10.访问SQL server数据库对象时,需要经过身份验证和_________两个阶段,其中身份验证分为Windows验证模式和_______验证模式。

(权限验证、混合)11._______是存储在文件中的一系列SQL语句,即一系列按顺序提交的批处理。

(脚本)12.SQL语言中行注释的符号为_________;块注释的符号为_________。

(--、/**/)13.SQL server中的变量分为两种,全局变量和局部变量。

其中全局变量的名称以_______字符开始,有系统定义和维护。

局部变量以__________字符开始,由用户自己定义和赋值。

(@@、@)14.在SQL server中,其权限分为三类,即_________权限、_________权限和_________权限。

sql约束级别

sql约束级别

sql约束级别在关系型数据库中,约束是一种用于保证数据完整性和一致性的规则。

约束可以应用于表和列级别,用于限制对数据的插入、更新和删除操作。

SQL(Structured Query Language)提供了多种约束级别,下面是其中一些常见的约束级别及其简单介绍和说明:1. 主键约束(Primary Key Constraint):主键约束用于唯一标识表中的每一行数据。

它要求被约束的列(或列的组合)具有唯一性且非空,这样就能够确保表中的每一行都能够被唯一地标识。

主键约束可以保证数据的唯一性和完整性,同时还能提高数据的检索性能。

2. 唯一约束(Unique Constraint):唯一约束要求被约束的列(或列的组合)具有唯一性,但允许其中的某些列包含空值。

与主键约束不同,唯一约束不是用于标识数据的主要键值,但它可以确保表中的数据没有重复值。

3. 非空约束(Not Null Constraint):非空约束要求被约束的列不允许包含空值。

它确保在插入或更新数据时,被约束的列始终有值,从而避免了数据的不完整性和错误。

4. 外键约束(Foreign Key Constraint):外键约束用于建立表之间的关联关系。

它要求被约束的列(或列的组合)的值必须存在于另一个表的主键中,或者为空(如果允许)。

外键约束能够保证表之间的数据一致性,防止引用了不存在的数据。

5. 检查约束(Check Constraint):检查约束用于限制列中取值的范围或满足特定条件。

它可以定义一个表达式,该表达式必须返回 true 才能插入或更新数据。

检查约束可用于验证输入数据的有效性,并确保数据符合特定的业务规则。

这些约束级别可以单独应用于表的列,也可以组合使用以实现更复杂的约束规则。

通过使用这些约束,数据库可以自动执行数据验证和保护,以确保数据的完整性和一致性,提高数据质量和可靠性。

外键约束(20171015)

外键约束(20171015)

外键约束先要理清几个概念:1)候选键(Candidate Key):关系中的一个属性组,其值能唯一标识一个元组,若从该属性组中去掉任何一个属性,它就不具有这一性质了,这样的属性组称作候选键(候选码)。

2)主键(Primary Key):当有多个候选键时,可以选定一个作为主键,选定的候选键称为主键(主码)。

主键唯一标识表中的每行记录。

主键约束有如下特点:每个表中只能有一个主键,主键可以是一列,也可以是多列的组合;主键值必须唯一并且不能为空,对于多列组合的主键,某列值可以重复,但列的组合值必须唯一。

3)外键(Foreign Key):关系R中的一个属性组,它不是R的候选键,但它与另一个关系S 的候选键相对应,则称这个属性组为R的外键(外码)。

关系R称为参照关系(参照表、从表),关系S称为被参照关系(被参照表、主表)。

外键是指一个表(从表)中的一列或列组合,它虽不是该表的主键,但却是另一个表(主表)的主键。

通过外键约束可以为相关联的两个表建立联系,实现数据的引用完整性,维护两表之间数据的一致性关系。

特殊情况下,参照关系和被参照关系可以是同一个关系。

即,特殊情况下,从表和主表可以是同一个表。

参照[引用]关系(Referencing Relation)、子表、从表、外键表、参照[引用]表,这些作为同一术语的同义词使用。

被参照[被引用]关系(Referenced Relation)、父表、主表、主键表、被参照[被引用]表、查找表,这些作为同一术语的同义词使用。

请注意,在英语国家讲数据库的英语文献中,relation有时指“表”,有时指两表之间的联系(relationship)。

指两表之间的relationship时也常用link[链接]。

relationship和relation通常都翻译为关系,但在数据库中两者含义不同。

relationship [关系;联系;关联],在数据库中指不同表之间的数据彼此联系的方法。

列级约束与表级约束

列级约束与表级约束
SQL_server
列级约束与表级约束
列级约束是定义在一个列上的约 束,是列定义的一部分,与列名、数 据类型、惟一标识号、默认值和排序 规则等一样,都是列的属性。严格地 说列的数据类型也是一种列约束,它 限定了列的取值的域。
表级约束是在列定义外单独定义的, 它是多列之间的约束,用 CONSTRAINT关键字定义。如果 要对一个表中的多个列定义约束, 必须首先定义每个列,然后在末尾 追加表约束。
其中表级约束是一个主键约束, 约束名为pkey_xc_temp,主键为 “驾照号”和“车牌号”两列的组合。 作为主键的列不能为NULL,无论是 否定义为NOT NULL,如果列被定义
为主键或主键的一部分,列自然变为 NOT NULL属性。
可以为每个约束设定约束名,也 可以不设定,如果不命名约束,系统 将自动提供一个不重复的名字。如: DF_Szexam_xbD_24516F65就是
CREATE TABLE xc_temp ( 驾照号 char(6) NOT NULL, 车牌号 char(4) NOT NULL, 调度号 char(4) NULL, 行程 smallint NULL, CONSTRAINT pkey_xc_temp PRIMARY KEY (驾照号, 车牌号))

SQL Server生成的一个约束名,名字 的最后是十六进制数,尽管它确保了 名字的惟一性,但对数据库管理员和 数据库设计者来说,不便于认定对象, 在删除表中的多列时是非常麻烦的, 所以要尽量为重要的约束命名。
SQL_server
〖例7.10〗创建含有列约束驾驶员 表jsy_temp1
CREATE TABLE jsy_temp1 ( 驾照号 char(8) NOT NULL, 姓名 varchar(8) NOT NULL, 是否见习 char(1) NOT NULL , 所学专业 varchar(8) NULL)

列级约束与表级约束

列级约束与表级约束

列级约束与‎表级约束在SQL Serve‎r中有5种‎约束:主键约束(prima‎r y key const‎r aint‎)唯一性约束‎(uniqu‎e const‎r aint‎)检查约束(check‎const‎r aint‎)缺省约束(defau‎l t const‎r aint‎)外部键约束‎(forei‎g n key const‎r aint‎)在SQL SERVE‎R中,(1)对于基本表‎的约束分为‎列约束和表‎约束约束是限制‎用户输入到‎表中的数据‎的值的范围‎,一般分为列‎级约束与表‎级约束。

列级约束有‎六种:主键Pri‎m ary key、外键for‎e ign key 、唯一 uniqu‎e、检查checc‎k、默认def‎a ult 、非空/空值not null/ null表级约束有‎四种:主键、外键、唯一、检查列约束是对‎某一个特定‎列的约束,包含在列定‎义中,直接跟在该‎列的其他定‎义之后,用空格分隔‎,不必指定列‎名;表约束与列‎定义相互独‎立,不包括在列‎定义中,通常用于对‎多个列一起‎进行约束,与列定义用‎’,’分隔,定义表约束‎时必须指出‎要约束的那‎些列的名称‎。

完整性约束‎的基本语法‎格式为: [ CONST‎R AINT‎<约束名> ] <约束类型>约束名:约束不指定‎名称时,系统会给定‎一个名称。

(2)列级约束与‎表级约束的‎区别如果完整性‎约束涉及到‎该表的多个‎属性列,必须定义在‎表级上,否则既可以‎定义在列级‎也可以定义‎在表级。

简而言之:列级约束:列级约束是‎行定义的一‎部分,只能应用于‎一列上。

表级约束:表级约束是‎独立于列的‎定义,可以应用在‎一个表中的‎多列上。

(3)列级约束与‎表级约束在‎S QL中的‎用法(即如何在S‎Q L中定义‎约束)在创建表时‎定义约束:CREAT‎E TABLE‎table‎_name‎({<colum‎n_def‎i niti‎o n> -------列级约束定‎义|colum‎n_nam‎e AS compu‎t ed_c‎o lumn‎_expr‎e ssio‎n -------计算列定义‎|<teble‎_cons‎t rain‎t> ------表级约束定‎义}[,….n])一个约束定‎义为列级约‎束还是表级‎约束根据实际需‎要和设计者‎思路确定。

sql完整性约束

sql完整性约束

sql完整性约束课本中把完整性约束单独做成⼀章来讲解,所以之前写数据定义之基本表定义时说会放到后⾯讲。

完整性约束有三种:实体完整性,参照完整性,⽤户定义完整性。

最后会讲完整性约束命名⼦句,所以⼀共四个部分。

Part [实体完整性]实体完整性即主码,⽤primary key定义。

可⽤两种⽅式:列级约束:create table test (id int primary key); 只能选取⼀列作为主码;表级约束:create table test (id int,name char(10),primary key(id,name)); 可选多列作为主码;Part [参照完整性]参照完整性即外码,⽤foreign key(<列名>[,<列名>...]) references <表名>(<列名>[,<列名>..]);⽽且只能使⽤表级约束。

现在以上⾯那个截图中的表为参照,建⽴另⼀个表 注意:外码⼀定参照主码(可以是其他表的主码,也可以时⾃⼰的),⽽且外码的列数⼀定要等于被参照表的主码列数。

 参照完整性中⽐较⿇烦的是违约处理,即当对被参照表进⾏update/delete/insert操作会破坏参照完整性时,参照表赢告诉被参照表应该怎么做。

 所以参照表可以在定义外码时添加上on delete/update [<no action> / <cascade>]。

 看例⼦⽐较直观: 其中no action 表⽰拒绝执⾏(为默认值),cascade表⽰级联操作。

Part [⽤户定义完整性]书中的⽤户定义完整性有三种:列值⾮空(not null),列值唯⼀(unique),列值需满⾜条件表达式(check);not null都是列级完整性约束,很好理解。

check和unique可以是列级,也可以是表级约束。

看例⼦很⽅便理解: 除了这三种,现在的sql产品中很多都⽀持⼀个设置默认值的操作(default); 如果不设置,默认为NULL(not null,primary key除外)。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

列级约束与表级约束
在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_definition> -------列级约束定义
|column_name AS computed_column_expression -------计算列定义
|<teble_constraint> ------表级约束定义
}[,….n]
)
一个约束定义为列级约束还是表级约束
根据实际需要和设计者思路确定。

如primary key,当只涉及到一列时,定义为列级约束;当涉及到多列时,则定义为表级约束。

Prinmary key定义为列级约束时,相应SQL语句:
Stu_id上建立的主键pk_1为列级约束
CREATE TABLE student
(Stu_id int constraint pk_1 primary key,
Stu_name varchar(8),
….)
当定义为表级约束时,相应SQL语句:
CREATE TABLE student
(Stu_id int NOT NULL,
Stu_id上建立的主键pk_1为的表级约束
Stu_name varchar(8),
Constraint pk_1 primary key (Stu_id),
….)
各约束具体说明:
1. 主键约束
PRIMARY KEY约束
PRIMARY KEY约束用于定义基本表的主键,起唯一标识作用,其值不能为NULL,也不能重复,以此来保证实体的完整性。

PRIMARY KEY与UNIQUE约束类似,通过建立唯一索引来保证基本表在主键列取值的唯一性,但它们之间存在着很大的区别:
①在一个基本表中只能定义一个PRIMARY KEY约束,但可定义多个UNIQUE约束;
②对于指定为PRIMARY KEY的一个列或多个列的组合,其中任何一个列都不能出现空值,而对于UNIQUE所约束的唯一键,则允许为空。

注意:不能为同一个列或一组列既定义UNIQUE约束,又定义PRIMARY KEY约束。

PRIMARY KEY既可用于列约束,也可用于表约束。

PRIMARY KEY用于定义列约束时,其语法格式如下:
CONSTRAINT <约束名> PRIMARY KEY
PRIMARY KEY用于定义表约束时,即将某些列的组合定义为主键,其语法格式如下:[CONSTRAINT <约束名>]S PRIMARY KEY (<列名>[{<列名>}])
2. 唯一性(UNIQUE)约束
UNIQUE约束用于指明基本表在某一列或多个列的组合上的取值必须唯一。

定义了UNIQUE约束的那些列称为唯一键,系统自动为唯一键建立唯一索引,从而保证了唯一键的唯一性。

唯一键允许为空,但系统为保证其唯一性,最多只可以出现一个NULL值。

UNIQUE既可用于列约束,也可用于表约束。

UNIQUE用于定义列约束时,其语法格式如下:
[CONSTRAINT <约束名>] UNIQUE
唯一性约束用于指定一个或者多个列的组合的值具有唯一性,以防止在列中输入重复的值。

当使用唯一性约束时,需要考虑以下几个因素:
①使用唯一性约束的字段允许为空值。

②一个表中可以允许有多个唯一性约束。

③可以把唯一性约束定义在多个字段上。

④唯一性约束用于强制在指定字段上创建一个唯一性索引。

⑤缺省情况下,创建的索引类型为非聚簇索引。

unique约束是用来确保不受主键约束列上的数据的唯一性.
unique与primary key的区别在于:
(1)unique约束主要用于非主键的一列或多列上要求数据唯一.
(2)unique约束允许该列上存在NULL值,而主键决不允许出现.
(3)可以在一个表创建多个unique约束,而在一个表上只能够设置一个主键
3. 检查约束
CHECK约束用来检查字段值所允许的范围,如,一个字段只能输入整数,而且限定在0-100的整数,以此来保证域的完整性。

CHECK既可用于列约束,也可用于表约束,
其语法格式为:
[CONSTRAINT <约束名>] CHECK (<条件>)
一个列级检查约束只能与限制的字段有关;一个表级检查约束只能与限制的表中字段有关。

一个表中可以定义多个检查约束。

每个CREATE TABLE语句中每个字段只能定义一个检查约束。

在多个字段上定义检查约束,则必须将检查约束定义为表级约束。

当执行INSERT语句或者UPDATE语句时,检查约束将验证数据。

检查约束中不能包含子查询。

4. 缺省约束
使用缺省约束时,应该注意以下几点:
每个字段只能定义一个缺省约束。

如果定义的缺省值长于其对应字段的允许长度,那么输入到表中的缺省值将被截断。

不能加入到带有IDENTITY属性或者数据类型为timestamp的字段上。

如果字段定义为用户定义的数据类型,而且有一个缺省绑定到这个数据类型上,则不允许该字段有缺省约束。

5. 外部键约束
外部键约束用于强制参照完整性,提供单个字段或者多个字段的参照完整性。

FOREIGN KEY约束指定某一个列或一组列作为外部键,其中,包含外部键的表称为从表(参照表),包含外部键所引用的主键或唯一键的表称主表(被参照表)。

系统保证从表在外部键上的取值要么是主表中某一个主键值或唯一键值,要么取空值。

以此保证两个表之间的连接,确保了实体的参照完整性。

FOREIGN KEY既可用于列约束,也可用于表约束,
其语法格式为:
[CONSTRAINT <约束名>] FOREIGN KEY REFERENCES <主表名> (<列名>[{<列名>}])
当使用外部键约束时,应该考虑以下几个因素:
①外部键约束提供了字段参照完整性。

②外部键从句中的字段数目和每个字段指定的数据类型必须和REFERENCES从句中的字段相匹配。

③外部键约束不能自动创建索引,需要用户手动创建。

④用户想要修改外部键约束的数据,必须有对外部键约束所参考表的SELECT权限或者REFERENCES权限。

⑤参考同一表中的字段时,必须只使用REFERENCES子句,不能使用外部键子句。

⑥一个表中最多可以有31个外部键约束。

⑦在临时表中,不能使用外部键约束。

⑧主键和外部键的数据类型必须严格匹配。

6. NULL 约束
(1)NULL/NOT NULL
是否允许该字段的值为NULL。

NULL值不是0也不是空白,更不是填入字符串“NULL”,而是表示“不知道”、“不确定”或“没有数据”的意思。

当某一字段的值一定要输入才有意义的时候,则可以设置为NOT NULL。

如主键列就不允许出现空值,否则就失去了唯一标识一条记录的作用
只能用于定义列约束,
其语法格式如下:
[CONSTRAINT <约束名> ][NULL|NOT NULL]。

相关文档
最新文档