day43_MySql

摘要:
子查询有三种情况:子查询的结果可以是单行和单列,并且只有一个字段。此字段只能有一个值或多个行和列,并且只有一个字段。此字段可以有多个值或多个行和列,并且有多个字段。多个字段分别具有多个值。第一种情况是:单行和单列selected_name from departmentwhere d_ id=;--功能:我们可以在where之后使用比较运算符˃=˂=!
  • 三大范式
  • 事务
  • 数据库之间的关系
  • 多表查询
外键约束

​ 语法:在新表中:constraints 外键约束名称 foreign key(外键字段名称) references 主表表名(主键字段名) -------------从表添加外键约束关联中包含主表

​ 在已有表中添加外键约束:alter table 从表表名 add constraints 外键约束名称 foreign key(外键字段名称) references 主表表名(主键字段名)

​ 删除外键:alter table 从表表名 drop foreign key 外键名称

​ 级联操作

​ 注意:在从表中,修改主表会修改关联不存在的数据是不合法的

​ 在主表中,删除从表中已经存在的主表信息,是不合法的,直接删除主表(从表中有记录数据关联)会删除失败

​ 概念:在修改或删除主表的主键时,同时会更新或删除从表中的数据,称为级联操作

​ 更新级联:on update cascade 级联更新只是创建表的时候创建级联关系,当更新主表中主键,从表中的外键字段会自动更新,

​ 删除级联:on delete cascade 级联删除,当删除主表中的主键时,从表中含有该字段的记录值会一并删除

约束总结
约束名关键字描述
主键primary key唯一不为空
默认default插入数据,若没有赋值,自动赋指定默认值
非空not null该字段不能为null
唯一unique该字段在整个表中只能出现一次
外键foreign key从表中添加外键,关联主表中的主键
表与表之间关系

可以分成三类:

  • ​ 一对一:一般情况下,一对一关系基本不用,当发现两张表是一对一关系时,进行合表
  • ​ 一对多:在表关系中出现最多的情况
  • ​ 多对多:从两个方向观察都是1-n的关系
表之间关系关系维护与创建
一对一合表、互为外键约束、表之间关系很少
一对多在从表(多的一方)一方创建外键,关联主表主键字段,先创建主表再创建从表
多对多创建中间表,中间表分别添加外键约束,关联各自对应的主键

数据库的设计范式

​ 什么是范式 ?

​ 在设计数据库的时候,需要遵从的规范要求,根据这些规范要求设计出合理的数据库。这些规范被称为范式。这些范式针对的是关系型数据库。

​ 目前、关系型数据库的设计范式共有6个 从1-5(第5范式又称完美范式) 、巴斯科德范式(BCNF)

​ 各种范式呈递次规范,遵从级别越高的范式数据库的冗余越低

第一范式:1NF

​ 数据库中的每一列是不可分割的原子数据项

第二范式:2NF

​ 在第一范式的基础上,非码属性必须完全依赖于码(在第一范式的基础上,消除非主属性对码的部分函数依赖)

​ 概念:

  • ​ 1.函数依赖: A--->B 如果通过A属性(属性组)的值、能够确定唯一的B属性值,称B(函数)依赖于A
  • ​ 2.完全函数依赖:A--->B 如果A是一个属性组,则B属性值的确定需要依赖于A属性组中所有的属性值
  • ​ 3.部分函数依赖:A--->B 如果A是一个属性组,则B属性值的确定只需要依赖于A属性组中的某一个或某一些属性值即可
  • ​ 4.传递函数依赖:A--->B、B--->C 如果通过A属性(属性组)的值,可以唯一确定B属性的值,再通过B属性的值可以唯一确定C属性的值,称C传递函数依赖于A
  • ​ 5.码:如果在一张表中,一个属性或属性组,被其他所有属性所完全依赖,则称这个属性(属性组)为该表的码
    • ​ 主属性:码属性组中的所有属性
    • ​ 非主属性:除主属性外的其他属性
第三范式:3NF

​ 在第二范式的基础上,任何非主属性不依赖于其他的非主属性(在第二范式的基础上,消除传递函数依赖)

三大范式总结
范式特征
1NF表中每一列具有原子性(不可分割)
2NF消除部分函数依赖,一张表只做一件事
3NF消除传递函数依赖,表中每一列都直接依赖于码(主键),不需要通过其他字段(列)间接依赖主键

多表连接查询

分类:内连接(显式内连接、隐式内连接)、外连接(左外连接、右外连接)

笛卡尔积现象:

​ 左表的每条记录和右表的每条记录全关联组合,这种效果称为笛卡尔积现象

​ 消除笛卡尔积现象

​ 添加条件过滤,使用where条件语句,达到过滤掉无效的数据

内连接:inner join

​ 隐式内连接:省略掉内连接关键字 inner join

​ select 字段列表 from 表名1,表名2,... where 条件语句;

​ 显式内连接:使用内连接关键字 inner join ... on语句(inner可以省略)

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

​ 总结:

​ 1.查询哪些表

​ 2.确定表关联的条件

​ 3.使用连接的方式

​ 4.确定查询的字段信息,尽量少用 *

外连接

​ 左外连接:left [ outer] join ...on 条件语句(outer可省略)

​ select 字段列表 from 左表(主表)left [outer] join 右表(辅表/从表) on 条件语句

​ 注意事项:用左表中的记录数据去匹配右表中的记录数据,如果符合条件,则显示,不显示的数据一律显示为null,保证左表中的数据全部显示

​ 右外连接:right [ outer] join ...on 条件语句(outer可省略)

​ select 字段列表 from 右表(主表)right[outer] join 左表(辅表/从表) on 条件语句

​ 注意事项:用右表中的记录数据去匹配左表中的记录数据,如果符合条件,则显示,不显示的数据一律显示为null,保证右表中的数据全部显示

子查询

​ 一个查询的结果是另一个查询的条件,形成查询嵌套,里面的查询称为子查询,一定要出现小括号。

​ 子查询的三种情况:

  • ​ 子查询的结果可以是单行单列,只有一个字段,该字段只有一个值

  • ​ 也可以是多行单列,只有一个字段,这个字段有多个值

  • ​ 还可以是多行多列,有多个字段,多个字段分别有多个值

    第一种情况:单行单列

    select
    	d_name
    from 
    	department
    where
    	d_id=(
     select ...   -- 子查询
     );
     -- 特征:我们可以在where后面使用比较运算符  < > >= <= != = 
    

    第二种情况:多行单列

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

    特征:结果是一个集合或一个数组,夫查询使用in运算符

    select
    	d_name
    from
    	department
    where
    	d_id
    in(
        select 
            d_did
        from
            employee
        where  
        age<(
    		select ...   
     	)
     );
    

    第三种情况:多行多列,一般情况下我们可以作为一张虚拟表,进行关联二次查询,一般需要给这个虚拟表起一个别名来实现

    ​ 语法:select 查询字段列表 from 表名,(子查询) as 新表名 where 条件语句;

    ​ 特征:多行多列不能再使用in运算符或者比较运算符,而是需要进行多表关联,给查询出来的多行多列起别名

    
    

子查询总结:

​ 单行单列:只有一个值,在where后面可以使用比较运算符,作为条件

​ 多行单列:是一个集合值或者数组值,在where后面使用的是in运算符,作为条件

​ 多行多列:大多数多列结果值是放在from后面的,作为多表关联。可以进行二次条件过滤

事务

​ 什么是事务:一个业务操作中,这个操作要么完全执行成功,要么被撤销,这个业务是一个整体操作,在这个整体中所有的sql语句要么全部执行成功,要么全部被回滚(业务执行失败)

手动操作事务:

​ 三个动作:

  • ​ 开启事务 :start transaction;
  • ​ 提交事务:commit;
  • ​ 回滚事务:rollback;
-- 开启事务
start transaction; -- 手动开启事务
-- 事务sql...
commit;-- 事务操作无异常,手动提交事务,持久化更改数据库
rollback;-- 当事务操作出现异常,我们应当让事务回滚

​ 事务的四大特性:

​ 原子性:作为一个整体,不可分割

​ 一致性:事务在执行前和执行后数据库中的数据状态是一致的

​ 隔离性:事务与事务之间互不影响,在多个事务并发执行的时候应该处于隔离状态

​ 持久性:一旦事务执行成功,对数据库的影响是持久化的

免责声明:文章转载自《day43_MySql》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇python网络编程 day35 网络编程——进程池,线程池、协程、回调函数、gevent模块、asyncio模块Autofac在.NetCore 下的使用下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

kibana数据操作

ES中的索引数据将存储为_分数:分数越高,匹配越好。即使Lucene使用了反向索引,计算搜索得分仍需要一些时间。②.— 筛选器上下文:使用筛选器参数时的执行环境,例如在布尔查询中使用Must _ Not或Filter。在筛选器上下文中,查询将回答此问题...

AntDesignVue中关于Table组件的使用

--下面这整个div都是设置每一列搜索的样式图标--˃searchInput=c":placeholder="`Search${column.dataIndex}`":value="selectedKeys[0]"@change="e=˃setSelectedKeys(e.target.value?...

14款优秀的JavaScript调试工具大盘点

官方网站:http://www.jshint.com/4.Grunt Grunt是一个基于任务的命令行构建工具,适用于JavaScript项目。Venkman旨在为Mozilla提供一个基于浏览器的强大JavaScript调试环境。官方网站:http://www.my-debugbar.com/wiki/CompanionJS/HomePage10.Simp...

TCL基本语法2

TCL基本语法21、format和scan两个基本的函数,和C语言中的sprintf和scanf的作用基本相同。format将不同类型的数据压缩在字符串中,scan将字符串中的数据提取出来。setnameJacksetage100setworker[format"%sis%dyearsold"$name$age]puts$workerscan$worker"...

k8s集群上删除pod及service

删除k8s集群中的pod:找到pod的名称空间,并根据名称空间删除pod1。首先删除pod2,然后删除相应的部署。否则,删除pod是无用的。您还将看到pod,因为deployment.yaml文件中定义的副本数如下:delete the pod[root@test2~]#kubectlgetpod-njenkinsNAMEREADYSTATUSRESTART...

VMP加壳(三):VMP壳爆破实战-破解某编辑类软件

同时,记住在内存视图中向VMP0段提供断点后继续单击确认按钮,以查看调用方法的位置(此处的返回地址为0x5E01E9),但此处返回push(或vm条目)。这个地方会是验证码检测的入口吗!通过字符串查找各种键提示(sn、不正确注册等)的内存:通过访问断点查找键代码,然后找出调用该函数的函数,这与JCC指令的距离更远。...