mysql数据库(下)

目录

约束

约束的概念和分类

1、约束的概念:

2、约束的分类

1、主键约束

2、默认约束

 3、非空约束

4、唯一约束

5、外键约束


约束

约束的概念和分类

1、约束的概念:

  • 约束时作用于表中列上的规则,用于限制加入表的数据
  • 约束的存在保证了数据库中数据的正确性、有效性和完整性

2、约束的分类

 练习:

CREATE TABLE emp(
    id INT PRIMARY KEY,
    ename VARCHAR(50) NOT NULL UNIQUE,
    joindate DATE NOT NULL,
    salary DOUBLE(7,2) NOT NULL,
    bonus DOUBLE(7,2) DEFAULT 0
);

insert into emp(id,ename,joindate,salary,bonus) VALUES(1,'张三','1999-11-11',8800,5000);

--------------------------------------------------------------------------------------------------- 

1、测试主键约束  非空且唯一(将id的1改为了null)

又运行了一遍已有的,显示[Err] 1062 - Duplicate entry '1' for key 'PRIMARY'

--------------------------------------------------------------------------------------------------------------

2、测试非空约束 不能为null

测试主键的时候已经测试了不能为空,这里就不演示啦

--------------------------------------------------------------------------------------------------------------

3、测试唯一约束 表中所有数据各不相同

这里也是,主键的时候测试了以下,也就不演示啦

--------------------------------------------------------------------------------------------------------------

4、测试默认约束 未指定值则采用默认值

这里我把bonus和5000 去掉了,我们看看结果是什么

取值为默认值0

只有不添加任何值的时候默认约束才能生效,输入null的话,显示的就是null。我们来看一下

显示的就是null,而不是0;

--------------------------------------------------------------------------------------------------------------

5、测试自动增长:auto_increment 当列是数字类型并且唯一约束

这里我们得重新建表

drop table if EXISTS emp;
CREATE TABLE emp(
    id INT PRIMARY KEY auto_increment,
    ename VARCHAR(50) NOT NULL UNIQUE,
    joindate DATE NOT NULL,
    salary DOUBLE(7,2) NOT NULL,
    bonus DOUBLE(7,2) DEFAULT 0
);

没加数据的就把前面的id删了

我们看一下结果如何

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~·

在建完表后如果要添加约束的话,我们该如何取写代码

1、主键约束

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

删除约束:

alter table 表名 drop index 字段名; 

2、默认约束

alter table 表名 alter 列名  set  default 默认值;

 删除约束

alter table 表名 alter 列名 drop default; 

 3、非空约束

alter table 表名 modify 字段名 数据类型 not null;

删除约束:

alter table 表名 modify 字段名 数据类型; 

4、唯一约束

alter table 表名 modify 字段名 数据类型 unique; 

删除约束

alter table 表名 drop index 字段名; 

5、外键约束

外键用来让两个表的数据之间建立链接,保证数据的一致性和完整性

添加约束

创建时添加外键约束

create table 表名(

        列名 数据类型,

        .....

        [constraint][外键名称] foreign key (外键字段名) references 主表名称(主表列名称)

);

建完表后添加外键约束

alter table 表名 add constraint 外键名称 foreign key  (外键字段名) references 主表名称(主表列名称)

删除约束:

alter table 表名 drop foreign key 外键名称; 

添加外键dep_id,关联dept表的主键

代码在这哦

CREATE table dept(
id int PRIMARY key auto_increment,
dep_name varchar(20),
addr varchar(20)
);
create table emp(
id int PRIMARY key auto_increment,
name varchar(20),
age int,
dep_id int,
CONSTRAINT fk_emp_dept FOREIGN key(dep_id) REFERENCES dept(id)
);

 insert into dept(dep_name,addr) VALUES('研发部','广州'),('销售部','深圳');

insert into emp(name,age,dep_id) VALUES('张三',20,1),('李四',20,1),('王五',20,1),('赵六',20,2),('孙七',22,2),('周八',18,2);

这样就不能删除dept表中的数据了

会显示有外键的约束

但如果我想要删除研发部,那就得先删除张三李四王五三条数据

这样就可以删除研发部了

----------------------------------------------------------------

在对象中按住ctrl选中这两张表

再点击逆向表到模型 

就能看到这俩张是有个外键约束着的

 

删除外键:

alter table emp drop FOREIGN key fk_emp_dept;

这样两张表中的线就没了

创建过表之后添加外键:

alter table emp add CONSTRAINT fk_emp_dept FOREIGN key(dep_id) REFERENCES dept(id);

数据库设计

表关系 

  • 一对一:

如:用户和用户详情  

一对一关系多用于表拆分,将一个实体中经常使用的字段放一张表,不经常使用的字段放另一张表,用于提升查询性能

实现方式:在任意一方加入外键,关联另一方主键,并设置外键为唯一(unique)

  • 一对多(多对一):

如:部门和员工(一个部门可以对应多个员工,一个员工对应一个部门)

实现方式:在多的一方建立外键,指向一的一方的主键

  • 多对多: 

如:商品和订单(一个商品对应多个订单,一个订单包含多个商品)

实现方式:建立第三张中间表,中间表至少包含两个外键,分别关联两方主键

多表查询

多表查询:从多张表中查询数据

连接查询

内连接:相当于查询A、B的交集数据

外连接:

         左外连接:相当于查询A表所有数据和交集部分的数据

         右外连接:相当于查询B表所有数据和交集部分的数据

子查询

对于这两张表,我们如果直接用

select * from emp,dept;

查询的话会显示24条数据

这就涉及到了笛卡尔积:有A、B两个集合,取A、B所有的组合情况

我们得消除无效数据,就得设置一个条件emp.dep_id=dept.did

 这其实就是连接查询中内连接的一种

内连接

隐式内连接

select 字段列表 from 表1,表2... where 条件;

查询 emp表的name,sex和dept表的dname

显示内连接

select 字段列表 from 表1 [inner] join 表2 on 条件;

 这里的inner可以省略

 外连接

左外连接

select 字段列表 from 表1 left [outer] join 表2 on 条件;

右外连接

select 字段列表 from 表1 right [outer] join 表2 on 条件;

子查询 

查询中嵌套查询,称嵌套查询为子查询

子查询根据查询的结果不同,作用不同: 

  • 单行单列:作为条件值,使用= 、!=、> 、<等进行条件判断

select 字段列表 from 表 where 字段名 = (子查询);

  • 多行单列:作为条件值,使用in等关键字进行条件判断

select 字段列表 from 表 where 字段名 in (子查询);

  • 多行多列:作为虚拟表

select 字段列表 from (子查询) where 条件;

下面来看例子

查询 猪八戒的工资

查询工资高于猪八戒的员工信息

但如果我们要将二者合二为一也是可以的

图中划红线的就是子查询

多行单列子查询👇

多行多列子查询 

 这里的t1是取的别名

-------------------------------------------------------------------------------------------------------------------------

事务

事务简介

  • 数据库的事务(Transaction)是一种机制、一个操作序列,包含了一组数据库操作命令
  • 事务把所有的命令作为一个整体一起向系统提交或撤销操作请求,即这一组数据库命令要么同时成功,要么同时失败
  • 是事务是一个不可分割的工作逻辑单元

数据库事务是指由一系列的数据库操作组成的逻辑单元,这些操作要么全部成功执行,要么全部失败回滚。事务具有以下四个特性:

  1. 原子性(Atomicity):事务中的操作要么全部成功执行,要么全部失败回滚。事务是一个不可分割的工作单位。

  2. 一致性(Consistency):事务执行后,数据库从一个一致性状态转换到另一个一致性状态。事务执行过程中,数据库的约束条件始终被满足。

  3. 隔离性(Isolation):事务的执行是相互隔离的,一个事务的执行结果对其他事务是不可见的。事务之间不会相互干扰。

  4. 持久性(Durability):事务执行成功后,对数据库的修改是永久性的。

数据库事务能够保证数据的完整性和一致性,减少数据的冲突和错误。在高并发的系统中,使用数据库事务可以确保数据的正确处理和操作的原子性。

开启事务

START TRANSACTION; 或者BEGIN;

提交事务

COMMIT; 

回滚事务

ROLLBACK; 

 来做个案例试试,代码给大家放在这里啦

drop table if exists account;
CREATE table account(
id int PRIMARY key auto_increment,
name varchar(10),
money DOUBLE(10,2)
);
insert into account(name,money) VALUES('张三',1000),('李四',1000); 

 接下来我们在两条语句中加一句话,制造异常

这就会报错,我们来看一下数据有没有被修改

 

李四的数据被修改了,报错下面的语句就没有被执行了

然后我们新建了一个查询模仿别人是否可以看到数据的变化

结果显示,也发生了变化

接下来我们将数据还原并开启事务看看会发生什么

我们来看看数据有没有被修改呢

被修改了,我们再看看新建查询里查询的数据有没有被修改

数据并没有被修改

我们开启事务之后,做的那些操作都是一些临时性的操作,在我们当前的用户窗口里可以查到,但是在其他的用户窗口里是查不到的

出错了之后我们就要取回滚事务

在当前窗口数据就恢复了,回滚到事务开始之前的状态

然后我们解决问题,将出错了注释掉之后,问题就解决了

没有问题我们就用commit提交事务,数据就会被持久性的更改

 Mysql事务默认自动提交

查看事务的默认提交方式

select @@autocommit;

1为自动提交

0为手动提交 

修改事物的提交方式

set @@autocommit=0;

这里我们执行以下看看

 

当前窗口的数据被修改了

那我们看看新建的窗口如何

数据没有被改变,因为我们把事务提交改为了手动提交,mysql就不帮我们自动提交了 

执行了commit之后数据才能生效

 

别人也可以看到数据被修改了

到这里也就结束啦,大家继续加油哦,继续努力!!!

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

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

相关文章

Singularity(五)| 容器挂载和环境

Singularity&#xff08;五&#xff09;| 容器挂载和环境 我们可以按照如下方式运行 Singularity 容器&#xff1a; singularity shell samtoolssingularity exec samtools samtools helpsingularity run samtoolssingularity exec instance://samtools 在我们逐个详解容器运行…

Vue3全家桶 - VueRouter - 【2】重定向路由

重定向路由 在路由规则数组中&#xff0c;可采用 redirect 来重定向到另一个地址&#xff1a; 通常是将 / 重定向到 某个页面&#xff1b; 示例展示&#xff1a; router/index.js&#xff1a;import { createRouter, createWebHashHistory, createWebHistory } from vue-route…

Python安装第三方库

前言&#xff1a;大部分时候我们都是使用pip install去安装一些第三方库&#xff0c;但是偶尔也会有部分库无法安装&#xff08;最典型的就是dlib这个库&#xff09;&#xff0c;需要采取别的方法解决&#xff0c;这里做笔记记录一下。 使用国内镜像源安装 因为pypi的服务器在…

最简k8s部署(AWS Load Balancer Controller使用)

问题 我需要在k8s集群里面部署springboot服务&#xff0c;通过k8s ingress访问集群内部的springboot服务&#xff0c;应该怎么做&#xff1f; 这里假设已经准备好k8s集群&#xff0c;而且也准备好springboot服务的运行镜像了。这里我们将精力放在k8s服务编排上面。 一图胜千言…

基于SpringBoot的“医院信管系统”的设计与实现(源码+数据库+文档+PPT)

基于SpringBoot的“医院信管系统”的设计与实现&#xff08;源码数据库文档PPT) 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringBoot 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 功能结构图 系统首页界面图 用户注册界面图 医生…

es 查询案例分析

场景描述&#xff1a; 有这样一种场景&#xff0c;比如我们想搜索 title&#xff1a;Brown fox body&#xff1a;Brown fox 文章索引中有两条数据&#xff0c;兔子和狐狸两条数据 PUT /blogs/_bulk {"index": {"_id": 1}} {"title": "…

【鸿蒙 HarmonyOS 4.0】常用组件:List/Grid/Tabs

一、背景 列表页面&#xff1a;List组件和Grid组件&#xff1b; 页签切换&#xff1a;Tabs组件&#xff1b; 二、列表页面 在我们常用的手机应用中&#xff0c;经常会见到一些数据列表&#xff0c;如设置页面、通讯录、商品列表等。下图中两个页面都包含列表&#xff0c;“…

JVM知识整体学习

前言&#xff1a;本篇没有任何建设性的想法&#xff0c;只是我很早之前在学JVM时记录的笔记&#xff0c;只是想从个人网站迁移过来。文章其实就是对《深入理解JVM虚拟机》的提炼&#xff0c;纯基础知识&#xff0c;网上一搜一大堆。 一、知识点脑图 本文只谈论HotSpots虚拟机。…

如何使用US Domain Center和WordPress搭建非营利组织网站的详细指南

在今天的数字化时代&#xff0c;拥有一个专业、易于管理和更新的网站对于非营利组织&#xff08;例如慈善机构、NGO等&#xff09;至关重要。WordPress是一个功能强大且易于使用的网站构建平台&#xff0c;而美国域名中心 US Domain Center&#xff1a;US Domain Center 则是一…

软考71-上午题-【面向对象技术2-UML】-UML中的图2

一、用例图 上午题&#xff0c;考的少&#xff1b;下午题&#xff0c;考的多。 1-1、用例图的定义 用例图展现了一组用例、参与者以及它们之间的关系。 用例图用于对系统的静态用例图进行建模。 可以用下列两种方式来使用用例图&#xff1a; 1、对系统的语境建模&#xff1b…

LED显示屏的刷新频率及灰度等级

LED显示屏随着其在室内各种场所的广泛应用&#xff0c;无论是在指挥中心、监控中心还是演播厅中&#xff0c;都得到了越来越多的关注。然而&#xff0c;就LED显示屏系统的整体表现而言&#xff0c;这些显示屏能否满足用户的需求&#xff1f;显示的影像是否符合人眼的观赏要求&a…

2007-2021年中国省级知识产权保护指数数据

2007-2021年中国省级知识产权保护指数数据 1、时间&#xff1a;2007-2021年 2、范围&#xff1a;31省市 3、指标&#xff1a;&#xff1a;年份、省份、IPP&#xff08;知识产权保护指数&#xff09; 4、来源&#xff1a;全国知识产权发展状况报告 5、指标解释&#xff1a;…

mysql中insert … select锁范围

1、执行 insert … select 的时候&#xff0c;对目标表也不是锁全表&#xff0c;而是只锁住需要访问的资源。 例如&#xff0c; CREATE TABLE t (id int(11) NOT NULL AUTO_INCREMENT,c int(11) DEFAULT NULL,d int(11) DEFAULT NULL,PRIMARY KEY (id),UNIQUE KEY c (c) ) EN…

【java数据结构】HashMap和HashSet

目录 一.认识哈希表&#xff1a; 1.1什么是哈希表&#xff1f; 1.2哈希表的表示&#xff1a; 1.3常见哈希函数&#xff1a; 二.认识HashMap和HashSet: 2.1关于Map.Entry的说明:,> 2.2Map常用方法说明&#xff1a; 2.3HashMap的使用案例&#xff1a; 2.4Set常见方法…

代理IP如何应对自动化测试和爬虫检测

目录 一、代理IP在自动化测试和爬虫中的作用 二、代理IP的优缺点分析 1.优点 2.缺点 三、应对自动化测试和爬虫检测的策略 1.选择合适的代理IP 2.设置合理的请求频率和间隔 3.模拟人类行为模式 4.结合其他技术手段 四、案例与代码示例 五、总结 在自动化测试和爬虫开…

LoadBalancer (本地负载均衡)

1.loadbalancer本地负载均衡客户端 VS Nginx服务端负载均衡区别 Nginx是服务器负载均衡&#xff0c;客户端所有请求都会交给nginx&#xff0c;然后由nginx实现转发请求&#xff0c;即负载均衡是由服务端实现的。 loadbalancer本地负载均衡&#xff0c;在调用微服务接口时候&a…

Stable Diffusion 模型下载:Comic Babes(漫画宝贝)

本文收录于《AI绘画从入门到精通》专栏&#xff0c;专栏总目录&#xff1a;点这里。 文章目录 模型介绍生成案例案例一案例二案例三案例四案例五案例六案例七案例八 下载地址 模型介绍 条目内容类型大模型基础模型SD 1.5来源CIVITAI作者datmuttdoe文件名称comicBabes_v2.safet…

快速了解Redis

Redis是什么&#xff1f; Redis是一个数据库&#xff0c;是一个跨平台的非关系型数据库&#xff0c;Redis完全开源&#xff0c;遵守BSD协议。它通过键值对(Key-Value)的形式存储数据。 与传统数据库不同的是 Redis 的数据是存在内存中的 &#xff0c;也就是它是内存数据库&am…

布隆过滤器(做筛选器索引)

什么是布隆过滤器 布隆过滤器&#xff08;Bloom Filter&#xff09;是1970年由布隆提出的。它实际上是一个很长的二进制向量和一系列随机映射函数。布隆过滤器可以用于检索一个元素是否在一个集合中。 它的优点是空间效率和查询时间都比一般的算法要好的多&#xff0c;缺点是…

GIS学习笔记(四):GIS数据可视化综合(矢量数据)

矢量数据 arcgis的主要可视化工具&#xff1a;属性 符号系统 符号系统 按类别 这里不会涉及到数字的大小因素&#xff0c;只是按照字符的分类去做可视化 “唯一值”的含义 “建筑年代”字段共有10个年份&#xff0c;一个年份也许有多个数据( eg.1990年的建筑有20个)&…