MySQL六种约束的示例详解
作者:绿仔牛奶_ 发布时间:2024-01-16 19:15:38
标签:MySQL,约束
什么是约束
作用于表上的规则,限制存储在表中的数据
约束分类:
约束 | 描述 | 关键字 |
---|---|---|
非空约束 | 该字段数据不能为null | NOT NULL |
唯一约束 | 该字段数据唯一不重复 | UNIQUE |
主键约束 | 一行数据的唯一标识(非空且唯一) | PRIMARY KEY |
默认约束 | 未指定该字段值则使用默认值 | DEFAULT |
检查约束(8.0.16以后) | 该字段值满足某一条件 | CHECK |
外键约束 | 为两张表建立连接(数据一致、完整) | FOREIGN KEY |
创建表示例:
CREATE TABLE info(
`id` INT UNIQUE auto_increment PRIMARY KEY COMMENT'ID唯一标识',
`name` VARCHAR(10) NOT NULL UNIQUE COMMENT'姓名',
`age` INT CHECK(age > 0 && age < 120) COMMENT '年龄',
`status` CHAR(1) DEFAULT'1' COMMENT'状态',
`gender` CHAR(1) COMMENT'性别'
)COMMENT '用户信息表';
外键约束
外键通常用来为两张表建立连接,两张利用外键连接的表被称为父子表。
子表当中会设定一个外键字段用于关联父表的主键字段
即拥有外键的表是子表(从表),该外键对应另一个表的主键这个表称之为父表
如果没有设置外键,仅仅是将子表开了一个字段对应上了父表的主键字段在mysql层面是依旧没有任何关系的。此时两个表仅存在逻辑关系,无法保证数据的完整性和一致性
创建外键语法:
-- 在创建表时创建
CREATE TABLE son(
...
CONSTRAINT [外键名称] FOREIGN KEY(外键字段名) REFERENCES 主表名(主表主键字段名)
);
-- 创建表后为表添加主键
ALTER TABLE 表名ADD CONSTRAINT 外键名称 FOREIGN KEY(外键字段名) REFERENCES 主表(主表主键字段名)
-- 删除外键
alter table 表名 drop foreign key 外键名称;
创建示例:
# 父表
CREATE TABLE father(
`id` INT auto_increment PRIMARY KEY COMMENT'父表ID',
`name` VARCHAR(20) NOT NULL COMMENT'姓名',
`password` VARCHAR(20) DEFAULT(0000)
);
INSERT INTO father VALUES(null,'小三','1234'),(null,'小四','1234'),(null,'小五','1234'),(null,'小六','1234');
# 子表
CREATE TABLE son(
`id` INT auto_increment PRIMARY KEY COMMENT'子表ID',
`status` varchar(10) COMMENT '状态',
`fa_id` INT COMMENT'外键',
CONSTRAINT fk_father_son FOREIGN KEY(fa_id) REFERENCES father(id)
);
INSERT INTO son VALUES(null,'活',2),(null,'活',3),(null,'死',3),(null,'活',2);
上述示例 子表设置了外键,字段名为fa_id并关联到了父表主键id,外键名称为fk_father_son
创建完成后,我们添加几组数据。将几个son添加到表中,并设置外键字段属性为某个father。比如(null,‘活’,3),那么此时如果我们尝试去删除父表id=3的这一行数据,就会提示错误。因为两个表已经在mysql层面上进行了关联
总结:
从表的外键通常是主表的主键
从表中外键的类型必须与主表中的主键类型一致
主表数据发生变化时应注意从表数据的一致性问题
来源:https://blog.csdn.net/yuqu1028/article/details/128875020


猜你喜欢
- 大家好,今天我在学习 MySQL 8.0.22安装及配置遇到了一些问题,特地将我整个安装过程分享出来希望可以帮助不会安装的小伙伴😜。参考链接
- 404页面对于站长来说应该并不陌生,其作用无碍乎二点:提高用户体验和增强对搜索引擎的友好性。去年在跟几个朋友在聊天的时候,跟我说404页面不
- Exec 是 os 包中的一个子包,它可用于使用 Go 运行外部命令。Go exec 命令教程展示了如何在 Golang 中执行 shell
- 红黑树的性质一棵满足以下性质的二叉搜索树是一棵红黑树每个结点或是黑色或是红色。根结点是黑色的。每个叶结点(NIL)是黑色的。如果一个结点是红
- 最近的一个页面中碰到的,本来想用 border 来模拟设计图的虚线效果,但是很明显 border 效果不如设计图来的好看。顺便研究了下 da
- socket接口是实际上是操作系统提供的系统调用。socket的使用并不局限于Python语言,你可以用C或者Java来写出同样的socke
- 1. 简述我们在用scrapy爬取数据时,首先就要明确我们要爬取什么数据。scrapy提供了Item对象这种简单的容器,我们可以通过Item
- 对一个有向无环图(Directed Acyclic Graph简称DAG)G进行拓扑排序,是将G中所有顶点排成一个线性序列,使得图中任意一对
- 我们知道了钢琴键盘的音高是其实是有规律的,如下频率翻倍,高一个八度国际基准音:440Hz,钢琴键盘上对应小字一组的la小字一组的la可以看下
- 本文实例为大家分享了python正则实现计算器功能的具体代码,供大家参考,具体内容如下# -*- coding: utf-8 -*- # A
- 限制只能输入数字// -----------------------------------------------------------
- 本文实例讲述了基于进程内通讯的python聊天室实现方法。分享给大家供大家参考。具体如下:#!/usr/bin/env python# Ad
- 此文译自Fred Wilson 2010年2月在迈阿密举行的Web未来应用的年会上的演讲谢谢青云推荐了这篇这么好的演说谢谢卓和百忙中抽空帮我
- 一、了解seleniumSelenium是一个用于测试网站的自动化测试工具,支持各种浏览器包括Chrome、Firefox、Safar等浏览
- 介绍目前它是Python数值计算中最为重要的基础包,将numpy的数组的对象作为数据交互的通用语,一般我们要充分理解好矩阵计算的原理,这需要
- 本文实例讲述了python写入中英文字符串到文件的方法。分享给大家供大家参考。具体分析如下:python中如果使用系统默认的open方法打开
- 要介绍Python的三元表达式,可以先看看其他编程语言比如C,JAVA中应用:public class java { public stat
- Java一直标榜一句老话叫“编写一次,到处运行(Write Once,Run Anywhere)”,CSS也差一点点做到了。但就是为了差的一
- 一. 删除完全重复的记录完全重复的数据,通常是由于没有设置主键/唯一键约束导致的。测试数据:if OBJECT_ID('duplic
- 使用Django意味着后台框架的几乎所有内容都会和Django产生互动,排除功能全部手撸的情况.Django 后台admin有大量的属性和方