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

Mysql之约束与事件

前言

讲一下mysql剩余的,这是以前的写的博客,忘记发了

1. 约束

1.1 普通约束

在这里插入图片描述
MySQL不支持检查约束

#员工表
create table emp(
    id int,#员工id,主键且自增长
    name varchar(50),#非空且唯一
    join_date date,#入职日期,,非空
    salary double(7,2),#非空
    bonus double(7,2)#奖金,如果没有默认为0
);

添加约束为

#员工表
create table emp(
    id int primary key ,#员工id,主键且自增长 
    name varchar(50) not null unique ,#非空且唯一
    join_date date not null,#入职日期,,非空
    salary double(7,2) not null ,#非空
    bonus double(7,2) default 0#奖金,如果没有默认为0
);

这个没有写自增长

#验证非空
insert into emp values(1,'张三','1999-11-11',8800,5000);
insert into emp values(1,null,'1999-11-11',8800,5000);

在这里插入图片描述

insert into emp values(1,'张三','1999-11-11',8800,5000);

在这里插入图片描述
这个是唯一

非空就是不能为null,,唯一就是不能相同

没有默认为0的意思是你不写为0,你写null还是null

违反的话就会报错

#员工表
create table emp(
    id int primary key auto_increment,#员工id,主键且自增长
    name varchar(50) not null unique ,#非空且唯一
    join_date date not null,#入职日期,,非空
    salary double(7,2) not null ,#非空
    bonus double(7,2) default 0#奖金,如果没有默认为0
);

这样就有自增长了

自增长的意思就是你不写编号的时候,或者你写编号为null的时候,会给编号默认增大的值,而且是会自动排序的
在这里插入图片描述

1.2 外键约束

外键约束就是对两个表建立联系

alter table emp1 add constraint fk_dep_id foreign key (dep_id) references emp2(id);

这个就是添加外键
修改emp1 ,给emp1 添加外键,add constraint fk_dep_id添加外键为fk_dep_id,把emp1 的dep_id关联到emp2的id

但这样我不能运行,是因为id没有索引,会报错
Failed to add the foreign key constraint. Missing index for constraint ‘fk_emp3_dep_id’ in the referenced table ‘emp2’

 ALTER TABLE emp2 ADD INDEX (id);

给id添加一个索引就可以了

这样就可以建立一个dep_id到id的约束了
同时选中两个表,右键选图就可以看到了
在这里插入图片描述

ALTER TABLE emp3 DROP FOREIGN KEY fk_emp3_dep_id;

这个就是删除约束
就是删除两个表之间的联系

以前有约束的时候,两个表之间有联系
dep_id的每个值在id中都能找到
意思就是id就是dep_id的所有类型,dep_id的每个值都会在id中找到
意思就是dep_id有很多个1,但是id只有一个1,而且dep_id所有的1都指向id的那个1,如果要删除id的1,还要删除dep_id的所有1才行,要删除,emp3,还要删除emp2所有数据

数据库设计

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

在这里插入图片描述

在这里插入图片描述

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

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

多表查询

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

内连接

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

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

外连接

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

子查询

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

多行单列:did就是多行单列的,用in

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
多行多列
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

事务

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

在这里插入图片描述
把他们全部当做事务来对待,这样就不会出现这种问题了,500块不易而发,因为可以一起失败
在这里插入图片描述
开启事务开始执行,后面的语句只是虚拟执行,并没有完全执行,异常的话,就回滚,回到开启事务,原来执行的都不算,到了提交事务的话,原来执行的才算
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这里全部执行,就报错了,只执行了-500
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
报错那里执行的操作都是临时性的操作,只有自己这个用户才能看到错误,其他用户是看不到的
在这里插入图片描述
这里在回滚一下
在这里插入图片描述
数据就会恢复到以前
在这里插入图片描述
当然其他用户来查,还是一样不变的
在这里插入图片描述
在这里插入图片描述

只有提交了事务,才是永久性的操作
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这样提交数字为1,就是默认提交的
在这里插入图片描述
事务执行成功就是默认提交的
相当于后面自己写了一个commit
在这里插入图片描述
commit设置为0,就是手动提交的

在这里插入图片描述
意思是我们设置为0之后,要提交的话,必须是手动写一个commit来提交

总结


http://www.kler.cn/a/387298.html

相关文章:

  • goframe开发一个企业网站 rabbitmq队例15
  • Python数据分析NumPy和pandas(二十九、其他Python可视化工具)
  • c语言数据结构与算法--简单实现栈和队列的出栈与入栈
  • (十)Python字典基本操作
  • ImportError: cannot import name ‘packaging‘ from ‘pkg_resources‘ 的参考解决方法
  • Flutter 的 Widget 概述与常用 Widgets 与鸿蒙 Next 的对比
  • 【网络安全】SSL/TLS协议运行机制详解
  • 数据结构-并查集专题(2)
  • Python学习------第四天
  • 【Redis】基于redis实现订阅发布
  • 算法训练(leetcode)二刷第十七天 | 235. 二叉搜索树的最近公共祖先、701. 二叉搜索树中的插入操作、*450. 删除二叉搜索树中的节点
  • 停车场微信小程序的设计与实现(lw+演示+源码+运行)
  • 饱和限幅器MATLAB和CODESYS平台下的实现
  • 同步时钟装置为新能源电力赋能强基!
  • 【数据集】【YOLO】【目标检测】水面船只识别数据集 9798 张,YOLO船只识别算法实战训练教程!
  • [FBCTF 2019]rceservice 详细题解
  • O-RAN 分布式单元 (O-DU) 参考架构
  • 【SPIE出版 | ISSN: 0277-786X,EI检索稳定!】2024年计算机视觉与图像处理国际学术会议 (CVIP 2024,11月15-17日)
  • 以旅游产品为例改写一篇系统架构风格的论文
  • Docker Compose部署Rabbitmq(延迟插件已下载)
  • 搜维尔科技:Manus VR数据手套-人形机器人的远程操作和机器学习
  • 从0开始学习机器学习--Day20--优化算法的思路
  • leetcode25:k个一组链表反转
  • C++STL容器详解——list
  • nvidia本地环境部署以及jetson交叉编译环境部署
  • 网络安全技术及其在企业中的应用