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.rhkb.cn/news/93600.html

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

相关文章

对比学习论文综述总结

第一阶段:百花齐放(18-19中) 有InstDisc(Instance Discrimination)、CPC、CMC代表工作。在这个阶段方法模型都还没有统一,目标函数也没有统一,代理任务也没有统一,所以说是一个百花齐放的时代 1 判别式代理任务---个体判别任务 1.1 Inst Dict---一个编码器+一个memory…

【深度学习 | 梯度那些事】 梯度爆炸或消失导致的模型收敛困难?挑战与解决方案一览, 确定不来看看?

&#x1f935;‍♂️ 个人主页: AI_magician &#x1f4e1;主页地址&#xff1a; 作者简介&#xff1a;CSDN内容合伙人&#xff0c;全栈领域优质创作者。 &#x1f468;‍&#x1f4bb;景愿&#xff1a;旨在于能和更多的热爱计算机的伙伴一起成长&#xff01;&#xff01;&…

考虑分布式电源的配电网无功优化问题研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

Linux系统安装Google Chrome

1.进入谷歌浏览器官网 Google Chrome - Download the Fast, Secure Browser from GoogleGet more done with the new Google Chrome. A more simple, secure, and faster web browser than ever, with Google’s smarts built-in. Download now.http://www.google.cn/intl/en_…

easyx图形库基础:2.基本运动+键盘交互

基本运动键盘交互 一.基本运动1.基本运动&#xff1a;1.如何实现动画&#xff1a;2.实现一个小球从左到右从右到左&#xff1a;&#xff08;往返运动&#xff09;3.实现一个五角星的移动&#xff1a;4.实现一个五角星自转和圆周运动的集合&#xff1a;&#xff08;圆周运动&…

Google浏览器点击链接打开新标签页

由于新安装的谷歌浏览器点击链接时默认在当前窗口打开非常不方便&#xff0c;这里提供一下解决思路 1、打开浏览器输入任意内容&#xff0c;点击右上角的设置 2、在弹出的选项栏中点击See all Search settings 3、点击Other settings&#xff0c;将指定选项打开即可

Java进阶-Oracle(二十一)(2)

&#x1f33b;&#x1f33b; 目录 一、Oracle 数据库的操作(DDL DML DQL DCL TPL)1.1 标识符、关键字、函数等1.1.1 数值类型&#xff1a;1.1.2 字符串类型&#xff1a;1.1.3 日期类型1.1.4 大的数据类型--适合保存更多的数据 1.2 运算符1.3 函数---预定义函数、自定义函数&…

侯捷 C++ part2 兼谈对象模型笔记——6 多态 虚机制

6 多态 虚机制 6.1 虚机制 当类中有虚函数时&#xff08;无论多少个&#xff09;&#xff0c;其就会多一个指针—— vptr 虚指针&#xff0c;其会指向一个 vtbl 虚函数表&#xff0c;而 vtbl 中有指针一一对应指向所有的虚函数 有三个类依次继承&#xff0c;其中A有两个虚函…

八股文之框架篇(Spring Boot、SSM)

文章目录 Spring中的单例bean是线程安全的吗什么是AOP&#xff0c;项目中有没有使用到AOPSpring中的事务是如何实现的Spring中事务失效的场景有哪些Bean的生命周期Spring中的循环依赖&#xff08;循环引用&#xff09;SpringMVC的执行流程SpringBoot自动配置原理Spring、Spring…

【Apollo】Apollo 8.0系统下载指南

作者简介&#xff1a; 辭七七&#xff0c;目前大一&#xff0c;正在学习C/C&#xff0c;Java&#xff0c;Python等 作者主页&#xff1a; 七七的个人主页 文章收录专栏&#xff1a; 七七的闲谈 欢迎大家点赞 &#x1f44d; 收藏 ⭐ 加关注哦&#xff01;&#x1f496;&#x1f…

全面揭秘:抖音集团 QUIC 千万 QPS 应用实践

近日&#xff0c;ArchSummit全球架构师峰会深圳站成功举办。随着移动互联网的蓬勃发展&#xff0c;人们对网络速度和实时性的需求日益增加。在面对越来越多的图片、视频和音频等大资源时&#xff0c;页面加载缓慢、视频卡顿等问题频发&#xff0c;传统的传输控制协议&#xff0…

Nginx代理功能与负载均衡详解

序言 Nginx的代理功能与负载均衡功能是最常被用到的&#xff0c;关于nginx的基本语法常识与配置已在上篇文章中有说明&#xff0c;这篇就开门见山&#xff0c;先描述一些关于代理功能的配置&#xff0c;再说明负载均衡详细。 Nginx代理服务的配置说明 1、上一篇中我们在http…

如何使用Python获取SAP Temporary key 临时密钥

什么是Sap 临时密钥&#xff1f; SAP 临时密钥是用于激活 SAP 软件的一种许可证&#xff0c;只能在有限的时间内使用。这些密钥可用于评估目的或在系统迁移期间使用。它们是临时解决方案&#xff0c;通常在一定时间后过期。 如何获取Sap Temporary keys? 临时密钥: 如果创建…

2011-2021年数字普惠金融指数Bartik工具变量法(含原始数据和Bartik工具变量法代码)

2011-2021年数字普惠金融指数Bartik工具变量法&#xff08;含原始数据和Bartik工具变量法代码&#xff09; 1、时间&#xff1a;2011-2020&#xff08;省级、城市&#xff09;&#xff0c;2014-2020&#xff08;区县&#xff09; 2、原始数据来源&#xff1a;北大金融研究中心…

【数据结构与算法——TypeScript】树结构Tree

【数据结构与算法——TypeScript】 树结构(Tree) 认识树结构以及特性 什么是树? &#x1f332; 真实的树&#xff1a;相信每个人对现实生活中的树都会非常熟悉 &#x1f332; 我们来看一下树有什么特点&#xff1f; ▫️ 树通常有一个根。连接着根的是树干。 ▫️ 树干到…

mysql 8.0安装

操作系统&#xff1a;22.04.1-Ubuntu apt 安装命令 sudo apt install mysql-client-core-8.0 sudo apt install mysql-server-8.0终端输入 mysql 可以直接免密登录 如果此时提示需要密码&#xff0c;则可以进入配置文件&#xff0c;设置免密登录 sudo vim /etc/mysql/mysq…

探究主成分分析方法数学原理

目录 1、简介 2、实现原理 3、实现步骤 4、公式分析 5、实例分析 6、⭐协方差矩阵补充说明 7、LaTex文本 ⭐创作不易&#xff0c;您的一键三连&#xff0c;就是支持我写作的最大动力&#xff01;&#x1f979; 关于代码如何实现&#xff0c;请看这篇文章&#xff1a;[机器…

Android 远程真机调研

背景 现有的安卓测试机器较少&#xff0c;很难满足 SDK 的兼容性测试及线上问题&#xff08;特殊机型&#xff09;验证&#xff0c;基于真机成本较高且数量较多的前提下&#xff0c;可以考虑使用云测平台上的机器进行验证&#xff0c;因此需要针对各云测平台进行调研、比较。 …

打造专属照片分享平台:快速上手Piwigo网页搭建

文章目录 通过cpolar分享本地电脑上有趣的照片&#xff1a;部署piwigo网页前言1.Piwigo2. 使用phpstudy网页运行3. 创建网站4. 开始安装Piwogo 总结 &#x1f340;小结&#x1f340; &#x1f389;博客主页&#xff1a;小智_x0___0x_ &#x1f389;欢迎关注&#xff1a;&#x…