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);

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

无涯教程-Perl - s函数

描述 这不是功能。这是正则表达式替换运算符。根据PATTERN中指定的正则表达式,将数据替换为REPLACE。与m //一样,分隔符由s后的第一个字符定义。 语法 以下是此函数的简单语法- s/PATTERN/REPLACE/返回值 如果失败,此函数返回0,如果成功,则返回替换次数。 例 以下是显示…

【C++深入浅出】初识C++上篇(关键字,命名空间,输入输出,缺省参数,函数重载)

目录 一. 前言 二. 什么是C 三. C关键字初探 四. 命名空间 4.1 为什么要引入命名空间 4.2 命名空间的定义 4.3 命名空间使用 五. C的输入输出 六. 缺省参数 6.1 缺省参数的概念 6.2 缺省参数的分类 七. 函数重载 7.1 函数重载的概念 7.2 函数重载的条件 7.3 C支…

PDM/PLM系统建设

仅供学习使用&#xff0c;会随时更新 工程机械跨生命周期数据管理系统 来源&#xff1a;清华大学 浅论企业PDM/PLM系统建设成功经验 来源&#xff1a;e-works 作者&#xff1a;陈凡 https://articles.e-works.net.cn/pdm/article149572.htm 随着“中国制造2025”强基工程战略的…

读高性能MySQL(第4版)笔记02_MySQL架构(下)

1. 事务日志 1.1. 事务日志有助于提高事务的效率 1.1.1. 存储引擎只需要更改内存中的数据副本&#xff0c;而不用每次修改磁盘中的表&#xff0c;这会非常快 1.1.2. 更改的记录写入事务日志中&#xff0c;事务日志会被持久化保存在硬盘上 1.2. 事务日志采用的是追加写操作&…

AUTOSAR规范与ECU软件开发(实践篇)3.3 AUTOSAR系统解决方案介绍(下)

示例将遵循AUTOSAR方法论来进行开发&#xff0c; 所用的AUTOSAR解决方案如图3.6所示。 图3.6 AUTOSAR系统解决方案 首先&#xff0c; 使用Matlab/Simulink来实现部分软件组件级的开发&#xff0c; 主要包括LightRequestSWC和LightControlSWC&#xff0c; 并自动生成应用层软件组…

Qt扫盲- Graphics View框架理论综述

Graphics View框架理论综述 一、概述二、Graphics View 体系结构1. The Scene2. The View3. 图元 Item 三、图形视图坐标系统1. 图元Item的坐标2. Scene Scene坐标3. View 视图坐标4. 坐标映射 四、关键特性1. 缩放和旋转2. 打印3. 拖放4. 鼠标指针和 提示5. 动画6. OpenGL渲染…

Coremail AI实验室:利用高级语境和视觉智能进行钓鱼邮件检测

在这个日益数字化的时代&#xff0c;对电子邮件安全需求是至关重要的。新兴的高级威胁邮件&#xff1a;应用社工技术的钓鱼邮件&#xff0c;仿冒公检法的钓鱼邮件等等&#xff0c;都需要更高级的防御策略。 Coremail邮件安全人工智能实验室&#xff0c;整合了高级文本语境理解和…

【实际开发19】- 压测 / 调优准备

目录 1. Jmeter 2. Jmeter 环境部署 1. 配置 : 临时修改语言 ~ Options → Choose Language → Chinese 3. Jmeter 并发测试 0. 提示 : Postman 测试是“串行”的 , 无法测试并发请求 1. daiding 1. Jmeter 下载 : Apache JMeter - Download Apache JMeter 详参&#xf…

蓝帽杯2022

计算机取证 1 内存取证获取开机密码 现对一个windows计算机进行取证&#xff0c;请您对以下问题进行分析解答。 从内存镜像中获得taqi7的开机密码是多少&#xff1f;&#xff08;答案参考格式&#xff1a;abcABC123&#xff09; 首先我们直接对 1.dmp 使用 vol查看 py -2 v…

如何给a-table增加列宽拖动功能

对于table的列宽设置 相信用过的人都知道&#xff0c;想要设置得很完美&#xff0c;几乎是不现实的&#xff0c;因为总有数据或长或短&#xff0c;那我们应该如何优化它呢&#xff1f;那便是让用户自行拖动列宽&#xff0c;从而能看全table的数据&#xff0c;但是对于antd-vue …

公司电脑三维图纸加密、机械图挡加密软件

机械图纸加密软件的问世&#xff0c;让很多的网络公司都大受其带来的工作中的便利。在安装了机械图纸加密软件后&#xff0c;不仅可以很好的管理员工在工作时的上网娱乐&#xff0c;在对整个公司员工的工作效率上也有着明显的提高&#xff0c;那么对于机械图纸加密软件的具体特…

利用Lifecycle,管理一个计时器生命周期

Lifecycle是Android Jetpack中的一个组件&#xff0c;用于管理Android应用程序组件&#xff08;如Activity或Fragment&#xff09;的生命周期。它可以帮助开发者在不同的生命周期阶段执行特定的操作&#xff0c;以便更好地管理资源、处理数据和提供用户体验。 Lifecycle作用 …

Python基础知识:列表推导式详解

前言 嗨喽&#xff0c;大家好呀~这里是爱看美女的茜茜呐 我们经常需要这样处理一个列表&#xff1a; 把一个列表里面的每个元素&#xff0c; 经过相同的处理 &#xff0c;生成另一个列表。 &#x1f447; &#x1f447; &#x1f447; 更多精彩机密、教程&#xff0c;尽在下方…

Lie group 专题:Lie 群

Lie group 专题&#xff1a;Lie 群 流形 流形的定义 一个m维流形是满足以下条件的集合M&#xff1a;存在可数多个称为坐标卡&#xff08;图集&#xff09;的子集合族.以及映到的连通开子集上的一对一映射&#xff0c;,称为局部坐标映射&#xff0c;满足以下条件 坐标卡覆盖M…

最新AI系统ChatGPT网站程序源码+搭建教程/公众号/H5端/安装配置教程/完整知识库

1、前言 SparkAi系统是基于国外很火的ChatGPT进行开发的Ai智能问答系统。本期针对源码系统整体测试下来非常完美&#xff0c;可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。 那么如何搭建部署AI创作ChatGPT&#xff1f;小编这里写一个详细图文教程吧&#xff01;…

结构体和数组结合使用

1、定义结构体 struct Student {int num;char name[32]; }; 2、结构体数组定义 #include<iostream> using namespace std;struct Student {int num;char name[32]; }; int main() {//结构体变量复制方式2struct Student arr[2] { {1,"张三"}, {2,"李四…

《电路》基础知识入门学习笔记

文章目录&#xff1a; 一&#xff1a;电路模型和电路规律 1.电路概述 2.电路模型 3.基本电路物理量&#xff1a;电流、电压、电功率和能量 4.电流和电压的参考方向 5.电路元件—电阻 6. 电路元件—电压源和电流源 7.受控电源 8.基尔霍夫&#xff08;后面都要用这个方法…

主流的嵌入式微处理器

目前主流的嵌入式微处理器系列有&#xff1a; ARM系列 MIPS系列 PowerPC系列 Super H系列 一、MPC/PPC系列 PowerPC(简称PPC),其基本设计源自IBM的POWER.1991年&#xff0c;APPLE(苹果电脑)、IBM、Motorola&#xff08;摩托罗拉&#xff09;组成的AIM联盟发展出Power微处理器…

stack+queue

适配器 介绍 在C的标准模板库&#xff08;STL&#xff09;中&#xff0c;有几种适配器&#xff0c;它们是一些容器或函数对象的包装&#xff0c;提供了不同的接口和功能&#xff0c;用于适应特定的需求 分类 STL中的适配器可以分为两类&#xff1a;容器适配器和迭代器适配器 容…

6.3 社会工程学攻击

数据参考&#xff1a;CISP官方 目录 社会工程学攻击概念社会工程学攻击利用的人性 “弱点”典型社会工程学攻击方式社会工程学攻击防护 一、社会工程学攻击概念 什么是社会工程学攻击 也被称为 "社交工程学" 攻击利用人性弱点 (本能反应、贪婪、易于信任等) 进…