Mysql六大约束

Mysql六大约束(constraint)

约束的作用

在设计表的时候使用约束可以帮助维护表中记录的完整性和有效性

主键约束(PRIMARY KEY)
  • 特点:非空且唯一,每个表只能有一个主键
CREATE TABLE `student`(
	`id` int PRIMARY KEY
);
非空约束(NOT NULL)
CREATE TABLE `student`(
	`id` int NOT NULL
);
唯一约束(UNIQUE)
  • 列级约束用法
CREATE TABLE `student`(
	`id` int UNIQUE
);
  • 表级约束用法
CREATE TABLE `student`(
	`id` int,
	`studentId` int,
	UNIQUE(`id`, `studentId`)
);
默认约束(DEFALUT)
create table `student`(
	`id` int,
	`core` int DEFALUT 1 
);
检查约束(CHECK)

Mysql在Mysql8.0.16以后的版本才提供检查约束
特点:保证字段值满足某一个/多个条件

  • 列级约束用法
CREATE TABLE student(
	`id` int,
	`age` int CHECK(`age` > 0 && `age` <= 120)
);
  • 表级约束用法
CREATE TABLE `user`(
	`id` int,
	`age` int,
	CHECK(`id` < 100 && `age` > 10)
)
外键约束
外键的作用
  1. 外键可以保证数据完整性和一致性,级联操作非常方便;
  2. 使用外键可以将数据完整性判断托付给数据库完成,减少程序的代码量;
外键语法
-- 建表添加外键约束语法
[CONSTRAINT <外键名>] FOREIGN KEY 字段名 [,字段名2,…]
REFERENCES <主表名> 主键列1 [,主键列2,…]
--修改表添加外键约束语法
ALTER TABLE <数据表名> ADD CONSTRAINT <索引名>
FOREIGN KEY(<列名>) REFERENCES <主表名> (<列名>);
-- 删除外键
ALTER TABLE <表名> DROP FOREIGN KEY <外键约束名>;
外键的工作方式
  • 阻止执行
    ① 从表插入新行,其外键值不是主表的主键值便阻止插入;
    ② 从表修改外键值,新值不是主表的主键值便阻止修改;
    ③ 主表删除行,其主键值在从表里存在便阻止删除(要想删除,必须先删除从表的相关行);
    ④ 主表修改主键值,旧值在从表里存在便阻止修改(要想修改,必须先删除从表的相关行)。

  • 级联执行
    ① 主表删除行,连带从表的相关行一起删除。
    ② 主表修改主键值,连带从表相关行的外键值一起修改。

外键的工作方式 - 实例演示
CREATE TABLE `user`(
	`id` int PRIMARY KEY,
	`name` char(50)
);

CREATE TABLE `student`(
	`student_id` int PRIMARY KEY,
	`class` int,
	CONSTRAINT `fk` FOREIGN KEY (`student_id`) REFERENCES `user`(`id`)
);

INSERT INTO `user`
VALUES	(1, "张三"),
		(2, "李四"),
		(3, "王五"),
		(4, "赵六");
			 
			 
INSERT INTO `student`
VALUES	(1, 1),
		(2, 1),
		(3, 2),
		(4, 3);

@ 表1,user表
在这里插入图片描述
@ 表2,student表
在这里插入图片描述

  • 此时两个表的数据已经被外键约束,执行以下操作:
 1. 操作主表中将被外键约束的数据
	UPDATE `user` SET `id` = 5 WHERE `name` = "张三";  -- SQL报错
	
 2. 操作从表,将被约束的数据修改为主表中<不存在>的外键数据 
	UPDATE `student` SET `student_id` = 5 WHERE `class` = 3;  -- SQL报错
	
 3. 操作从表,将被约束的数据修改为主表中<存在>的外键数据 
	UPDATE `student` SET `student_id` = 4 WHERE `class` = 2;  -- SQL语句通过
  • SQL报错信息(序号与SQL语句相对应)
  1. Cannot delete or update a parent row: a foreign key constraint fails (myDataBase.student, CONSTRAINT fk FOREIGN KEY (student_id) REFERENCES user (id))
  1. Cannot add or update a child row: a foreign key constraint fails (myDataBase.student, CONSTRAINT fk FOREIGN KEY (student_id) REFERENCES user (id))

示例中的三条SQL演示了外键的工作方式中的第②、④点。

外键的缺点
  • 并发问题。在使用外键的情况下,每次修改/删除表数据都需要去另外一个表检查数据,需要获得额外的锁。若是在高并发大流量事务场景,使用外键更容易造成死锁;
  • 扩展性问题。比如从"Mysql"将数据迁移到"Oracle",外键依赖于数据库本身的特性,做迁移可能不方便;
  • 不利于分库分表。在水平拆分和分库的情况下,外键是无法生效的。将数据库关系的维护放入应用程序中,可以为将来的分库分表省去很多的麻烦。

数据库知识补充

什么是级联操作

计算机科学中的级联指的是多个对象之间的映射关系,通过建立数据之间的级联关系可以提高管理效率

数据库水平扩容
  • 水平扩容也叫平行扩容,它的具体做法是以增加节点的方式扩展整个数据库,以达到系统对数据库的需求。简而言之,就是把数据库从已有的数据转移到另一个内存大的数据库当中。
  • 数据在迁移过程中需要满足业务可用和数据不可丢失两个方面。在数据迁移前一定要做好数据备份工作。
数据库垂直扩容
  • “水平”是从左往右的一种方式,那么“垂直”就是一种自上而下的方式,扩容方向不同,难度也不同。
  • 垂直扩容是使用增加内存的方式使得整个系统的容量扩充,扩充难度比较低,不过会受到系统内存的限制,任何系统都有相应的运行内存和存储内存,不可能无限制扩大,当扩大到一定程度的时候就会停止,就要考虑其他方式解决数据库满的问题。

欢迎评论、交流,如若文中描述错误,敬请指导。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 《郑阿奇.mysql实用教材》是一本关于数据库管理系统MySQL的实用教材。该教材以郑阿奇老师的经验和教学经历为基础,系统地介绍了MySQL的基本概念、特性和使用方法。 本书共分六章,首先是MySQL的概述,介绍了数据库的基本知识以及MySQL的发展历程和特点。接着是MySQL的安装与配置,详细说明了如何在不同操作系统上安装和配置MySQL数据库,使读者能够轻松地完成环境的搭建。 第三章到第五章是本书的重点内容,分别介绍了MySQL的基本操作、高级应用和性能优化。基本操作包括数据库的创建与删除、表的创建与管理以及增删改查等操作,通过实例和案例的引导,读者能够快速掌握MySQL的基本使用方法。高级应用部分则介绍了事务、索引、视图和存储过程等高级技术,帮助读者在实际应用中更好地利用MySQL来解决问题。性能优化章节更是针对数据库的性能提出了一系列优化方案和技巧,通过对数据库结构、查询语句和服务器参数的调整,使读者能够提升系统性能,提高数据处理效率。 最后一章是MySQL的备份与恢复,简单介绍了MySQL的备份策略和常用的备份工具,以及如何在系统崩溃后恢复数据库。 该教材使用简洁明了的语言,结合大量实例和案例,使读者能够很好地理解和掌握MySQL使用方法和技巧。同时,每章后都附有练习题和答案,方便读者巩固所学知识。 综上所述,《郑阿奇.mysql实用教材》是一本内容丰富、实用性强的MySQL教材,适合初学者和有一定基础的人士使用,是学习和应用MySQL的良好指导工具。 ### 回答2: 郑阿奇编写的《MySQL实用教材》是一本非常实用的数据库相关书籍。MySQL是一款非常流行的开源关系型数据库管理系统,而这本实用教材就是为希望学习和应用MySQL的读者而设计的。 这本教材主要包含了MySQL数据库的基本概念和操作技巧。首先,它介绍了数据库的概念、关系模型以及SQL语言的基本知识。通过这些基础知识的学习,读者可以了解到数据库的结构和操作方式。 接下来,教材详细介绍了MySQL数据库的安装和配置。这是使用MySQL的第一步,只有正确地安装和配置MySQL,才能顺利地进行后续的操作。 在数据库的实际应用方面,教材涵盖了常见的数据操作和管理技术。例如,如何创建和管理数据库、数据表以及各种数据类型的使用。同时,教材还介绍了如何添加、更新和删除数据,以及如何查询和筛选数据等常用技巧。 此外,教材还提供了一些高级技术的介绍,如索引的创建和优化、事务处理、并发控制等。这些内容对于需要进行复杂数据操作和管理的读者来说特别有帮助。 总的来说,郑阿奇的《MySQL实用教材》适合各种程度的读者,无论是初学者还是有一定经验的人。它深入浅出地介绍了MySQL的基本概念和操作技巧,帮助读者学会使用这个强大的数据库管理系统。无论是从事开发、数据分析还是其他与数据库相关的职业,这本教材都是非常实用的参考书。 ### 回答3: 《郑阿奇.mysql实用教材》是一本非常实用的MySQL数据库教材。这本教材采用了简洁明了的语言和逻辑结构,非常适合MySQL初学者使用。 首先,这本教材从MySQL的基本概念开始介绍,包括数据库的定义、表和列的概念等。然后,逐步引入了SQL语言的使用,包括常见的增删改查操作,让读者能够迅速上手操作数据库。此外,教材也介绍了MySQL的常见数据类型、约束、索引等高级概念,帮助读者更深入地理解MySQL的运作原理。 教材还特别强调了MySQL数据库的性能优化与安全性,这是很多初学者容易忽略的方面。书中详细介绍了如何优化查询语句、设计高效的表结构以及进行备份与恢复操作。此外,教材也提供了一些实例和案例,帮助读者将理论知识应用到实际项目中。 除了内容的丰富性之外,这本教材的优势还在于它的语言简练和结构清晰。作者郑阿奇用通俗易懂的语言阐述复杂的数据库概念,并且通过大量的图表和例子进行说明,使学习过程变得轻松愉快。 总之,《郑阿奇.mysql实用教材》是一本非常实用的MySQL学习材料,适合初学者使用。它全面介绍了MySQL的基本概念、SQL语言的使用以及数据库性能优化与安全,内容丰富,结构清晰。无论是希望掌握MySQL的基本操作,还是想进一步提升数据库设计与优化能力,这本教材都会是一个不错的选择。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值