首页 > 数据库 >MySQL---约束

MySQL---约束

时间:2023-06-24 22:45:42浏览次数:57  
标签:外键 约束 --- 添加 MySQL 主键 数据 id

概念

  1. 约束是作用于表中列上的规则,用于限制加入表的数据
    例如:我们可以给id列加约束,让其值不能重复,不能为null值。
  2. 约束的存在保证了数据库中数据的正确性、有效性和完整性
    添加约束可以在添加数据的时候就限制不正确的数据,年龄是3000,数学成绩是-5分这样无效的数据,继而保障数据的
    完整性。

分类

  1. 非空约束: 关键字是 NOT NULL
    保证列中所有的数据不能有null值。
    例如:id列在添加 马花疼 这条数据时就不能添加成功。
  2. 唯一约束:关键字是 UNIQUE
    保证列中所有数据各不相同。
    例如:id列中三条数据的值都是1,这样的数据在添加时是绝对不允许的。
  3. 主键约束: 关键字是 PRIMARY KEY
    主键是一行数据的唯一标识,要求非空且唯一。一般我们都会给没张表添加一个主键列用来唯一标识数据。
    例如:上图表中id就可以作为主键,来标识每条数据。那么这样就要求数据中id的值不能重复,不能为null值。
  4. 检查约束: 关键字是 CHECK
    保证列中的值满足某一条件。
    例如:我们可以给age列添加一个范围,最低年龄可以设置为1,最大年龄就可以设置为300,这样的数据才更合理些。
    注意:MySQL不支持检查约束。
  5. 默认约束: 关键字是 DEFAULT
    保存数据时,未指定值则采用默认值。
    例如:我们在给english列添加该约束,指定默认值是0,这样在添加数据时没有指定具体值时就会采用默认给定的0。
  6. 外键约束: 关键字是 FOREIGN KEY
    外键用来让两个表的数据之间建立链接,保证数据的一致性和完整性。
    外键约束现在可能还不太好理解,后面我们会重点进行讲解。

非空约束
概念
非空约束用于保证列中所有数据不能有NULL值
语法

唯一约束
概念
唯一约束用于保证列中所有数据各不相同
语法

主键约束
概念
主键是一行数据的唯一标识,要求非空且唯一
一张表只能有一个主键
语法

默认约束
概念
保存数据时,未指定值则采用默认值
语法

注意:默认约束只有在不给值时才会采用默认值。如果给了null,那值就是null值。

验证自动增长: auto_increment 当列是数字类型 并且唯一约束。

示例

外键约束
概述:外键用来让两个表的数据之间建立链接,保证数据的一致性和完整性。
示例:如下图有两张表,员工表和部门表:

员工表中的dep_id字段是部门表的id字段关联,也就是说1号学生张三属于1号部门研发部的员工。现在我要删除1号部门,
就会出现错误的数据(员工表中属于1号部门的数据)。而我们上面说的两张表的关系只是我们认为它们有关系,此时需要
通过外键让这两张表产生数据库层面的关系,这样你要删除部门表中的1号部门的数据将无法删除。

语法:

示例:
根据上述语法创建员工表和部门表,并添加上外键约束:

删除外键
alter table emp drop FOREIGN key fk_emp_dept;
重新添加外键
alter table emp add CONSTRAINT fk_emp_dept FOREIGN key(dep_id) REFERENCES dept(id);

标签:外键,约束,---,添加,MySQL,主键,数据,id
From: https://www.cnblogs.com/wzh-Official/p/17501823.html

相关文章

  • graalvm native-image jfr 试用
    graalvm最近license许可模型的修改,对于我们使用graalvm增加了不少信心,尤其是以前需要企业订阅的一些特性以下是一个简单的jfr试用代码&构建代码来自官方文档,主要是试用下,对于graalvm直接可以免费下载企业版了,同时需要安装visualvm代码JFRDemo.java im......
  • 2023网络安全 -- 正向连接
    一、正向连接,Linux服务器主动控制windows服务器1、上传nc到windows服务器上运行2、以管理员身份运行cmd3、执行下面命令,监听任意来自8899端口的数据nc-e cmd-lvvp88994、Linux服务器执行如下命令,ip地址为windows服务器的地址ncat192.168.1.18888995、whoami查看当前主机名称,......
  • React - 10 react中的合成事件
    1.react中的合成事件推荐使用箭头函数,不用管this,但是如果要传参,还得通过bind,事件对象永远是最后一个参数importReactfrom"react";classDemoextendsReact.Component{/*基于React内部的处理,如果我们给合成事件绑定一个“普通函数”,当事件行为触发,绑定的函数执行;......
  • C#-SQLHelper(二)_MySQL
    SqlHelper工具类/***┌──────────────────────────────────────────────────────────────┐*│描述:Mysql的操作工具类*│作者:执笔小白......
  • C#-SQLHelper(三)_Oracle
    SqlHelper工具类/***┌──────────────────────────────────────────────────────────────┐*│描述:Oracle数据库的操作工具类*│作者:执笔小......
  • C#-SQLHelper(四)_PostgreSQL
    SqlHelper工具类/***┌──────────────────────────────────────────────────────────────┐*│描述:PostgreSQL的操作工具类*│作者:执笔小白......
  • 57 KVM工具使用指南-制作 LibcarePlus 热补丁
    57KVM工具使用指南-制作LibcarePlus热补丁57.1概述LibcarePlus支持如下方式制作热补丁:手动制作通过脚本制作手动制作热补丁的过程繁琐,对于代码量较大的工程,例如QEMU,手动制作热补丁极其困难。建议使用LibcarePlus自带脚本一键式地生成热补丁文件。57.2手动制作本节......
  • mysql8 执行聚合函数报错:Error 1140: In aggregated query without GROUP BY,sql_mode
    解决办法:setglobalsql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';SETGLOBALlog_bin_trust_function_creators=1;setsessionsql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZER......
  • 6-18|Python画字母H
    在使用Python画字母H时,最基本的步骤就是先定义开始和结束的位置。下面是示例代码:importturtlet=turtle.Turtle()t.penup()t.goto(-50,0)t.pendown()t.goto(50,0)t.penup()t.goto(0,0)t.pendown()t.goto(0,100)turtle.done()上述代码创建了一个名为t的turtle......
  • 基于.NetCore开发博客项目 StarBlog - (29) 开发RSS订阅功能
    前言最近忙中偷闲把博客的评论功能给做完了,我可以说这个评论功能已经达到「精致」的程度了......