05 MySQL 之 表的约束、视图、事务

1. CONSTRAINT 约束

创建表时,可以给表的字段添加约束,可以保证数据的完整性、有效性。比如大家上网注册用户时常见的:用户名不能为空。对不起,用户名已存在。等提示信息。
约束包括:

  • 非空约束:not null
  • 检查约束:check
  • 唯一性约束:unique
  • 主键约束:primary key
  • 外键约束:foreign key

1.1 NOT NULL 非空约束

语法格式:

create table t_stu(no int,name varchar(255) not null,age int
);

name字段不能为空。插入数据时如果没有给name指定值,则报错。

1.2 CHECK 检查约束

create table t_stu(no int,name varchar(255),age int,check(age > 18)
);

1.3 UNIQUE 唯一性约束

1.3.1 列级唯一约束

#语法格式:
create table t_stu(no int,name varchar(255),email varchar(255) unique
);

1.3.2 表级唯一约束:

使用表级约束可以为多个字段添加联合唯一约束。

create table t_stu(no int,name varchar(255),email varchar(255),unique(name,email)
);

1.4 FOREIGN KEY 外键

  • .外键的键名中建议包含一个 fk 字段以一目了然这是个外键,如 t_school_schno_fk 。
  • 添加了外键约束的字段中的数据必须来自其他表的字段
  • 假设给a字段添加了外键约束,要求a字段中的数据必须来自b字段,b字段不一定是主键,但至少要有唯一性。例如学生表中引用的学校号 schno,在学校表中,这个字段的所有值都是唯一的
  • 外键约束可以给单个字段添加,叫做单一外键。也可以给多个字段联合添加,叫做复合外键。复合外键很少用。
  • a 表如果引用 b 表中的数据,就把 b 表叫做父表,把 a 表叫做子表。
    1. 创建表时,先创建父表,再创建子表。
    2. 插入数据时,先插入父表,在插入子表。
    3. 删除数据时,先删除子表,再删除父表。
    4. 删除表时,先删除子表,再删除父表。

创建约束时也可以给约束起名字,将来可以通过约束的名字来删除约束:

create table t_school( schno int primary key, sname varchar(255) 
); 
create table t_student( stuno int primary key, name varchar(255), age int, schno int, #创建一个外键constraint t_school_sno_fk foreign key(schno) references t_school(schno) 
);

1.4.1 级联操作

CASCADE关键字,可以令父表发生变化时,子表相应做出变化

  1. 级联删除

创建子表时,外键可以添加:on delete cascade,这样在删除父表数据时,子表会级联删除。谨慎使用。

create table t_student( no int primary key, name varchar(255), age int, sno int, constraint t_school_sno_fk foreign key(sno) references t_school(sno) on delete cascade 
);
  1. 级联更新
create table t_student( no int primary key, name varchar(255), age int, sno int, constraint t_school_sno_fk foreign key(sno) references t_school(sno) on update cascade 
);
  1. 级联置空
create table t_student( no int primary key, name varchar(255), age int, sno int, constraint t_school_sno_fk foreign key(sno) references t_school(sno) on delete set null 
);

1.5 PRIMARY KEY 主键

1.6

  • 创建约束时也可以给约束起名字,将来可以通过约束的名字来删除约束:
create table t_stu(no int,name varchar(255),email varchar(255),constraint t_stu_name_email_unique unique(name,email)
);
  • 所有的约束都存储在一个系统表当中:table_constraints。这个系统表在这个数据库当中:information_schema

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

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

相关文章

通过Idea部署Tomcat服务器

1.在idea中创建项目 有maven构建工具就创建maven,没有就正常创建一个普通的java程序 创建普通java项目 2.添加框架 3.配置 Tomcat 注意:创建web项目后我们需要配置tomcat才能运行,下面我们来进行配置。 4.添加部署 回到服务器 5.完善配置 6…

小程序如何优化搜索排名,获取曝光

在移动互联网时代,小程序以其便捷、轻量级的特点,逐渐成为用户获取服务的重要渠道。然而,小程序数量众多,如何让自己的小程序在搜索中脱颖而出,获取更多的曝光和流量,成为众多开发者关注的焦点。 一、理解…

DC-8渗透测试复现

DC-8渗透测试复现 目的: 获取最高权限以及flag 过程: 信息打点--sql注入- 命令执行反弹shell-exim4提权 环境: 攻击机:kali(192.168.85.137) 靶机:DC_3(192.168.85.140) 复现: 一.信息收集 nmap -…

Golang:三种引号详解-单引号、双引号、反引号

Golang限定字符或者字符串一共三种引号: 单引号(),单个字符,更类似于C语言中的char类型, 双引号("") ,字符串,单行的,多个字符(字母数字)。 反引…

在报表控件 FastReport .NET 中使用 PageCreate 事件

FastReport Business Graphics .NET,是一款基于fastreport报表开发控件的商业图形库,借助 FastReport 商业图形库,您可以可视化不同的分层数据,构建业务图表以进行进一步分析和决策。利用数据呈现领域专家针对 .NET 7、.NET Core、…

栈和队列——数据结构学习笔记

栈和队列 栈(Stack) 定义与特点 栈是一种特殊的线性表,只能从一端进行插入和删除——>后进后出 LIFO结构 表尾(an) 称为栈顶Top 表头(a1)称为栈底Base 插入元素到栈顶的操作称为入栈 删除栈顶最后一个元素的操作称为出栈 抽象类型定义 ADT Stack{ 数据对…

编译OpenWRT固件

前言 编译环境,我是使用Ubuntu16.04.07 LTS 64位版 1.安装Ubuntu16.04.07 LTS 64 Ubuntu16.04.07 LTS 64安装的时候会出现一个bug,如果开始安装界面选了中文之后就会出现 提示错误信息:无法安装busybox-initramfs,向目标系统中…

openlayers 入门教程(六):controls 篇

目录 一、常用的控件 二、使用控件方法 三、添加删除control 的基本方法 四、control示例 1 比例尺 - ScaleLine 2 鹰眼/缩小图 - OverviewMap 3 全屏 - FullScreen 4 版权信息 - Attribution 5 旋转地图 - Rotate 6 放大缩小 - Zoom 7 缩放滑块控件 - ZoomSlider …

【Day 1】HTML 与 CSS

1 前端 网站的工作流程: 首先我们需要通过浏览器访问发布到前端服务器中的前端程序,这时候前端程序会将前端代码返回给浏览器浏览器得到前端代码,此时浏览器会将前端代码进行解析,然后展示到浏览器的窗口中,这时候我…

pwn - 零基础ROP之Android ARM 32位篇(新修订)

一、环境搭建 安装ndk r10e,必须得这个版本,其他版本可能导致 -fno-stack-protector 不生效! r10e Darwin: https://dl.google.com/android/repository/android-ndk-r10e-darwin-x86_64.zipLinux: https://dl.google.com/android/repository/android-ndk-r10e-linux-x86_6…

51-41 Stable Video Diffusion,高质量视频生成新时代

23年11月,Stability AI公司公开了稳定视频扩散模型Stable Video Diffusion(SVD)的代码和权重,视频生成迎来了新时代。SVD是一种潜在扩散模型,支持文本生成视频、图像生成视频以及物体多视角3D合成。从工程角度来看,本文主要提出了…

Real3DPortrait照片对口型,数字人,音频/视频驱动数字人

先看效果 上传一张图片和一段音频,照片如下: 合成后效果如下: 照片对口型-音频驱动 支持音频驱动和视频驱动,视频可以使照片有参照视频中的口型和和动作。 项目地址 https://github.com/yerfor/Real3DPortrait 我的环境 win…

[网络安全]-059-安全大模型以及训练数据集

Contents Tools IntegratedAuditReconnaissanceOffensiveDetectingPreventingSocial EngineeringReverse EngineeringInvestigationFixAssessmentCases ExperimentalAcademicB

真有立即做出40+BI零售数据分析报表的方案?

有,奥威BI零售数据分析方案是一套标准化的BI方案,预设零售数据分析模型和BI报表,点击应用后,将自动从系统中取数,并根据方案的预设计算分析指标、分析数据,并生成让人快速理解数据情况的BI数据可视化报表。…

Spark/SparkSQL读取Hadoop LZO文件概述

一、前置配置 IDEA Maven安装配置 Scala(可选) Java Hadoop.dll(可能需要,具体看有无相关错误信息) hadoop-lzo-0.xx.xx.jar(如果你的版本过高,需要到官网下载高版本,mvnrepository仓…

服务器中毒怎么办?企业数据安全需重视

互联网企业: 广义的互联网企业是指以计算机网络技术为基础,利用网络平台提供服务并因此获得收入的企业。广义的互联网企业可以分为:基础层互联网企业、服务层互联网企业、终端层互联网企业。 狭义的互联网企业是指在互联网上注册域名,建立网…

react15升级17问题记录

,当前旧项目主要依赖版本介绍:这里只贴出重要依赖包的旧版本做展示,可以看到版本都相当落后了,升级的话会涉及一些API以及依赖的修改或者弃用 次文章只记录当前项目使用,其他项目不一定通用 {"react": "^15.6.1&q…

Lua语言 备查

开发工具 1.SciTE (入门级) IDEA lua (商业级) 基础 注释 --单行注释 a "hello" --a是一个标识符号--多行注释 --[[这是多行注释]]--连接符 -- .. str 123..456变量 变量类型可以随意改变 数字开头会报错 五种基本…

postman 调试 传base64字符串 原来选xml

上个图 工具类 package org.springblade.common.utils;import com.alibaba.fastjson.JSONObject; import org.springblade.modules.tc.mas.Submit;import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStrea…

【FreeRTOS】使用CubeMX快速移植FreeRTOS工程到蓝桥杯开发板(STM32G431RBT6)

使用CubeMX快速创建FreeRTOS工程到蓝桥杯开发板(STM32G431RBT6) CubeMX配置CubeMX基础工程的配置☆FreeRTOS相关配置FreeRTOS配置选项卡的解释 软件工程架构与程序设计小综合:任务的创建删除、挂起与恢复设计cubexMX配置创建任务软件程序设计…