MySQL - 表的约束

文章目录

    • 1、空约束
    • 2.默认值
    • 3.列描述
    • 4.zerofill
    • 5.主键
    • 6.自增长
    • 7.唯一键
    • 8.外键


真正约束字段的是数据类型,但是数据类型约束很单一,需要有一些额外的约束,更好的保证数据的合法性,从业务逻辑角度保证数据的正确性。比如有一个字段是email,要求是唯一的。

1、空约束

  1. 两个值:null(默认的)和not null(不为空),不写时默认null。
  2. 数据库默认字段基本都是字段为空,但是实际开发时,尽可能保证字段不为空,因为数据为空没办法参与运算。
  3. 使用:字段 数据类型 […] null / not null […] 。

例子:假如在一份名单里,姓名和编号这两个字段是肯定不能为空的。

CREATE TABLE t1(-> name varchar(20) not null,-> id varchar(20)  not null-> );

在这里插入图片描述
在这里插入图片描述
解释:如果一个字段设置为null时,插入时可以进行省略,反之,不能省略。

2.默认值

  1. 默认值:某一种数据会经常性的出现某个具体的值,可以在一开始就指定好,在需要真实数据的时候,用户可以选择性的使用默认值。
  2. 使用:字段 数据类型 […] default 默认值 […]

例子:设置性别时默认为男或者女。

CREATE TABLE t2( name varchar(20) not null,id varchar(20) null,sex char(1) not null default '男' );

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
解释:如果设置为null但不设置默认值,系统会为我们添加默认值为null,如果设置not null但不设置默认值,系统不会为我们添加默认值,此时插入时不能省略该字段,如果设置not null且设置默认值,在我们插入时可以省略该字段了,该字段的数值设置为默认值。

3.列描述

  1. 列描述:comment,没有实际含义,专门用来描述字段,会根据表创建语句保存,用来给程序员或DBA 来进行了解(相当于注释了)。
  2. 使用:字段 数据类型 […] comment 描述

例子:给字段进行备注

CREATE TABLE t3(name varchar(20) comment '姓名', id varchar(20) comment '编号');

在这里插入图片描述

4.zerofill

  1. zerofill属性是对整数类型后面的括号内的数值进行处理,如果没有zerofill属性,那么括号内的数值没有意义,添加该属性后,会对该整数前面补0,具体看下面案例。
  2. 字段 数据类型 […] zerofill […]

例子:给字段添加zerofill属性后观察变化

CREATE TABLE t4(name varchar(20) ,id int zerofill );

在这里插入图片描述
在这里插入图片描述
解释:加了zerofill属性后,插入后不够整数类型后面的括号内的数值位数就会在前面补0。

5.主键

  1. 主键:primary key用来唯一的约束该字段里面的数据,不能重复,不能为空,一张表中最多只能有一个 主键;主键所在的列通常是整数类型。
  2. 建表时添加主键:字段 数据类型 […] primary key […]
  3. 作为主键的字段会被添加not null。

例子:添加主键

CREATE TABLE t5(name varchar(20) , id int primary key );

在这里插入图片描述
在这里插入图片描述
解释:当作为主键的字段的数据存在时,不允许重复插入。

复合主键

  1. 在创建表的时候,在所有字段之后,使用primary key(主键字段列表)来创建主键,如果有多个字段作为主键,可以使用复合主键。
  2. 使用:建表 primary key(字段列表)。

例子:

CREATE TABLE t6(name varchar(20) ,id int, primary key(name,id));

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
解释:当使用复合主键时,只有作为主键的字段都相同时才不允许插入。

补充

  1. 在建表后添加主键
    alter table 表名 add primary key(字段列表)
  2. 删除主键
    alter table 表名 drop primary key;

6.自增长

  1. auto_increment:当对应的字段,不给值,会自动的被系统触发,系统会从当前字段中已经有的最大值+1操作,得到一个新的不同的值。通常和主键搭配使用,作为逻辑主键。
  2. 自增长的特点:
    任何一个字段要做自增长,前提是本身是一个索引(key一栏有值) 。
    自增长字段必须是整数 。
    一张表最多只能有一个自增长。
  3. 使用:字段 数据类型 […] auto_increment […]

例子:给id添加为自增长

CREATE TABLE t9( 
id int  primary key auto_increment,
name varchar(20) 
);

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
解释:作为自增长的字段,在指定插入时可以省略不写,默认从1开始,数据库也会记录它下一次插入的值(这个值是表中最大值+1),并且插入比数据库记录的值大时,数据库记录的值就会被更新。

补充:
通过ALTER TABLE语句来实现设置初始值

ALTER TABLE table_name AUTO_INCREMENT = new_initial_value;

table_name是要修改的表名,new_initial_value是要设置的新的自增初始值。

在这里插入图片描述

在建表时设置初始值

CREATE TABLE t11
( id int  primary key auto_increment  ,
name varchar(20) 
)AUTO_INCREMENT=1000 ;//这里设置

在这里插入图片描述

7.唯一键

  1. 一张表中有往往有很多字段需要唯一性,数据不能重复,但是一张表中只能有一个主键:唯一键就可以解决表中有多个字段需要唯一性约束的问题。
  2. 唯一键的本质和主键差不多,唯一键允许为空,而且可以多个为空,空字段不做唯一性比较。
  3. 使用:字段 数据类型 […] unique […]

例子:一个学生的信息,如id主要作为区分学生,可以设置为主键,但是我们每个人的qq号码也是唯一的,这时候就可以通过唯一键解决了。

CREATE TABLE t12(id int  primary key auto_increment  ,name varchar(20),qq varchar(20) unique ) ;

在这里插入图片描述
在这里插入图片描述
解释:作为唯一键的字段可以为null,当插入相同的值时会被拒接插入。

8.外键

  1. 外键用于定义主表和从表之间的关系:外键约束主要定义在从表上,主表则必须是有主键约束或unique约束。当定义外键后,要求外键列数据必须在主表的主键列存在或为null。
  2. 使用:foreign key (字段名) references 主表(列)。

例子:一名学生是属于一个班级的,所以学生的表可以作为从表,班级的表可以作为主表。
主表:

CREATE TABLE myclass(id int  primary key auto_increment  , name varchar(20)) ;

从表:

create table stu (-> id int primary key,-> name varchar(30) not null -> class_id int,-> foreign key (class_id) references myclass(id)-> );

在这里插入图片描述

先插入2个班级
在这里插入图片描述
插入学生
在这里插入图片描述
删除一个有有学生的班级
在这里插入图片描述
总结:收到外键的约束,学生必须要插入到存在的班级里,班级删除时只能选择无学生的班级,这样两张表就形成了约束。

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

VirtualBox安装虚拟机Windows server 2019系统只显示cmd命令窗口

原因: 没注意选用了核心安装选项,此选项不安装图形界面 解决: 方式一:重装虚拟机,选用有图形界面的版本 方式二:在cmd窗口中安装图形界面 Dism /online /enable-feature /all /featurename:Server-Gui-Mgm…

基于卷积神经网络的皮肤病识别系统(pytorch框架,python源码,GUI界面,前端界面)

更多图像分类、图像识别、目标检测等项目可从主页查看 功能演示: 皮肤病识别系统 vgg16 resnet50 卷积神经网络 GUI界面 前端界面(pytorch框架 python源码)_哔哩哔哩_bilibili (一)简介 基于卷积神经网络的皮肤病识…

MixVpr重定位实战----onnx以及Tensorrt适配

0. 简介 对于深度学习而言,通过模型加速来嵌入进C是非常有意义的,因为本身训练出来的pt文件其实效率比较低下,在讲完BEVDET和FastBEV后,这里我们将展开实战,从pt到onnx再到tensorrt,以MixVpr作为例子&…

Java基于微信小程序的校园跑腿平台(V2.0)

博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇…

Spring Boot图书馆管理系统:疫情中的管理利器

摘要 随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上已逐步成熟。本文介绍了疫情下图书馆管理系统的开发全过程。通过分析疫情下图书馆管理系统管理的不足,创建了一个计算机管理疫情下图书馆管理系统的方案。文章介绍了疫情下图…

【CUDA】Branch Divergence and Unrolling Loop

目录 一、避免分支发散 1.1 并行规约问题 1.2 并行规约中的发散 二、UNrolling Loops 一、避免分支发散 控制流有时依赖于 thread 索引。同一个warp中,一个条件分支可能导致性能很差。通过重新组织数据获取模式可以减少或避免 warp divergence。具体问题查看下…

WIN系统解决小喇叭红色叉号的办法

WIN系统解决小喇叭红色叉号的办法 WIN系统提示无音频设备,无法播放声音,重装驱动无法解决 写在前面 前段时间搞了套6750GRE,用了两三个月,老是掉驱动,后面折腾了一下子,终于是不掉了。突然,某…

免费S3客户端工具大赏

首发地址(欢迎大家访问):S3免费客户端工具大赏 1. S3 GUI GitHub地址:https://github.com/aminalaee/s3gui 简介:S3 GUI 是一款基于 Flutter 构建的免费开源 S3 桌面客户端,支持桌面、移动和网络平台。 特…

uniapp 购物弹窗组件 (微信小程序)

效果图&#xff0c;暂时只适应单规格&#xff0c;居中弹出和下方弹出&#xff0c;如需求不满足&#xff0c;请自行修改代码 &#xff08;更新于24/11/15) 居中显示效果 下方弹出效果 html <template><view class"" v-if"show":class"mod…

力扣-Mysql-1811 - 寻找面试候选人(中等)

一、题目来源 1811. 寻找面试候选人 - 力扣&#xff08;LeetCode&#xff09; 二、数据表结构 表: Contests -------------------- | Column Name | Type | -------------------- | contest_id | int | | gold_medal | int | | silver_medal | int | | bronze_medal | …

【C语言】volatile 防止编译的时候被优化

volatile 易变的 volatile是 C 和 C 中的一个类型修饰符&#xff0c;用于指示编译器该变量可能在程序之外被更改&#xff0c;因此不应对其进行优化。这在涉及硬件寄存器、信号处理或多线程编程时非常有用。 如果你做过单片机开发&#xff0c;你肯定写过这样的代码&#xff1a;…

makefile速通

makefile速通 文章目录 makefile速通1.基础显式规则隐含规则%*通配符 赋值 伪目标CFLAGS 2.函数wildcardpatsubst 3.项目实例 1.基础 显式规则 目标文件&#xff1a;依赖文件 [TAB] 指令隐含规则 % 任意* 所有通配符 符号含义$^所有依赖文件$所有目标文件$<所有依赖文…

面向服务的软件工程——巨详细讲解商务流程建模符号 (BPMN),一篇章带你入门BPMN!!!(week1)

文章目录 一、前言二、重点概念三、BPMN元素讲解流对象1.活动任务(Task)子流程(sub-process)多实例活动连接对象序列流消息流关联泳道Artifacts数据对象组(Group)事件(Events)启动事件中间事件结束事件边界事件边界事件1边界事件2小疑问?网关参考文献:一、前言 在我们…

模拟实现~简易通讯录

一.前言 今天给小伙伴们分享的是运用结构体以及指针等相关C语言知识实现一个简易版的通讯录。咱们写的通讯录的功能主要包括添加及删除联系人&#xff0c;修改联系人信息&#xff0c;显现所有联系人&#xff0c;查找已添加联系人&#xff0c;以及对联系人进行排序&#xff0c;…

0成本添加访问级监控

互联网的安全感这个概念源于阿里。顾名思义&#xff0c;让互联网的用户对于web产品能够产生足够的信任和依赖。特别是涉及到用户资金交易的站点&#xff0c;一次严重的用户资料泄露就可以彻底毁掉你的品牌。 然而当前阶段除了bat大部分互联网行业的企业对于网络安全给的重视都…

分布式系统稳定性建设-性能优化篇

分布式系统稳定性建设-性能优化篇 系统稳定性建设是系统工程的核心内容之一。以下是一些重要的方面: 架构设计: 采用模块化、松耦合的架构设计,以提高系统的可扩展性和可维护性。合理划分系统功能模块,降低单个模块的复杂度。定义清晰的接口和数据交换标准,确保各模块之间协调…

Web端高效BIM 3D可视化引擎HOOPS Communicator技术解析!

HOOPS Communicator是一款简单而强大的工业级高性能3D Web可视化开发包&#xff0c;专注于Web端工程图形渲染。采用了先进的流式加载方式&#xff0c;并支持服务端和客户端渲染&#xff0c;是可以在云端进行部署和无缝集成的新技术平台。 灵活且易于部署&#xff0c;可在以工程…

C/C++实现tcp客户端和服务端的实现(从零开始写自己的高性能服务器)

目录 tcp客户端通信流程 tcp客户端设计 1、创建通信对象 2、链接服务器 3、发送数据 / 读取数据 4、关闭通信 tcp服务端设计 1、创建通信对象 2、绑定服务器地址信息 3、设置服务器为监听模式 4、接收客户的链接请求 编写tcp客户端和服务端&#xff0c;实现双向通信…

C++ 容器全面剖析:掌握 STL 的奥秘,从入门到高效编程

引言 C 标准模板库&#xff08;STL&#xff09;提供了一组功能强大的容器类&#xff0c;用于存储和操作数据集合。不同的容器具有独特的特性和应用场景&#xff0c;因此选择合适的容器对于程序的性能和代码的可读性至关重要。对于刚接触 C 的开发者来说&#xff0c;了解这些容…

快速上手并使用Muduo库

Muduo muduo库是基于主从reactor模型的高性能服务器&#xff08;高并发服务器&#xff09;框架 reactor模型&#xff1a;基于事件触发的模型&#xff08;基于epoll进行IP事件监控&#xff09; 主从reactor模型&#xff1a;将IO事件监控有进行进一步的层次划分 主reactor&#x…