数据库的数据约束

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

目录

前言

一、主键的约束

        1.主键定义

        2.定义主键的原则

二、替代键约束

三、参照完整性约束

        1.参照完整性约束的概念

        2.参照完整性约束语法定义

        3、创建外键

四、check完整性约束

总结


前言

本文章介绍了mysql数据约束中的几种约束,希望本文章对你有所帮助。


提示:以下是本篇文章正文内容,下面案例可供参考

一、主键的约束

1.主键定义

主键就是表中的一列或多个列的一组,其值能唯一地标识表中的每一行。MySQL为主键列创建了唯一性索引,实现了数据的唯一性,在查询中使用主键时,该索引可用来对数据进行快速访问。MySQL通过定义PRIMARY KEY 约束来创建主键,而且 PRIMARY KEY 约束中的列不能取空值。如果PRIMARYKEY约束是由多列组合定义的,则某一列的值可以重复,但PRIMARYKEY约束定义中所有列的组合值必须唯一。
用户可以用两种方式定义主键,作为列或表的完整性约束,作为列的完整性约束时,只需在列定义的时候加上关键字 PRIMARYKEY;作为表的完整性约束时,需要在语句最后加上一条PRIMARYKEY(列名,…)语句。

例子1-1 创建book-copy表,将"书名"定义为主键。

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

例1-1中主键定义于NOTNULL之后,也可以在主键之后指定NOTNULL。如果作为主键的一部分的一个列没有定义为NOT NULL,MySQL就自动把这个列定义为NO NULL。例3-14中的书名列可以没有NOTNULL声明,为了清楚起见,最好包含这个空指定。
当表中的主键为复合主键时,只能将其定义为表的完整性约束。
1-2创建course 表来记录每门课程的学生的“学号”“姓名”“课程号”“学分
“毕业日期”。其中“学号”“课程号”“毕业日期”来构成复合主键。
 

create table course
{
    学号 varchar(6) NOT null,
    姓名 varchar(8) NOT null,
    毕业课程 date NOT null,
    课程号 varchar(3),
    学分 tinyint,
    PRIMARY KEY(学号,课程号,毕业日期)
};

2.定义主键的原则

原则上,任何列或者列的组合都可以充当一个主键,但是主键列必须遵守一些规则。
这些规则源于关系模型理论和MySQL所制定的规则。
(1)每个表必须定义一个主键
关系模型理论要求必须为每个表定义一个主键。然而,MySQL并不要求这样,它可以创建一个没有主键的表。但是,从安全角度考虑,应该为每个基础表指定一个主键。主要原因在于,没有主键,可能在一个表中存储两个相同的行,当两个行不能彼此区分时,查询过程中将会满足同样的条件,更新的时候也总是一起更新,这样容易造成数据库崩溃。(2)唯一性规则
表中两个不同的行在主键上不能具有相同的值。
(3)最小化规则
如果从一个复合主键中删除一列,而剩下的列构成的主键仍然满足唯一性原则,这个复合主键是不正确的。这条规则称为最小化规则,也就是说,复合主键不应该管个不必要的列。一个列名在一个主键的列表中只能出现一次。
MySQL 自动地为主键创建一个索引,通常这个索引名为PRIMARY,用户则可以重新给这个索引起名。

我们可以参照例子1-2的表创建course1表,将索引命名为"INDEX_course"。

create TABLE course1
{
学号 varchar(6) NOT NULL,
姓名 varchar(8) NOT NULL,
毕业日期 datetime NOT NULL,
课程号 varchar(3),
学号 tinyint,
PRIMARY KEY INDEX_course(学号,课程号,毕业日期)
};

二、替代键约束

替代键就像主键一样,是表的一列或一组列,它们的值在任何时候都是唯一的。因为一个表只能有一个主键,所以当一个表有多个列需要建立唯一性约束时,替代键是没有被选做主键的候选键。而定义替代键的关键字是UNIQUE。

例子2-1在表book_copy1中,将“图书编号”作为主键,将“书名”列定义为一个替代键。

create TABLE book_copy1
{
图书编号 varchar(20) NULL,
书名 varchar(20) NOT NULL,
出版日期 date NULL,
PRIMARY KEY(图书编号)
UNIQUE(书名)
};

`主键和替代键之间的区别可以总结如下:
 主键是基于现有数据来唯一标识数据行的,而替代键是人工创建并没有具体业务含义的。
 主键的值不能为NULL,而替代键的值可以为空。
 主键可由一个或多个字段组成,而替代键通常只由一个字段组成。
 主键用于关系数据库的表之间创建关系,并可以作为外键引用,而替代键主要用于提高性能和简化设计。

三、参照完整性约束

 1.参照完整性约束是什么。

参照的完整性要求关系中不允许引用不存在的实体。与实体完整性关系模型必须满足的完整性约束条件,目的是保证数据的一致性。参照完整性又称

 2.参照完整性约束语法定义。

参照完整性约束可以在创建表或修改表时定义一个外键声明。

这是定义外键的语法格式:

FOREIGN KEY(外健)
REFERENCES父表表名[(父表列名[(长度)] [ASC | DESC],…)]
[ON DELETE
{RESTRICT | CASCADE | SET NULL | NO ACTION}]
[ON UPDATE
(RESTRICT | CASCADE | SET NULL | NO ACTION}]

3.创建外键。

创建外键是数据库设计中的一个重要步骤,它主要用于确保数据的一致性和完整性。以下是创建外键的几种常用方法:

3.1 对已经存在的表添加外键

如例子3-1 如果有一个员工表(employees)和一个部门表(departments),他们之间要通过一个外键链接,那么可以使用以下SQL语句创建这个外键:

ALTER TABLE employees ADD CONSTRAINT dept_fk FOREIGN KEY (dept_id) REFERENCES departments (dept_id);

3.2 在创建表的时候定义外键

语法格式为

create table 表名(列定义,...)|[外键定义]

四、check完整性约束

主键、替代键、外键都是常见的完整性约束实例。但是,每个数据库还有一些专用完整性约束,例如,sell 表中的订购册数要在1~5000内,book 表中的出版时间必须大1986年1月1日。这样的规则可以使用CHECK完整性约束来指定。
CHECK完整性约束在创建表的时候定义,可以定义为列完整性约束,也可以定义为
完整性约束。
语法格式如下。check(表达式)

语法说明如下。
表达式:指定需要检查的条件,在更新表数据的时候,MySQL会检查更新后的数据
是否满足CHECK的条件。
例子4-1创建表student,只考虑学号和性别两列,性别只能包含“男”或“女
两项。

CREATE
TABLE student
学号 char(6) NOT NULL,
性别 char(2) NOT NULL CHECK(性别 IN(‘男,‘女'))
);

通过这个例子,CHECK完整性约束指定了性别只允许输入“男”或“女”,由于CHECK包
在列自身的定义中,因此CHECK完整性约束被定义为列完整性约束。

如果指定的完整性约束中要互相比较一个表的两个列或多个列,那么该列完整性约束必须定义表完整性约束。

例子4-2创建student2表,有"学号","最好成绩","平均成绩"3列,要求最好成绩必须大于平均成绩。

CREATE TABLE Student2
{
    学号 char(6) NOT NULL,
    最好成绩 int(1) NOT NULL,
    平均成绩 int(1) NOT NULL,
     CHECK(最好成绩>平均成绩)
};

总结


约束就是对数据的限制这样可以避免无效数据,垃圾数据的存在。

以上就是我整理的数据约束的用法。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值