当前位置: 首页 > news >正文

mysql_2.5——【约束】详解

1、查看约束

 SHOW CREATE TABLE table_name

2、主键约束(PRIMARY KEY)

主键约束最显著的特征是主键列中的值是不允许重复(唯一)的,通过主键约束可强制表 的实体完整性。当创建或更改表时可通过定义 primary key 约束来创建主键。一个表只 能有一个primary key约束,且primary key约束中的列不能接受NULL值。

alter table tab_name add constraint pk_name primary key (deptno);

在创建表时有以下几种方式:(三种) 

 -- 创建表时CREATE TABLE `table_name` (`id` int PRIMARY KEY,   -- 设置主键`name` varchar(20));CREATE TABLE `table_name` (`id` int NOT NULL,`name` varchar(20) ,PRIMARY KEY (`id`)      -- 设置主键);CREATE TABLE `table_name` (`id` int NOT NULL,`name` varchar(20) ,constraint pk primary key(id) -- 设置主键);

----设置主键的其它方式(用于修改字段的主键)

 -- 设置主键是deptnoALTER TABLE emp MODIFY empno INT PRIMARY KEY; -- 修改列的属性来添加主键约束ALTER TABLE 表名称 ADD PRIMARY KEY(id);ALTER TABLE dept ADD CONSTRAINT pk_name PRIMARY KEY(deptno);

 ----删除主键

 ALTER TABLE 表名称 DROP PRIMARY KEY; -- 【推荐】

3、自增长列(AUTO_INCRUEMENT)

并不是所有表在设计完成后都能找到适合作为主键的列,为此数据库提供了自增长列,自 增长列是数值类型( INT , FLOAT , DOUBLE 等)的,其值是由数据库自动维护的,是永远都不 会重复的,因此自增长是最适合作为主键列的。在创建表时,通过 auto_increment 关键 字来标识自增长列,在MySQL数据库中自增长列可以是主键列,也可以是唯一列(有唯一 约束的列)。

特点:

1. 标识列必须和一个Key搭配(Key指主键、唯一、外键....)

2. 一个表最多有一个标识列

3. 标识列的类型只能是数值型

4. 标识列可以通过 SET auto_increment_increment = 3; 或者                                                      SET @@auto_increment_increme nt = 3; 设置步长(全局),可以通过插入行时手动插入标识列值设置起始值。(思 考:什么情况下此设置会失效)

如果设置步长会从 1 + 步长 依次递增。

如果表中已有数据,会按照 1 + 步长进行计算,如果这个 值 已有则再加直到没有

自增长与主键 

CREATE TABLE emp(empNo INT PRIMARY KEY AUTO_INCREMENT,job VARCHAR(10),mgr INT,sal DOUBLE,comm DOUBLE,deptno INT
)CHARACTER SET utf8;-- 设置自增长列的初始值
CREATE TABLE temp(id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(2)
) AUTO_INCREMENT=10;-- 设置自增长列的初始值
ALTER TABLE emp AUTO_INCREMENT = 10;
alter table 表名称 modify column id int auto_increment;-- 删除自增长列
ALTER TABLE 表名称 MODIFY COLUMN id INT;

4、唯一约束

对于非主键列中的值也要求唯一性的时候,就需要唯一约束。

CREATE TABLE `table_name` (`id` int NOT NULL,`name` VARCHAR(20) UNIQUE        -- 唯一约束
);CREATE TABLE `table_name`(`id` int NOT NULL,`name` VARCHAR(20),constraint uq_name UNIQUE(name)    -- 唯一约束
);alter table 表名称 ADD unique(列名称);
alter table dept ADD constraint uq_name UNIQUE(deptname);# 删除唯一约束
alter table tb_name drop constraint constraint_name;
alter table 表名称 drop index 唯一约束名;    -- 删除索引
  • 唯一约束要求值不能重复
  • 一张表可以有多个唯一约束列
  • 约束默认的名称为其列名
  • 唯一约束创建后会自动创建一个唯一索引

5、 默认约束default

为列中的值设置默认值,default ....,如果已经定了值,默认值就无效了

-- 创建表时
CREATE TABLE `table_name` (`id` int DEFAULT NULL,		# 默认约束`name` varchar(20) unique,
);-- 添加默认约束第一种
alter table 表名称 modify column 列名 列类型 default 默认值;
-- 添加默认约束第二种
alter table 表名 change column old_col_name new_col_name new_type default value;-- 删除
alter table 表名称 modify column 列名 列类型; 	-- 将默认值改为 NULL
ALTER TABLE tb_name ALTER col_name DROP DEFAULT;	 -- 删除了默认值,新增时必须有值
  • 创建表时,不写默认值都默认 NULL (在无非空约束的情况下)
  • 默认约束能和主键约束可以同时存在
  • 默认约束不能和 AUTO_INCREMENT 同时使用

6. 非空约束

NOT NULL :非空,用于保证该字段的值不能为空。例如学生表的学生姓名及学号等等 

-- 创建表时
CREATE TABLE `table_name` (`id` int NOT NULL, # 非空约束`name` varchar(20),
);alter table 表名称 modify column 列名 列类型 not null;-- 删除
alter table 表名称 modify column 列名 列类型 [null];

7. 外键约束

A表中列的值来自于另外一张表B的主键或唯一键的列称为 外键FK,将被引用值得表称为
主表或父表,将引用值得表称为从表或子表。 例如: emp 表中有 deptno 列,值来自于 de
pt 表的 主键 deptno 。 dept 是主表, emp 是从表。
 

-- 创建表时
CREATE TABLE `dept`(dept_no INT PRIMARY KEY,dept_name VARCHAR(20),
)CREATE TABLE `emp` (`id` int NOT NULL,`name` varchar(20),`deptno` int,CONSTRAINT fk_dept_no FOREIGN KEY(deptno) REFERENCES dept(dept_no)
);alter table userinfo add constraint foreign key fk_dept_no (dept_no) REFERENCES dept(deptno);-- 删除
ALTER TABLE tb_name DROP CONSTRAINT constraint_name;
alter table 表名称 drop foreign key 设置外键时的名称; 

 在外键约束中,主表(父表)是指有外键的表,子表(从表)是指没有外键的表。 一般来说,外键是本表中的字段,本表是子表,通常外键引用父表的主键。但是当外键引用的是父表不为主键的字段时,此时外键所约束的列可以有一个或多个null同时出现。因为null不是值,不存在重复。

  • 创建外键时,会在引用表(从表)的字段上建立索引
    • 这个字段上有则不创建
  • 在 userinfo 表中添加或修改时, dept_no 列的值必须是 dept 表中 deptno 字段中的存在值或者 NULL
  • 删除主表数据时,会先检查被删除数据在从表中有没有对此数据的关联(引用),如果有不能直接删除。

如果想要解除此限制需要先禁用外键约束【不推荐】
我们可以在创建约束时,设置级联操作【具体如何操作?】

  • - `on delete CASCADE`/ `on update CASCADE` 级联删除 / 级联更新
  • - `ON DELETE SET NULL` / `ON UPDATE SET NULL`

8、检查约束 

check 检查约束,在数据添加或修改时保证数据的有效性。符合表达式的才会正确执行。

-- 创建检查约束的集中方法:
CREATE TABLE users (... ,age INT CHECK (age >= 18)
);CREATE TABLE users (... ,CONSTRAINT chk_xxx CHECK(expr)
);ALTER TABLE emp2 MODIFY sal DOUBLE CHECK(sal >= 2000);
ALTER TABLE tb_name ADD CONSTRAINT chk_xx check(id > 10);-- 删除约束
ALTER TABLE tb_name DROP CONSTRAINT tb_chk_num;
  • 在MySQL 8.0.16之前的版本中没有 CHECK 约束。

相关文章:

mysql_2.5——【约束】详解

1、查看约束 SHOW CREATE TABLE table_name 2、主键约束(PRIMARY KEY) 主键约束最显著的特征是主键列中的值是不允许重复(唯一)的,通过主键约束可强制表 的实体完整性。当创建或更改表时可通过定义 primary key 约束来创建主键。一个表只 能有一个primary key约束…...

回归预测 | MATLAB实现POA-CNN-BiLSTM鹈鹕算法优化卷积双向长短期记忆神经网络多输入单输出回归预测

回归预测 | MATLAB实现POA-CNN-BiLSTM鹈鹕算法优化卷积双向长短期记忆神经网络多输入单输出回归预测 目录 回归预测 | MATLAB实现POA-CNN-BiLSTM鹈鹕算法优化卷积双向长短期记忆神经网络多输入单输出回归预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 MATLA…...

opencv顺时针,逆时针旋转视频并保存视频

原视频 代码 import cv2# 打开视频文件 video cv2.VideoCapture(inference/video/lianzhang.mp4)# 获取原视频的宽度和高度 width int(video.get(cv2.CAP_PROP_FRAME_WIDTH)) height int(video.get(cv2.CAP_PROP_FRAME_HEIGHT))# 创建视频编写器并设置输出视频参数 fourcc …...

【LeetCode】最小路径和

最小路径和 题目描述算法流程编程代码 链接: 最小路径和 题目描述 算法流程 编程代码 class Solution { public:int minPathSum(vector<vector<int>>& grid) {int m grid.size();int n grid[0].size();vector<vector<int>> dp(m1,vector<in…...

zygote forkSystemServer及systemServer启动

###zygote forkSystemServer方法 通过上一篇文章我们了解到zygote 在ZygoteInit.java类的main方法中调用forkSystemServer方法 UnsupportedAppUsagepublic static void main(String[] argv) {ZygoteServer zygoteServer null;....省略部分代码//根据环境变量(LocalServerSocke…...

享元模式-提供统一实现对象的复用

下围棋时&#xff0c;分为黑白棋子。棋子都一样&#xff0c;这是出现的位置不同而已。如果将每个棋子都作为一个独立的对象存储在内存中&#xff0c;将导致内存空间消耗较大。我们可以将其中不变的部分抽取出来&#xff0c;只存储它的位置信息来实现节约内存。 图 围棋 1 享元模…...

Jenkins工具系列 —— 在Ubuntu 18.04上安装各种版本OpenJDK

文章目录 安装java方式一、使用apt-get工具安装方式二、手动安装java 卸载java各种版本OpenJDK安装包下载 安装java 方式一、使用apt-get工具安装 1、安装各种JAVA版本 若要安装新版本的java11&#xff0c;安装命令&#xff1a; sudo apt install default-jre若选择安装jav…...

vue基础-虚拟dom

vue基础-虚拟dom 1、真实dom目标2、虚拟dom目标 1、真实dom目标 在真实的document对象上&#xff0c;渲染到浏览器上显示的标签。 2、虚拟dom目标 本质是保存节点信息、属性和内容的一个JS对象 更新会监听变化的部分 给真实的DOM打补丁...

C#时间轴曲线图形编辑器开发2-核心功能实现

目录 三、关键帧编辑 1、新建Winform工程 &#xff08;1&#xff09;界面布局 &#xff08;2&#xff09;全局变量 2、关键帧添加和删除 &#xff08;1&#xff09;鼠标在曲线上识别 &#xff08;2&#xff09;键盘按键按下捕捉 &#xff08;3&#xff09;关键帧添加、删…...

【Git】初始化仓库配置与本地仓库提交流程

目录 一、仓库配置邮箱与用户名 二、本地仓库提交流程 一、仓库配置邮箱与用户名 【Git】Linux服务器Centos环境下安装Git与创建本地仓库_centos git仓库搭建_1373i的博客-CSDN博客https://blog.csdn.net/qq_61903414/article/details/131260033?spm1001.2014.3001.5501 在…...

学习day53

今天主要是做一个案例 TodoList 组件化编码流程&#xff1a; 1. 拆分静态组件&#xff1a;组件要按照功能点拆分&#xff0c;命名不要与html元素冲突 2.实现动态组件&#xff1a;考虑好数据的存放位置&#xff0c;数据是一个组件在用&#xff0c;还是一些组件在用&#xff1a…...

【最短路算法】SPFA

引入 在计算机科学的世界里&#xff0c;算法就像是星空中的繁星&#xff0c;各自闪烁着智慧的光芒。它们沉默而坚定&#xff0c;像是一群不语的哲人&#xff0c;默默地解答着世界的问题。 算法的步骤&#xff0c;如同优美的诗行&#xff0c;让复杂的问题在流转的字符中得以释…...

牛客网Verilog刷题——VL48

牛客网Verilog刷题——VL48 题目答案 题目 在data_en为高期间&#xff0c;data_in将保持不变&#xff0c;data_en为高至少保持3个B时钟周期。表明&#xff0c;当data_en为高时&#xff0c;可将数据进行同步。本题中data_in端数据变化频率很低&#xff0c;相邻两个数据间的变化&…...

Unity UGUI的Shadow(阴影)组件的介绍及使用

Unity UGUI的Shadow(阴影)组件的介绍及使用 1. 什么是Shadow(阴影)组件&#xff1f; Shadow(阴影)组件是Unity UGUI中的一个特效组件&#xff0c;用于在UI元素上添加阴影效果。通过调整阴影的颜色、偏移、模糊等属性&#xff0c;可以使UI元素看起来更加立体和有层次感。 2. …...

Kubernetes系列

文章目录 1 详解docker,踏入容器大门1.1 引言1.2 初始docker1.3 docker安装1.4 docker 卸载1.5 docker 核心概念和底层原理1.5.1 核心概念1.5.2 docker底层原理 1.6 细说docker镜像1.6.1 镜像的常用命令 1.7 docker 容器1.8 docker 容器数据卷1.8.1 直接命令添加1.8.2 Dockerfi…...

同步锁: synchronized

synchronized 1. synchronized的特性2. synchronized的使用3. synchronized的锁机制 1. synchronized的特性 原子性: 所谓原子性就是指一个操作或者多个操作&#xff0c;要么全部执行并且执行的过程不会被任何因素打断&#xff0c;要么就都不执行。可见性: 可见性是指多个线程…...

【微服务】springboot 多模块打包使用详解

目录 一、前言 1.1 为什么需要掌握多模块打包 二、工程模块概述 2.1 前后端不分离...

嵌入式工程师面试经常遇到的30个经典问题

很多同学说很害怕面试&#xff0c;看见面试官会露怯&#xff0c;怕自己的知识体系不完整&#xff0c;怕面试官考的问题回答不上了&#xff0c;所以今天为大家准备了嵌入式工程师面试经常遇到的30个经典问题&#xff0c;希望可以帮助大家提前准备&#xff0c;不再惧怕面试。 1&a…...

ER系列路由器多网段划分设置指南

ER系列路由器多网段划分设置指南 - TP-LINK 服务支持 TP-LINK ER系列路由器支持划分多网段&#xff0c;可以针对不同的LAN接口划分网段&#xff0c;即每一个或多个LAN接口对应一个网段&#xff1b;也可以通过一个LAN接口与支持划分802.1Q VLAN的交换机进行对接&#xff0c;实现…...

3 PostGIS基础查询

PostGIS 基础查询 数据库维护 ps aux | grep postgrespsql 使用命令登录数据库psql -U postgres -d testdb -h localhost -p 5432postgres用户名&#xff0c;testdb数据库名称&#xff0c;localhost ip地址&#xff0c;可以省略&#xff0c;5432端口&#xff0c;可以省略。 …...

Cursor实现用excel数据填充word模版的方法

cursor主页&#xff1a;https://www.cursor.com/ 任务目标&#xff1a;把excel格式的数据里的单元格&#xff0c;按照某一个固定模版填充到word中 文章目录 注意事项逐步生成程序1. 确定格式2. 调试程序 注意事项 直接给一个excel文件和最终呈现的word文件的示例&#xff0c;…...

设计模式和设计原则回顾

设计模式和设计原则回顾 23种设计模式是设计原则的完美体现,设计原则设计原则是设计模式的理论基石, 设计模式 在经典的设计模式分类中(如《设计模式:可复用面向对象软件的基础》一书中),总共有23种设计模式,分为三大类: 一、创建型模式(5种) 1. 单例模式(Sing…...

2021-03-15 iview一些问题

1.iview 在使用tree组件时&#xff0c;发现没有set类的方法&#xff0c;只有get&#xff0c;那么要改变tree值&#xff0c;只能遍历treeData&#xff0c;递归修改treeData的checked&#xff0c;发现无法更改&#xff0c;原因在于check模式下&#xff0c;子元素的勾选状态跟父节…...

Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)

引言&#xff1a;为什么 Eureka 依然是存量系统的核心&#xff1f; 尽管 Nacos 等新注册中心崛起&#xff0c;但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制&#xff0c;是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...

OpenLayers 分屏对比(地图联动)

注&#xff1a;当前使用的是 ol 5.3.0 版本&#xff0c;天地图使用的key请到天地图官网申请&#xff0c;并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能&#xff0c;和卷帘图层不一样的是&#xff0c;分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...

C++八股 —— 单例模式

文章目录 1. 基本概念2. 设计要点3. 实现方式4. 详解懒汉模式 1. 基本概念 线程安全&#xff08;Thread Safety&#xff09; 线程安全是指在多线程环境下&#xff0c;某个函数、类或代码片段能够被多个线程同时调用时&#xff0c;仍能保证数据的一致性和逻辑的正确性&#xf…...

CSS设置元素的宽度根据其内容自动调整

width: fit-content 是 CSS 中的一个属性值&#xff0c;用于设置元素的宽度根据其内容自动调整&#xff0c;确保宽度刚好容纳内容而不会超出。 效果对比 默认情况&#xff08;width: auto&#xff09;&#xff1a; 块级元素&#xff08;如 <div>&#xff09;会占满父容器…...

Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析

Java求职者面试指南&#xff1a;Spring、Spring Boot、MyBatis框架与计算机基础问题解析 一、第一轮提问&#xff08;基础概念问题&#xff09; 1. 请解释Spring框架的核心容器是什么&#xff1f;它在Spring中起到什么作用&#xff1f; Spring框架的核心容器是IoC容器&#…...

A2A JS SDK 完整教程:快速入门指南

目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库&#xff…...

SQL慢可能是触发了ring buffer

简介 最近在进行 postgresql 性能排查的时候,发现 PG 在某一个时间并行执行的 SQL 变得特别慢。最后通过监控监观察到并行发起得时间 buffers_alloc 就急速上升,且低水位伴随在整个慢 SQL,一直是 buferIO 的等待事件,此时也没有其他会话的争抢。SQL 虽然不是高效 SQL ,但…...