MySQL 约束

查看约束

在这里插入图片描述

select * from information_schema.table_constraints
where   table_name='要查看的表名'

按约束的作用范围

列级约束: 将此约束声明在对应字段的后面

表级约束:在表中所有字段都声明完,在所有字段的后面声明的约束,可以声明组合约束

约束的作用

  1. not null 非空约束
  2. unique 唯一约束
  3. primary key 主键约束
  4. foreign key 外键约束
  5. check 检查约束
  6. default 默认值约束

在这里插入图片描述

添加约束

声明表定义约束

create table 表名 (
id int not null
);

声明表之后,追加、删除约束

alter table 表名
modify 列 类型 约束 — 追加约束 写上约束便可,若删除约束 不写约束便可

sql server 追加约束

alter table 表名
add constraint 约束名 约束类型 (字段)

alter table 表名
add constraint ch_tel check( 列名 like [0-9] [0-9][0-9][0-9] )

非空约束

声明表定义约束

create table 表名 (
id int not null
);
声明之后追加约束
alter table 表名
modify 列 类型 not null— 追加约束 写上约束便可,若删除约束 不写约束便可

删除非空约束

alter table 表名
modify 列 类型 — 除去 not null 便可

唯一约束 UNIQUE

在这里插入图片描述

  1. 同一个表可以有多个唯一约束
  2. 唯一约束可以是某一列的值唯一,也可以多个列组合的值唯一(复合约束)
  3. 唯一约束允许列值为空, 主键约束 是特殊的唯一约束,只是不允许为 null,即 主键约束(primary key)相当于 唯一约束+非空约束组合,主键约束 列 不允许重复,且不能出现 空值 null
  4. 在创建唯一约束的时候,若没有给唯一约束 命名,则默认和列名相同。复合唯一约束,没命名,也取 复合列中的第一个列 做为约束名
  5. Mysql 会给唯一约束的列上默认创建一个唯一索引, SQL server 中 主键约束,会默认创建一个 唯一索引

在create table 添加唯一约束

create table 表名(
sut_NO char(8) UNIQUE, – 列级约束
sut_ID char(18), – , 别忘记
constraint 约束名 UNIQUE(sut_ID ) 可以简写 UNIQUE KEY (sut_ID) —表级约束
);

在create table 添加复合唯一约束

create table 表名(
sut_NO char(8) , – 列级约束
sut_ID char(18), – , 别忘记
constraint 约束名 UNIQUE(sut_ID ,sut_NO) 可以简写 UNIQUE KEY (sut_ID,sut_NO) —表级约束
);

建表后 指定唯一约束

方式1 支持复合约束的
alter table 表名 add unique key(字段列表)

方式2 不支持复合约束
alter table 表名 modify 字段名 unique

删除唯一约束
在这里插入图片描述

alter table 表名
DROP INDEX 索引名

查看表的索引
show index from 表名 ;

主键约束 PRIMARY KEY

主键约束: 唯一约束+ 非空约束 非空且唯一
在这里插入图片描述

create table 主键约束

create table student (
id int autoincrement,
name   varchar(10),
stu_ID  char(18)  primary key   -- 列级约束----身份证号  create table student (
id int ,
name   varchar(10),
stu_ID  char(18) ,
--   MYSQL   主键名总是PRIMARY ,就算命名了主键约束名,也没用
constraint  约束名 primary key(stu_ID)   -- 列级约束----身份证号  

建表后 指定唯一约束

alter table 表名
add primary key (字段、字段);

删除主键约束

alter table 表名
drop primary key;

自增列 AUTO_INCREMENT

在这里插入图片描述
自增列的特点

  1. 一个表最多只能有一个自增长列,SQLServer 也是这样, 同一个表,后面列设置Identity,前面设置的就自动取消了。
  2. 当需要产生唯一标识符或顺序值时,可设置自增长
  3. 自增长列约束的列必须是键列(主键列,唯一键列),否则会出现上面的错误。
  4. 自增约束的列的数据类型必须是整数类型
  5. 如果自增列指定了0和null,会在当前最大值的基数上自增;如果自增列手动指定具体值,直接赋值为具体的值 .[ insert ]

create table 自增列

create table student (
id int  primary key auto_increment,
name   varchar(10))

建表后 指定自增列

alter table 表名
modify 列名 数据类型 auto_increment;

删除自增列

alter table 表名
modify 列名 数据类型 ;

sql server identity **
在这里插入图片描述
要想显示的为某表的标识列显示添加数据,在insert语句中
一定要在表后面显示**要添加的字段,即使是所有字段,也不能省略。

如:Table_1(ID,score,name),如果只写Table_1仍然不能为ID显示的添加数据。

注意2:插入完数据要将identity_insert设置为OFF。

若不关闭,则再次添加数据时,无法自增长,提示错误信息:

set identity_insert 表名 ON
insert into 表名(列,。。。列)
values(值,。。。。值)
set identity_insert 表名 OFF

自增列 mysql 5.7 与 mysql 8.0 系列 区别

MySQL 5.7 自增主键 Auto_increment 的值如果大于 表中的 最大值+1,在mysql重启之后,会重置Auto_increment值 modify 列名 数据类型 现有表中 最大值+1 (就删除数据,导致内存中表的auto_increment > 表中最大的自增列的值+1,重启mysql,内存中auto_increment 就会消失,会根据 获取 现有表中 自增列的 最大值+1,放在内存作为此表的 auto_increment 值 ), 这种现象在某些情况下,会导致业务主键冲突或者其他难以发现的问他

MySQL 8.0 系列 将自增主键的计数器持久化到 重做日志 中。每次计算器发生改变,都会将其写入重做日志中。如果数据库重启,InnoDB会根据重做日志中的信息来初始化计数器的内存值。

在这里插入图片描述

create table  表名(
id int auto_increment primary key,
name char(10)
) engine innodb  auto_increment=100  default charset 'utf8'

或者 首条记录指明 自增列的值,后续就 +1了
insert into 表名
values(300,‘zen’);
insert into 表名 (name)
values(‘zen’); //id jius 301

alter table 表名
modify 字段 类型 Auto_increment;
alter table 表名
modify 字段 类型 primary key Auto_increment;

外键约束 Foreign key

**sql server **
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

主表:有外键 对应的表,就是主表,或称 父表
从表:有外键的表,就算从表,或称 子表
城市表(主表), 学生表(从表), 学生表中的户籍地址外键,对应城市表的主键。
注意外键对应的在主表中,必须是主键或者唯一键

Mysql
外键的 特性:

  1. 从表的外键列,必须引用或参考主表的键(主键或唯一约束的列),因为被依赖或被参数的值必须是唯一的。
  2. 在创建外键约束时,如果不给外键约束命名**,默认名不是列名,而是自动产生一个外键名**,也可以指定外键约束名
  3. 创建(create)表时就指定外键约束的话,先创建主表,再创建从表 从表依赖主表
  4. 删表时,先删从表(或先删除外键约束),再删除主表( 从表依赖主表。)
  5. 当主表的记录被从表参照时,主表的记录将不允许删除。如果要删除数据,需要先删除从表中依赖该记录的数据,然后才可以删除主表的数据
  6. 在从表中指定外键约束,并且一个表可以建立多个外键约束
  7. 从表的外键列与主表被参照的列名子可以不相同,但是数据类型必须一样,逻辑意义要一致。如果类型不一样,创建子表时,就会出现错误。
  8. 当创建外键约束时,系统默认会在所在的列上建立对应的普通索引。但是索引名是列名,不是外键的约束名(根据外键查询效率很高,因为外键,系统会创建普通索引
  9. 删除外键约束后,必须手动删除对应的索引

create table 创建外键
在这里插入图片描述

主表
create table department(
dept_id char(10) primary key,
dept_name varchar(15));

从表
create table employee(
emp_no char(6) primary key ,
department_id chart(10),
【constraint FK_emp_dept】 foreign key (department_id) references department(dept_id));

alter table 创建外键

主表
create table department(
dept_id char(10) primary key,
dept_name varchar(15));

从表
create table employee(
emp_no char(6) primary key ,
department_id chart(10)
);

alter table employee
add 【constraint FK_emp_dept】 foreign key (department_id) references department(dept_id);

删除外键
在这里插入图片描述
在这里插入图片描述

1.首先要查看约束
select * from information_schema.table_constraints
where table_name = ‘表名’;

  1. 删除外键约束
    alter table 表名
    drop foreign key 外键约束名; – drop primary key 删除主键约束

  2. 查看表的索引
    show index from 表名;

  3. 删除索引
    alter table 表名
    drop index 索引名;

约束等级

  1. Cascade 方式: 在父表上 updae | delete 数据时,同步 Update | Delete 子表的匹配记录
  2. Set null 方式: 在父表上update/delete记录时,将子表上匹配记录的列设为null要注意子表的外键列不能为not null
  3. No action 方式:如果子表中有匹配的记录,则不允许对父表对应候选键进行update/delete操作
  4. Restrict 方式:同no action, 都是立即检查外键约束

主表
create table department(
dept_id char(10) primary key,
dept_name varchar(15));

从表
create table employee(
emp_no char(6) primary key ,
department_id chart(10),
【constraint FK_emp_dept】 foreign key (department_id) references department(dept_id) on update cascade on
);

外键创建的规定

在 mySQL 里,外键约束是有成本的,需要消耗系统资源。对于大并发的SQL操作,有可能会不适合。比如大型网址中的中央数据库,可能会因为外键约束的系统开销而变得非常慢。所以,MYSQL 允许你不使用系统自带的外键约束,在 应用层面完成检查数据一致性的逻辑。也就是说,即使你不用外键约束,也要想办法通过应用层面的附加逻辑,来实现外键约束的功能,保持数据的一致性、

【阿里开发规范】
【强制】不得使用外键与级联,一切外键概念必须在应用层解决
说明: 学生表中的Student_id 是主键,那么成绩表中的student_id 则为外键。如果更新学生表中的 student_id ,同时触发成绩表中的student_id 更新,即为级联更新。外键与级联更新适用于 单机低并发,不适合分布式、高并发集群;级联更新是强阻塞,存在数据库 【更新风暴】的风险;外键影响数据库的插入速度。

外键约束(foreign key)不能跨引擎使用
mySQL 支持多种存储引擎,每一个表都可以指定一个不同的存储引擎,需要注意的是:外键约束是用来保证数据的参考完整性的,如果表之间需要关联外键,却指定了不同的存储引擎,那么这些表之间是不能创建外键约束的。所以说,存储引擎的选择也不完全的随意的

check 约束

sql server
在这里插入图片描述
删除约束
alter table zen_4
drop constraint CK__zen_4__gender__6DB73E6A

作用 | 功能
检查某个字段的值是否符合xxx 要求,一般指的是值的 范围

**mysql 5.7 不支持 check mysql 8.0 支持 **

create table
create table 表名(
id int,
gender char(1) check (gender =’男‘ or gender =’女‘)

alter table
alter table 表名
modify id int check(id <100);

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

Default 约束

create table
create table 表名(
id int,
name char(10),
salary decimal(8,2) default 2080 );

alter table
alter table 表名
modify salary decimal(8,2) default 2200;

删除 Defualt 约束
alter table 表名
modify salary decimal(8,2);

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

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

相关文章

数据结构的树存储结构

数据结构的树存储结构 之前介绍的所有的数据结构都是线性存储结构。本章所介绍的树结构是一种非线性存储结构&#xff0c;存储的是具有“一对多”关系的数据元素的集合。 (A) (B) 图 1 树的示例 图 …

【Java】2021 RoboCom 机器人开发者大赛-高职组(复赛)题解

7-8 人工智能打招呼 号称具有人工智能的机器人&#xff0c;至少应该能分辨出新人和老朋友&#xff0c;所以打招呼的时候应该能有所区别。本题就请你为这个人工智能机器人实现这个功能&#xff1a;当它遇到陌生人的时候&#xff0c;会说&#xff1a;“Hello X, how are you?”其…

chatglm2-6b模型在9n-triton中部署并集成至langchain实践 | 京东云技术团队

一.前言 近期&#xff0c; ChatGLM-6B 的第二代版本ChatGLM2-6B已经正式发布&#xff0c;引入了如下新特性&#xff1a; ①. 基座模型升级&#xff0c;性能更强大&#xff0c;在中文C-Eval榜单中&#xff0c;以51.7分位列第6&#xff1b; ②. 支持8K-32k的上下文&#xff1b…

【Linux】进程地址空间

目录 一、回顾我们以前学习的地址空间二、进程地址空间三、进程地址空间的作用四、解决一个地址出现两个值的问题 一、回顾我们以前学习的地址空间 这个内存布局真是的我们实实在在的内存嘛&#xff1f; 答案是不是的 下面我们来验证 1 #include<stdio.h>2 #include<a…

从三个主要需求市场分析,VR全景创业的潜力发展

VR全景&#xff0c;5G时代朝阳产业&#xff0c;其实拍摄制作很简单&#xff0c;就是利用一套专业的相机设备去给商家拍摄&#xff0c;结合后期专业的3DVR全景展示拍摄制作平台&#xff0c;打造3D立体环绕的效果&#xff0c;将线下商家真实环境1&#xff1a;1还原到线上&#xf…

使用docker快速搭建wordpress服务,并指定域名访问

文章目录 引入使用docker快速跑起服务创建数据库安装wordpress服务配置域名 引入 wordpress是一个基于PHP语言编写的开源的内容管理系统&#xff08;CMS&#xff09;&#xff0c;它有丰富的插件和主题&#xff0c;可以非常简单的创建各种类型的网站&#xff0c;包括企业网站、…

AI Chat 设计模式:15. 桥接模式

本文是该系列的第十五篇&#xff0c;采用问答式的方式展开&#xff0c;问题由我提出&#xff0c;答案由 Chat AI 作出&#xff0c;灰色背景的文字则主要是我的一些思考和补充。 问题列表 Q.1 如果你是第一次接触桥接模式&#xff0c;那么你会有哪些疑问呢&#xff1f;A.1Q.2 什…

内网隧道—HTTP\DNS\ICMP

本文仅限于安全研究和学习&#xff0c;用户承担因使用此工具而导致的所有法律和相关责任&#xff01; 作者不承担任何法律和相关责任&#xff01; HTTP隧道 Neo-reGeorg Neo-reGeorg 是一个旨在积极重构 reGeorg 的项目&#xff0c;目的是&#xff1a; 提高可用性&#xff0…

山西电力市场日前价格预测【2023-08-17】

日前价格预测 预测明日&#xff08;2023-08-17&#xff09;山西电力市场全天平均日前电价为376.70元/MWh。其中&#xff0c;最高日前电价为431.75元/MWh&#xff0c;预计出现在19: 45。最低日前电价为339.25元/MWh&#xff0c;预计出现在13: 15。 价差方向预测 1&#xff1a; 实…

【Unity造轮子】制作一个简单的2d抓勾效果(类似蜘蛛侠的技能)

文章目录 前言开始1. 实现简单的抓勾效果2. 高阶钩爪效果 源码参考完结 前言 欢迎阅读本文&#xff0c;本文将向您介绍如何使用Unity游戏引擎来实现一个简单而有趣的2D抓勾效果&#xff0c;类似于蜘蛛侠的独特能力。抓勾效果是许多动作游戏和平台游戏中的常见元素&#xff0c;…

【AI绘画】3分钟学会ikun幻术图

目录 前言一、效果展示二、准备工作三、操作步骤3.1平台创建实例3.2 启动SD 四、安装QR Code Monster 模型五、成图 前言 大家热爱的ikun幻术在今天的分享中将呈现。在本文中&#xff0c;我们将揭示一个备受欢迎的图像幻术技术&#xff0c;让您感受到令人惊叹的视觉创造力。 …

springboot+vue游戏攻略推荐网站的设计与开发_s5832

热门网游推荐网站是一个利用JAVA技术建设的网上管理系统&#xff0c;在热门网游推荐管理中实现信息化。系统的设计就是为了迎合广大用户需求而创建的一个界面简洁、有定向内容、业务逻辑简单易操作的热门网游推荐网站。本文以热门网游推荐为例&#xff0c;提出了利用JAVA技术设…

Linux下grep通配容易混淆的地方

先上一张图: 我希望找到某个版本为8的一个libXXX.8XXX.so ,那么应该怎么写呢? 先看这种写法对不对: 是不是结果出乎你的意料之外? 那么我们来看一下规则: 这里的 "*" 表示匹配前一个字符的零个或多个 于是我们就不难理解了: lib*8*.so 表示 包…

医疗PACS源码,支持三维多平面重建、三维容积重建、三维表面重建、三维虚拟内窥镜

C/S架构的PACS系统源码&#xff0c;PACS主要进行病人信息和影像的获取、处理、存储、调阅、检索、管理&#xff0c;并通过网络向全院提供病人检查影像及诊断报告&#xff1b;各影像科室之间共享不同设备的病人检查影像及诊断报告;在诊断工作站上&#xff0c;调阅HIS中病人的其它…

拒绝摆烂!C语言练习打卡第二天

&#x1f525;博客主页&#xff1a;小王又困了 &#x1f4da;系列专栏&#xff1a;每日一练 &#x1f31f;人之为学&#xff0c;不日近则日退 ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 目录 一、选择题 &#x1f4dd;1.第一题 &#x1f4dd;2.第二题 &#x1f4dd;…

Springboot写单元测试

导入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><exclusions><exclusion><groupId>org.junit.vintage</groupId><artifactId>junit-vintag…

【Unity每日一记】方位辨别—向量的叉乘点乘结合

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a;uni…

grafana 的 ws websocket 连接不上的解决方式

使用了多层的代理方式&#xff0c;一层没有此问题 错误 WebSocket connection to ‘wss://ip地址/grafana01/api/live/ws’ failed: 日志报错 msg“Request Completed” methodGET path/api/live/ws status403 解决方式 # allowed_origins is a comma-separated list of o…

Flutter:简单搞一个内容高亮

内容高亮并不陌生&#xff0c;特别是在搜索内容页面&#xff0c;可以说四处可见&#xff0c;就拿掘金这个应用而言&#xff0c;针对某一个关键字&#xff0c;我们搜索之后&#xff0c;与关键字相同的内容&#xff0c;则会高亮展示&#xff0c;如下图所示&#xff1a; 如上的效果…