提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
目录
一、主键的约束
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(最好成绩>平均成绩)
};
总结
约束就是对数据的限制这样可以避免无效数据,垃圾数据的存在。
以上就是我整理的数据约束的用法。