返回顶部
首页 > 资讯 > 数据库 >MySQL学习之完整性约束详解
  • 531
分享到

MySQL学习之完整性约束详解

MySQL 完整性约束MySQL 约束 2022-08-11 09:08:13 531人浏览 八月长安
摘要

数据完整性指的是数据的一致性和正确性。完整性约束是指数据库的内容必须随时遵守的规则。若定义了数据完整性约束,Mysql会负责数据的完整性,每次更新数据时,mysql都会测试新的数据内容是否符合相关的完整性约束条件,只有符

数据完整性指的是数据的一致性和正确性。完整性约束是指数据库的内容必须随时遵守的规则。若定义了数据完整性约束,Mysql会负责数据的完整性,每次更新数据时,mysql都会测试新的数据内容是否符合相关的完整性约束条件,只有符合完整性的约束条件的更新才被接受。

1、主键约束

主键就是表中的一列或多个列的组合,其值能唯一地标识表中的每一行。Mysql为主键列创建唯一性索引,实现数据的唯一性。在查询中使用主键时,该索引可用来对数据进行快速访问。通过定义PRIMARY KEY约束来创建主键,而且PRIMARY KEY约束中的列不能取空值。如果PRIMARY KEY约束是由多列组合定义的,则某一列的值可以重复,但PRIMARY KEY约束定义中所有列的组合值必须是唯一的。

可以使用两种方式定义主键来作为列或表的完整性约束。作为列的完整性约束时,只需在列定义的时候加上关键字PRIMARY KEY。作为表的完整性约束时,需要在语句最后加上一条PRIMARY KEY(col_name,...)语句。

例:创建表book_copy,将书名定义为主键

CREATE TABLE book_copy
(图书编号 varchar(6) NULL,
书名 varchar(20) NOT NULL PRIMARY KEY,
出版日期 date
);

当表中的主键为复合主键时,只能定义为表的完整性约束。

创建course表来记录每门课程的学生学号、姓名、课程号和学分。其中学号、课程号构成复合主键

CREATE TABLE course
(学号 varchar(6) NOT NULL,
姓名 varchar(8) NOT NULL,
课程号 varchar(3),
学分 tinyint,
PRIMARY KEY(学号,课程名)
);

原则上,任何列或者列的组合都可以充当一个主键。但是主键列必须遵守一些规则:

1、每个表只能定义一个主键。关系模型理论要求必须为每个表定义一个主键。然而,MySQL并不要求这样,即可以创建一个没有主键的表。但是,从安全角度应该为每个基本表指定一个主键。主要原因在于,没有主键,可能在一个表中存储两个相同的行。当两个行不能彼此区分时,在查询过程中,它们将会满足同样的条件,更新的时候也总是一起更新,容易造成数据库奔溃。

2、表中两个不同的行在主键上不能具有相同的值,这就是唯一性规则。

3、如果从一个复合主键中删除一列后,剩下的列构成主键仍然满足唯一性原则,那么,该复合主键是不正确的,这条规则称为最小化规则。也就是说,复合主键不应该包含不必要的列。

4、一个列名在一个主键的列表中只能出现一次。

MySQL自动地为主键创建一个索引。通常,这个索引名为PRIIMARY。不过,也可以重新给改索引另起名。

例:创建course表来记录每门课程的学生学号、姓名、课程号和学分。其中学号、课程号构成复合主键,将主键创建的索引命名为INDEX_C

CREATE TABLE course
(学号 varchar(6) NOT NULL,
姓名 varchar(8) NOT NULL,
课程号 varchar(3),
学分 tinyint,
PRIMARY KEY INDEX_C(学号,课程名)
);

2、替代键约束

替代键像主键一样,是表的一列或一组列,他们的值在任何时候都是唯一的。替代键是没有被选做主键的候选键。定义替代键的关键字是UNIQUE

例:在表book中将图书编号作为主键,书名列定义为一个替代键。 

CREATE TABLE book
(
图书编号 varchar(20) NOT NULL,
书名 varchar(20) NOT NULL UNIQUE,
PRIMARY KEY(图书编号)
); 

在MySQL中替代键和主键的区别主要有以下几点:

1、一个数据表只能创建一个主键。但一个表可以有若干个UNIQUE键,并且他们甚至可以重合,例如,在C1和C2列上定义了一个替代键,并且在C2和C3列上定义了另一个替代键,这两个替代键在C2列上重合了,这是MySQL允许的。

2、主键字段的值不允许为NULL,而UNIQUE 字段的值可以是NULL,但必须使用NULL或NOT NULL声明。

3、创建PRIMARY KEY约束时,系统自动产生PRIMARY KEY索引。创建UNIQUE约束时,系统自动产生UNIQUE索引。

3、参照完整性约束

只有图书目录表中有的图书才可以销售,因此,在Sell表中的所有图书必须是Book表有的图书,也就是说存储在Sell表中的所有图书编号必须存在于Book表的图书编号列中。同样Sell表中的所有身份证号也必须出现在Members表的身份证号列中。这种类型的关系就是参照完整性约束。参照完整性约束都是一种特殊的完整性约束,实现为一个外键。所以Sell表中的图书编号列和身份证号列都可以定义为一个外键。可以在创建表或修改表时定义一个外键声明

定义外键的语法格式:REFERENCES 表名 [ ( 列名 | (长度)] [ ASC | DESC ],...) ]

[ON DELETE { RESTRICT | CASCADE | SET NULL | NO ACTioN } ]

[ON UPDATE { RESTRICT | CASCADE | SET NULL | NO ACTION } ]

外键被定义为表的完整性约束,语法中包含了外键所参照的表和列,还可以声明参照动作。如果没有指定动作,两个参照动作就会默认地使用RESTRICT。

MySQL参照完整性约束目前只可以用在那些使用InnoDB存储引擎创建的表中,对于其他类型的表,MySQL服务器能够解析CREATE TABLE语句中的FOREIGN KEY语法,但不能使用或保存它。

要修改表的存储引擎,可以采用ALTER TABLE语句。例如,修改Book表的存储引擎为InnoDB,使用:ALTER TABLE book ENGINE=INNODB;

例:创建book_ref表,所有的book_ref表中图书编号都必须出现在Book表中,假设已经使用图书编号列作为Book表主键。

CREATE TABLE book_ref
(
图书编号 varchar(20) null,
书名 varchar(20) null,
出版日期 date null,
PRIMARY KEY(书名),
FOREIGN KEY(图书编号)
REFERENCES Book(图书编号)
ON DELETE RESTRICT
ON UPDATE RESTRICT
)ENGINE=INNODB;

当指定一个外键时,适用以下规则:

1、被参照表必须已经用1条CREATE TABLE语句创建了,或者必须是当前正在创建的表。在后一种情况下,参照表是同一个表。

2、必须为被参照表定义主键

3、必须在被参照表的表名后面指定列名(或列名的组合)。该列(或该列组合)必须是这个表的主键或替代键。

4、尽管主键不能够包含空值,但允许在外键中出现一个空值。这意味着,只要外键的每个非空值出现在指定的主键中,该外键的内容就是正确的。

5、外键中列的数目必须和被参照表的主键列的数目相同

6、外中列的数据类型必须和被参照表的主键中列的数据类型相同

例:创建带有参照动作CASCADE的book_refl表 

CREATE TABLE book_refl
(
图书编号 varchar(20) null,
书名 varchar(20) not null,
出版日期 date null,
PRIMARY KEY(书名),
FOREIGN KEY(图书编号)
REFERENCES Book(图书编号)
ON UPDATE CASCADE
)ENGINE=INNODB;

4、CHECK完整性约束

主键、替代键和外键都是常见的完整性约束的例子。但是,每个数据库都还有一些专用的完整性约束。例如,Sell表中订购册数要在1~5000之间,Book表中出版时间必须大于1986年1月1日。这样的规则可以使用CHECK完整性约束来指定。

CHECK完整性约束在创建表的时候定义。可以定义为列完整性约束,也可以定义为表完整性约束。

语法格式:CHECK(表达式)

例:创建表student,只考虑学号和性别两列,性别只能包含男或女 

CREATE TABLE student
(
学号 char(6) not null,
性别 char(2) not null,
CHECK(性别 IN('男','女'))
);

例:创建表student,只考虑学号和出生日期两列,出生日期必须大于1980年1月1日

CREATE TABLE student
(
学号 char(6) not null,
出生日期 date not null
CHECK(出生日期>'1980-01-01')
);

到此这篇关于MySQL学习之完整性约束详解的文章就介绍到这了,更多相关MySQL完整性约束内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

您可能感兴趣的文档:

--结束END--

本文标题: MySQL学习之完整性约束详解

本文链接: https://lsjlt.com/news/33644.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • MySQL学习之完整性约束详解
    数据完整性指的是数据的一致性和正确性。完整性约束是指数据库的内容必须随时遵守的规则。若定义了数据完整性约束,mysql会负责数据的完整性,每次更新数据时,MySQL都会测试新的数据内容是否符合相关的完整性约束条件,只有符...
    99+
    2022-08-11
    MySQL 完整性约束 MySQL 约束
  • MySQL之完整性约束
    完整性约束 完整性约束的定义 为了保证插入数据的正确性和合法性,给表中字段添加,除了数据类型约束以外的其他约束条件。 完整性约束的分类 实体完整性:记录之间不能重复。 主键约束(primary key):唯一并且不能为空 唯一约束(...
    99+
    2019-12-09
    MySQL之完整性约束
  • mysql-完整性约束
    约束条件与数据类型的宽度一样,都是可选参数作用:用于保证数据的完整性和一致性主要分为:PRIMARY KEY (PK)    #标识该字段为该表的主键,可以唯一的标识记录 FORE...
    99+
    2023-01-30
    完整性 mysql
  • MySQL(3)-表的完整性约束
       表的完整性约束作用 : 用于保证数据的完整性常见的表的约束有 : PRIMARY  KEY(PK主键) , FOREIGN  KEY(FK外键) , NOT  NULL , UNIQUE  KEY(唯...
    99+
    2024-04-02
  • MySQL学习之数据库表五大约束详解小白篇
    目录1.约束概念和分类2.五大约束的添加和删除2.1添加约束的六种方法2.2三种删除约束的方式2.3五大约束分别对应的添加删除方式(序号对应2.1和2.2)2.4对于创建约束的总结2...
    99+
    2024-04-02
  • mysql中怎么实现一个完整性约束
    这篇文章将为大家详细讲解有关mysql中怎么实现一个完整性约束,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。约束条件作用:用于保证数据的完整性和一致性主要分...
    99+
    2024-04-02
  • sql完整性约束怎么设置
    sql 完整性约束是一组规则,用于确保数据库中数据的准确性和一致性。它可以防止不一致和无效的数据进入数据库,并通过以下语法在 create table 语句中设置:非空约束:确保列不能包...
    99+
    2024-05-30
  • MySQL完整性约束的定义与实例教程
    目录完整性约束完整性约束的定义完整性约束的分类主键约束(primary key)单个主键和联合主键的区别主键字段的挑选原则删除主键约束主键自增(auto_increment)主键自增...
    99+
    2024-04-02
  • 【MySQL系列】表约束的学习
    「前言」文章内容大致是MySQL的表的约束。 「归属专栏」MySQL 「主页链接」个人主页 「笔者」枫叶先生(fy) 目录 一、MySQL表的约束1.1 空属性1.2 默认值(default)1.3 列描述(comme...
    99+
    2023-08-16
    mysql 学习 adb
  • MySQL数据库:数据完整性及约束的应用
    数据完整性 域完整性:---------匹配完整性:非空、缺省 字段/列 实体完整性:-------匹配完整性:主键、唯一键 记录/行 引用完整性:-------匹配完整性:外键 表与表之间 约束:constraint MySQL中的约束分...
    99+
    2019-01-16
    MySQL数据库:数据完整性及约束的应用
  • 关系数据库的完整性约束:实体完整性、参照完整性、用户自定义完整性
    关系模型的三种完整性约束是实体完整性、参照完整性和用户定义完整性。 文章目录 关系模型的三种完整性约束是实体完整性、参照完整性和用户定义完整性。实体完整性参照完整性用户自定义完整性 ...
    99+
    2023-10-03
    mysql sql
  • 三种数据库完整性约束介绍
    今天小编给大家分享的是三种数据库完整性约束介绍,相信很多人都不太了解,为了让大家更加了解,所以给大家总结了以下内容,一起往下看吧。一定会有所收获的哦。数据库的三种完整性约束:1、实体完整性,对关系中的记录唯...
    99+
    2024-04-02
  • 数据库字段约束详解:确保数据准确性和完整性
    1. 主键约束 主键约束用于确保表中每一行的唯一性,它可以是单列或多列的组合。主键约束的优点是: 确保表中每一行的唯一性,防止出现重复数据。 可以加快数据检索的速度,因为主键通常被用作索引键。 可以帮助维护数据的一致性,因为主键通常用...
    99+
    2024-02-14
    数据库 约束 主键 外键 非空 唯一 默认值 检查
  • Mysql中的CHECK约束特性详解
    功能说明 在mysql 8.0.16以前, CREATE TABLE允许从语法层面输入下列CHECK约束,但实际没有效果: CHECK (expr) 在 MySQL 8.0.16,CREATE TABLE添加了针对所有存...
    99+
    2022-08-08
    mysql check约束 MySQL检查约束 mysql设置check约束 mysqlcheck约束怎么写
  • MySQL约束超详解
    目录MySQL约束操作1.非空约束 2.唯一约束3.主键约束4.外键约束5、级联MySQL约束操作 概念:对表中的数据进行限定,保证数据的正确性,有效性和完整性。 分类: ...
    99+
    2024-04-02
  • MySQL主键约束和外键约束详解
    目录1、PRIMARY KEY2、FOREIGN KEY3、表的设计3.1 一对一3.2 一对多3.3 多对多1、PRIMARY KEY 上期我们讲述了 not null 和 unique 约束,而本期的第一个约束就是这...
    99+
    2023-03-13
    mysql主键约束和外键约束 mysql主键和外键
  • mysql学习笔记之完整的select语句用法实例详解
    本文实例讲述了mysql学习笔记之完整的select语句用法。分享给大家供大家参考,具体如下: 本文内容: 完整语法 去重选项 字段别名 数据源 where group ...
    99+
    2022-05-20
    mysql select语句
  • 详解MySQL 外键约束
    官方文档: https://dev.mysql.com/doc/refman/5.7/en/create-table-foreign-keys.html 1.外键作用: MySQL通过外键约束来保证表与表之间的数...
    99+
    2022-05-11
    MySQL 外键 MySQL 外键约束
  • MySQL外键约束详解
    目录一、mysql外键约束作用二、外键约束创建(一)创建外键约束的条件(二)在创建数据表时创建外键约束(三)在创建数据表后添加外键约束三、外键约束功能演示今天继续给大家介绍MySQL相关知识,本文主要内容是MySQL外键...
    99+
    2022-07-29
    Mysql外键约束
  • 如何理解数据库设计的完整性约束表现
    这篇文章将为大家详细讲解有关如何理解数据库设计的完整性约束表现,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。数据完整性是指数据的正确性、完备性和一致性,是衡...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作