mysql操作 sql语句中的完整性约束有哪些,主键约束、外键约束、引用完整性约束,主键外键、唯一性

什么是约束:约束:就是约定哪些东西能填、怎么填?哪些东西不能填?

文章目录

      • 前言:建表
      • 正文
      • 一、实体完整性约束
        • 1. 主键约束
        • 2. 唯一性约束
        • 3. 自增长约束
        • 4. 联合主键约束
      • 二、域完整性约束
      • 三、引用完整性约束
        • 1. 外键约束

讲约束一般是在创建表时,对字段名进行约束,所以这里先讲如何创建表:

前言:建表

语法:

create table 表名(字段名1 数据类型 [约束],字段名2 数据类型 [约束],...    -- 最后一个不写,逗号
);

正文

一、实体完整性约束

在这里插入图片描述

1. 主键约束

主键:所有字段中唯一标识的一个字段。特点:非空、唯一,一张表只能有一个主键

分类:

  • 自然主键:使用表中的字段作为主键(比如:身份证号)
  • 代理主键:自定义一个字段来作为主键(这个用的多,比如:id)

语法:主要是在上面创建表中的 [约束] 处使用:字段名 数据类型 primary key

2. 唯一性约束

这一列的数据值要唯一(比如注册的时候,用户名不重复,但是 null 不算重复)语法为:字段名 数据类型 unique;

3. 自增长约束

一般自增长加在主键上,语法:字段名 数据类型 primary key auto_increment

举例:

-- 假如插入的时候不写字段名怎么办?比如:
insert into user values('张三',30);
-- 那我们知道不写字段名时,所有都需要赋值,那id怎么赋值,id是自增长的,但是我又必须赋值,怎么办,直接赋 null。但主键不能为null,所以这里的null相当于就是占位的作用
4. 联合主键约束

多个字段组成的主键。联合主键没有自增长。语法:primary key(字段名1,字段名2,...)

create table user(name varchar(20),age int,primary key(name,age)
)

二、域完整性约束

域:就是表中的某一个单元格,对格子的约束。

1、非空约束:字段名 数据类型 not null

2、数据类型约束:类型要匹配

3、默认值约束:字段名 数据类型 default 默认值。如果给了值,就用你的值,没有就是默认值

三、引用完整性约束

上面两种约束都是在单表中实现的,而现在多张表怎么办?
引用:一张表关联另一张表,两张表之间有引用关系。

1. 外键约束

实际开发中,如果能用逻辑外键(就是你认为这两张表有关系就行了),就不要添加外键约束。比如:

create table emp(empno int primary key,ename varchar(30),job varchar(30),salary double,
);
create table dept(deptno int primary key,dname varchar(30),location varchar(30)
)

① 上面这两张表没有任何关系,那如何加关系?----> **外键:**在一个表中加字段指向另一个表的主键。如:在 emp 中加:deptno int

② 在实际开发中,这样写已经足够了。因为表虽然没有外键约束,但有关系了,这就叫做逻辑外键

那外键约束怎么写呢?

create table emp(empno int primary key,ename varchar(30),job varchar(30),salary double,deptno int,constraint fk_emp_dept foreign key(deptno) references dept(deptno)
)

fk_emp_dept:就是外键约束的名字。随便命名,一般是前面加 fk,emp_dept 就是哪个表指向哪个表。

foreign key(deptno):deptno 参数,就是指定哪个字段当外键。

references dept(deptno):dept 是外键指向哪个表。括号里面的参数就是 dept 表中的主键。

外键约束需要注意:主表(外键指向的表叫做主表),从表(有外键的表叫做从表)

  • 主表有的,从表可以没有;但从表有的,主表必须要有。

    比如:添加(修改)数据

    insert into dept (deptno,dname,location) values(10,'研发部','金融港');   
    -- 正常运行insert into emp (empno,ename,job,salary,deptno) values(2023,'张三','java开发','20000',20);
    -- 报错
    

在这里插入图片描述

  • 删除主表的时候,要保证从表中没有

    比如:删除

    delete from dept where deptno = 10;-- 假如从表emp中有在部门10的员工,则删除失败,否则可以删除
    

这就是外键约束的原因,所以一般都是逻辑外键

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/179290.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JVM虚拟机-虚拟机性能监控、故障处理工具

1基础故障处理工具 jps(JVM Process Status Tool)是:虚拟机进程状况工具 作用:可以列出正在运行的虚拟机进程,并显示虚拟机执行主类(Main Class,main()函数所在的类)名称以及这些进…

亚里士多德的思想统治西方世界,实体论证明人不是猪

苏格拉底、柏拉图、亚里士多德,并称古希腊三贤。 公元前384年,亚里士多德出生在马其顿的奴隶主家庭,父亲是马其顿国王腓力二世的宫廷御医。 公元前367年,亚里士多德迁居到雅典,进入柏拉图学园,跟随柏拉图…

如何找寻需要贷款的精准客户? 运营商大数据获客解决企业获客难题

如今,它在商业和日常生活中的使用越来越普遍。然而,当谈到大数据的使用时,它已经渗透到各个行业。我们如何才能基于大数据准确定位用户,从而达到获取客户的目的。 您可以对上述用户群体的上网行为和通话行为进行建模和分析&#…

【JavaEE初阶】 HTML基础详解

文章目录 🎋什么是HTML?🍀HTML 结构🚩认识标签🚩HTML 文件基本结构🚩快速生成代码框架 🎄HTML 常见标签🚩注释标签🚩标题标签: h1-h6🚩段落标签: p&#x1f6…

美容院服务预约小程序的作用是什么

随着女性悦己消费增强,以及对自身容貌身材的高要求,美容院近些年迎来大发展,成为不少消费者前往的场所,无论大小,每个城市都汇聚着各式品牌,用户选择度较高,同时我们也观察到美容院经营痛点也很…

UnitTest测试框架详解

从软件架构的⻆度来说,测试最重要的步骤是在软件开发的时候界入比较好,所以在早期测试的界入,从软件经济学的⻆度上来说,发现的问题解决成本低,投入的资源比较少。因此,对一个测试的系统,开始最…

Linux C 编程入门 (GCC 和 Makefile的使用和编写)

Linux C 编程入门 在 Windows 下我们可以使用各种各样的 IDE 进行编程,比如强大的 Visual Studio。Ubuntu 下也有一些可以进行编程的工具,但是大多都只是编辑器,也就是只能进行代码编辑,如果要编译的话就需要用到 GCC 编译器&…

C语言判断水仙花数(ZZULIOJ1027:判断水仙花数)

题目描述 春天是鲜花的季节,水仙花就是其中最迷人的代表,数学上有个水仙花数,他是这样定义的:“水仙花数”是指一个三位数,它的各位数字的立方和等于其本身,比如153135333。 现在要求输入一个三位数&#…

【华为HCIP | 华为数通工程师】IPV4与IPV6 高频题(2)

个人名片: 🐼作者简介:一名大三在校生,喜欢AI编程🎋 🐻‍❄️个人主页🥇:落798. 🐼个人WeChat:hmmwx53 🕊️系列专栏:🖼️…

代码分析之今日头条

加密的过程应该由两部分组成

代码安全之代码混淆及加固(Android)

​ 目录 代码安全之代码混淆及加固(Android)🔒 摘要 引言 正文 代码混淆 代码加固 总结 参考资料 摘要 本文将介绍如何通过代码混淆和加固来保护Android应用的代码安全性。代码混淆是将代码进行加密,使其难以被反编译获得…

css实现鼠标悬停时元素的显示与隐藏

css实现鼠标悬停时元素的显示与隐藏 跟着B站黑马学习小兔鲜项目,有个点记录一下 就是当鼠标悬浮在商品列表上时,列表中的商品会显示出来,离开时,商品隐藏,如下: 感觉这个功能经常会遇到,但一直…