表的约束类型

news2025/1/18 12:01:11

空属性约束

mysql有空属性和非空属性:null和not null

数据库默认字段基本都是字段为空,但是实际开发时,尽可能保证字段不为空,因为数据为空没办法参与运算

所以我们在设计数据库表的时候,一定要在表中进行限制,满足上面条件的数据就不能插入到表中。这就是“约束”

-- 创建一个名为students的表
create table students (
    student_id int not null,//设置not null非空字段
);

此时如果插入数据时没有给student_id 插入,就会报错。

列描述

comment,没有实际含义,专门用来描述字段,会根据表创建语句保存

create table students (
 -> name varchar(20) not null comment '姓名',
 -> age tinyint unsigned default 0 comment '年龄',
 -> sex char(2) default '男' comment '性别'
 -> );

通过desc查看不到注释信息,通过show可以看到:

show create table students \G

使用 \G 后,结果将以垂直方式显示,每列的名称和值将各占一行:

在这里插入图片描述

zerofill

它用于在显示数值类型的列时,将数值前面的空位用零填充,以达到指定的位数。

这时候筛选出来的就是填充后的数字,若想看到真实存储的可以用:

select age , hex(age) from students;

默认值(Default)

某一种数据会经常性的出现某个具体的值,可以在一开始就指定好,在需要真实数据的时候,用户可以选择性的使用默认值

-- 创建一个名为students的表
create table students (
    student_id int default 0,//默认值
    sex char(2) default '男'
);

给一个已创建的表修改默认值:

alter table students alter column student_id set default '2';

主键约束

可以想象一个学生信息表,其中每个学生都有一个唯一的学生ID。这个学生ID就可以作为主键。主键约束防止两个学生具有相同的学生ID,确保每个学生都有一个唯一的身份。

总而言之,主键约束就是一种规则,要求表中的某个列(或多个列)具有唯一且不为空的值,以标识和区分表中的每个记录。

不能重复,不能为空,一张表中最多只能有一个主键;主键所在的列通常是整数类型

创建表的时候添加主键约束:

-- 创建一个名为students的表
create table students (
    student_id int primary key,//主键约束
    name varchar(50),
    age int
);

创建表最后再添加:

create table students (
    student_id int ,//主键约束
    name varchar(50),
    age int
    primary key(student_id)
);

给创建好的表添加主键:

alter table students add primary key(student_id );

删除主键:

alter table students drop primary key ;

复合主键

mysql> create table students (
-> id int unsigned,
-> course char(10) comment '课程代码',
-> primary key(id, course) // id和course为复合主键
-> );

创建表后插入复合主键:

alter table students add primary key(id,class);

自增长

auto_increment:当对应的字段,不给值,会自动的被系统触发,系统会从当前字段中已经有的最大值+1操作,得到一个新的不同的值。通常和主键搭配使用,作为逻辑主键。

比如新创建的auto_num:

在这里插入图片描述

可以看见auto_num并没有插入数据,但他会随着id,class的列增长而自增长。

唯一键

如果主键是每个人的身份证,那唯一键就可以认为是准考证号

唯一键更多的是针对某一种业务,比如上述例子就是在“考试”这个业务。

mysql> create table students (
-> id char(10) unique comment '学号,不能重复,但可以为空',
-> name varchar(10)
-> );

唯一键不能重复,但是可以为null值

外键

外键是指引用另外一个表中的一列或多列数据,被引用的列应该具有主键约束或者唯一性约束(简单来说外键是另一个表的主键或者唯一约束)。外键可以有重复的, 可以是空值,用来建立和加强两个表数据之间的连接

外键是针对从表来说的:

创建stu的外键,这个外键是myclass的主键(直接添加):

create table myclass (
	class_id int primary key,
	name varchar(30) not null comment'班级名'
);
create table stu (
	stu_id int primary key,
	name varchar(30) not null comment '学生名',
	class_id int,
	foreign key (class_id) references myclass(id)
);

也可以创建以后再进行添加:

alter table test add foreign key (class) references students(id);

在这里插入图片描述

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

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

相关文章

嵌入式:驱动开发 Day2

作业&#xff1a;字符设备驱动&#xff0c;完成三盏LED灯的控制 驱动代码&#xff1a; mychrdev.c #include <linux/init.h> #include <linux/module.h> #include <linux/fs.h> #include <linux/uaccess.h> #include <linux/io.h> #include &q…

oracle表空间释放

oracle表空间释放 1&#xff09;查询表空间信息2&#xff09;查询指定表空间下各个表的表空间使用情况3-1&#xff09;可以直接释放3-2) 可以move3-3&#xff09;重新排列 1&#xff09;查询表空间信息 selecta.tablespace_name as "表空间名",total as "表空间…

初识Java 7-1 多态

目录 向上转型 难点 方法调用绑定 产生正确的行为 可扩展性 陷阱&#xff1a;“重写”private方法 陷阱&#xff1a;字段与静态方法 构造器和多态 构造器的调用顺序 继承和清理 构造器内部的多态方法行为 协变返回类型 使用继承的设计 替换和扩展 向下转型和反射…

Java开发之Mysql【面试篇 完结版】

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、知识体系二、Mysql-优化1. 优化-如何定位慢查询① 问题引入② 解决方案③ 问题总结④ 实战面试 2. 优化-sql执行很慢&#xff0c;如何解决① 问题引入② 解…

AI项目五:结印动作识别

若该文为原创文章&#xff0c;转载请注明原文出处。 感谢恩培大佬对项目进行了完整的实现&#xff0c;并将代码进行开源&#xff0c;供大家交流学习。 恩培大佬开源地址&#xff0c;有兴趣的可以去复现一下。GitHub - enpeizhao/CVprojects: computer vision projects | 计算机…

计算机网路学习-time_wait过多

四次挥手 调试命令 netstat -an|awk ‘/tcp/ {print $6}’|sort|uniq -c netstat -an 列出系统中所有处于活动状态的网络连接信息&#xff0c;包括 IP 地址、端口号、协议等。 其中&#xff0c;第六列是tcp的状态。 Proto Recv-Q Send-Q Local Address Foreign Addr…

Aidlux工业视觉缺陷检测

Aidlux工业视觉缺陷检测 1. AidLux简介 AidLux是成都阿加犀智能科技有限公司自主研发的融合架构平台&#xff0c;提供Android&#xff0f;鸿蒙&#xff0b;Linux融合系统&#xff0c; 双系统既能独立使用又能相互通信。 阿加犀致力于人工智能核心技术持续创新&#xff0c; 独…

CSS元素浮动

概述 浮动简介 在最初&#xff0c;浮动是用来实现文字环绕图片效果的&#xff0c;现在浮动是主流的页面布局方式之一。 元素浮动后的特点 脱离文档流。不管浮动前是什么元素&#xff0c;浮动后&#xff0c;默认宽与高都是被内容撑开的&#xff08;尽可能小&#xff09;&am…

AKF拆分原则

在分布式软件环境下&#xff0c;为了保障分布式架构的可靠性、可扩展、高性能&#xff0c;通常会通过集群、扩容、数据分治等思想来实现&#xff0c;比如很多中间件的使用Redis、ZK、Kafka等&#xff0c;都可以通过这种设计思想来提高系统架构吞吐量。AKF是一个系统化的拓展思想…

Vue框架+Element组件库学习笔记

一、Vue框架 vue&#xff1a;是一款前端框架&#xff0c;免除原生JavaScript中的DOM操作&#xff08;如document.getElementById("文本输入框名").value&#xff09;&#xff0c;简化书写。基于MVVM&#xff08;Model-View-ViewModel&#xff09;思想&#xff0c;实…

YApi 新版如何查看 http 请求数据

YApi 新版如何查看 http 请求数据 因chrome 安全策略限制&#xff0c;在 cross-request 升级到 3.0 后&#xff0c; 不再支持文件上传功能&#xff0c;并且需要通过以下方法查看 network:1.首先在chrome 输入 > chrome://extensions打开扩展页2.开启开发者模式3.点击 cross…

震惊:QGroupBox在linux下居然不显示边框

1、linux系统下GroupBox默认无边框&#xff0c;如需添加&#xff0c;需要通过style来修改 下面介绍几个例子&#xff1a; QGroupBox {background: transparent;border: 1px solid rgb(130, 130, 130);border-radius: 6px;}QGroupBox::title {subcontrol-origin: margin;subcont…

RegShot – 注册表比较工具

RegShot 是一种注册表比较工具&#xff0c;它通过两次抓取注册表而快速地比较出答案。它还可以将您的注册表以纯文本方式记录下来&#xff0c;便于浏览&#xff1b;还可以监察 Win.ini&#xff0c;System.ini 中的键值&#xff1b;还可以监察您Windows目录和 System 目录中文件…

比较聚合模型实战文本匹配

引言 本文我们采用比较聚合模型来实现文本匹配任务。 数据准备 数据准备包括 构建词表(Vocabulary)构建数据集(Dataset) 本次用的是LCQMC通用领域问题匹配数据集&#xff0c;它已经分好了训练、验证和测试集。 我们通过pandas来加载一下。 import pandas as pdtrain_df …

diskqueue第五篇 - 追尾检测,错误处理,如何正常关闭

diskqueue是nsq消息持久化的核心&#xff0c;内容较多&#xff0c;故分为多篇 1. diskqueue第一篇 - 是什么&#xff0c;为什么需要它&#xff0c;整体架构图&#xff0c;对外接口 2. diskqueue第二篇 - 元数据文件&#xff0c;数据文件&#xff0c;启动入口&#xff0c;元数…

熟悉Redis6

NoSQL数据库简介 技术发展 技术的分类 1、解决功能性的问题&#xff1a;Java、Jsp、RDBMS、Tomcat、HTML、Linux、JDBC、SVN 2、解决扩展性的问题&#xff1a;Struts、Spring、SpringMVC、Hibernate、Mybatis 3、解决性能的问题&#xff1a;NoSQL、Java线程、Hadoop、Nginx…

嵌入式-Linux基本操作 pwd cd ls touch clear mkdir rm cp mv

目录 一.Linux文件系统 二.Linux目录结构 三.Linux基本命令 3.1shell脚本 3.2pwd命令 3.3cd命令 3.4ls命令 3.5touch命令 3.6clear命令 3.7mkdir命令 3.8rm命令 3.9cp命令 3.10mv命令 一.Linux文件系统 Linux文件系统是Linux操作系统中用于组织和管理文件和目录的…

【算法训练-链表 六】【查找】:链表中倒数第k个节点

废话不多说&#xff0c;喊一句号子鼓励自己&#xff1a;程序员永不失业&#xff0c;程序员走向架构&#xff01;本篇Blog的主题是【查找链表】&#xff0c;使用【链表】这个基本的数据结构来实现&#xff0c;这个高频题的站点是&#xff1a;CodeTop&#xff0c;筛选条件为&…

C盘清理教程

C盘清理教程 首先使用space Sniffer 扫一下c盘&#xff0c;然后看一下到底是哪个文件这么大 第二步&#xff0c;创建软链接。 首先将我们需要移动的文件的当前路径拷贝下来&#xff1a;C:\Users\Tom\Desktop\test-link\abc\ghi.txt 然后假设剪切到D盘下&#xff1a;D:\ghi.…

MOOC软件系统外包开发

MOOC&#xff08;大规模开放在线课程&#xff09;系统是用于创建、管理和交付在线教育课程的软件平台。这些系统通常具有多种功能&#xff0c;旨在支持大规模的在线学习。以下是MOOC系统主要实现的功能以及一些常见的开源系统&#xff0c;希望对大家有所帮助。北京木奇移动技术…