数据库详细讲解--下

news2024/11/18 9:26:01

数据库详细讲解–下

mysql 表外连接

外连接

1.左外连接(如果左侧的表完全显示我们就说是左外连接)

2.右外连接(如果右侧的表完全显示我们就说是右外连接)

3.使用左连接(显示所有人的成绩,如果没有成绩,也要显示该人的姓名和id号,成绩显示为空)

select.from表1 left join表2 on条件 [表1:就是左表表2:就是右表]

4.使用右外连接(显示所有成绩,如果没有名字匹配,显示空)

select . from 表1 right join 表2 on条件[表1:就是左表表2:就是右表]

mysql 约束

基本介绍

约束用于确保数据库的数据满足特定的商业规则。在mysql中,约束包括:

not null、 unique,primary key,foreign key,和check 五种.

primary key(主键)-基本使用

在这里插入图片描述

primary key(主键)-细节说明

  1. primary key能重复而且能null。
  2. 一张表最多只能有一个主键,但可以是复合主键

主键的指定方式有两种

  1. 直接在字段名后指定:字段名primakry key

  2. 在表定义最后写 primary key(列名);

  3. 使desc表,可以看到primary key的情况.

  4. 提醒:在实际开发中,每个表往往都会设计一个主键

not null(非空)

在这里插入图片描述

unique(唯一)

在这里插入图片描述

unique 细节(注意):

  1. 如果没有指定 not null,则 unique 字段可以有多个null
  2. 一张表可以有多个unique字段

foreign key(外键)

用于定义主表和从表之间的关系:

外键约束要定义在从表上,主表则必须具有主键约束或是unique约束.,

当定义外键约束后,要求外键列数据必须在主表的主键列存在或是为null
在这里插入图片描述

foreign key(外键)一细节说明

  1. 外键指向的表的字段,要求是primary key或者是unique
  2. 表的类型是innodb,这样的表才支持外键
  3. 外键字段的类型要和主键字段的类型一致(长度可以不同)
  4. 外键字段的值,必须在主键字段中出现过,或者为null[前提是外键字段允许为null]
  5. 一旦建立主外键的关系,数据不能随意删除了

check

用于强制行数据必须满足的条件,假定在sal列上定义了check约束,并要求sal列值在10002000之间如果不再10002000之间就会提示出错。

提示: oracle 和 sql server均支持check,但是mysql5.7目前还不支持check,只做语法校验,但不会生效。check.sql在mysql中

实现check的功能,一般是在程序中控制或者通过触发器完成。
在这里插入图片描述

自增长

在这里插入图片描述

在这里插入图片描述

  1. 一般来说自增长是和primary key配合使用的

  2. 自增长也可以单独使用[但是需要配合一个unique]

  3. 自增长修饰的字段为整数型的(虽然小数也可以但是非常非常少这样使用)

  4. 自增长默认从1开始,你也可以通过如下命令修改alter table表名 auto_increment =新的始值;

  5. 如果你添加数据时,给自增长字段(列)指定的有值,则以指定的值为准,如果指定了自增长,一般来说,就按照自增长的规则来添加数据

mysql 索引

索引的原理

没有索引为什么会慢?因为全表扫描

使用索引为什么会快?形成一个索引的数据结构,比如二叉树索

引的代价

  1. 磁盘占用
  2. 对dml(update delete insert)语句的效率影响

在我们项目一般是中,select多 (update,delete,insert)少

索引的类型

  1. 主键索引,主键自动的为主索引用(类型Primary key)
  2. 唯一索引(UNIQUE)
  3. 普通索引(INDEX)
  4. 文索引(FULLTEXT)[适用于MyISAM]

一般开发,不使用mysql自带的全文索引,而是使用:全文搜索Solr和 ElasticSearch(ES)

在这里插入图片描述

索引使用

添加索引

  1. create [UNIQUE] index index_name on tbl_name (col_name [(length)][ASC | DESC],…);
  2. alter table table_name ADD INDEX [index name] (index col name,.)
  3. 添加主键(索引)

ALTER TABLE表名ADD PRIMARY KEY(列名,.);

删除索引

  1. DROP INDEX index_name ON tbl_name;
  2. alter table table_name drop index index_name;
  3. 删除主索引比较特别:

alter table t_b drop primary key;

  1. 查询索引(三种方式)
  2. show index(es) from table_name;
  3. show keys from table_name;
  4. desc table_Name;

小结

较频繁的作为查询条件字段应该创建索引

select * from emp where empno = 1

唯一性太差的字段不适合单独创建索引,即使频繁作为查询条件

select * from emp where sex = '男

更新非常频繁的字段不适合创建索引

select * from emp where logincount = 1

不会出现在WHERE子句中字段不该创建索引

mysql 事务

什么是事务

在这里插入图片描述

事务用于保证数据的一致性,它由一组相关的dml语句组成,该组的dml语句要么全部成功,要么全部失败。如:转账就要用事务来处理,用以保证数据的一致性。

事务和锁

当执行事务操作时(dml语句),mysql会在表上加锁,防止其它用户改表的数据.这对用户来讲是非常重要的

mysql 数据库控制台事务的几个重要操作

  1. start transaction -开始一个事务
  2. savepoint保存点名-设置存点
  3. rollback to保存点名-回退事务
  4. rollback-回退全部事务
  5. commit-提交事务,所有的操作生效,不能回退

回退事务

在介绍回退事务前,先介绍一下保存点(savepoint).

保存点是事务中的点.用于取消部分事务,当结束事务时(commit),

会自动的删除该事务所定义的所有保存点当执行回退事务时,通过指定保存点可以回退到指定的点

提交事务

使用commit语句可以提交事务.当执行了commit语句子后,会确认事务的变化、结束事务、删除保存点、释放锁,数据生效。

当使用commit语句结束事务子后,其它会话[其他连接]将可以查看到事务变化后的新数据[所有数据就正式生效.]

事务细节讨论

  1. 如果不开始事务,默认情况下,dml操作是自动提交的,不能回滚
  2. 如果开始一个事务,你没有创建保存点.你可以执行rollback,默认就是回退到你事务开始的状态
  3. 你也可以在这个事务中(还没有提交时),创建多个保存点.比如:savepoint aaa;执行 dml, savepoint bbb;
  4. 你可以在事务没有提交前,选择回退到哪个保存点
  5. mysql的事务机制需要innodb的存储引擎才可以使用,myisam不好使.
  6. 开始一个事务 start transaction, set autocommit=off;

mysql 事务隔离级别

事务隔离级别介绍

多个连接开启各自事务操作数据库中数据时,数据库系统要负责隔离操作,以保证各个连接在获取数据时的准确性。(通俗解释)

如果不考虑隔离性,可能会引发如下问题:

  • 脏读
  • 不可重复读
  • 幻读

查看事务隔离级别

  1. 脏读(dirty read):当一个事务读取另一个事务尚未提交的改变(update,insert,delete)时,产生脏读
  2. 不可重复读(nonrepeatable read):同一查询在同一事务中多次进行,由于其他提交事务所做的修改或删除,每次返回不同的结果集,此时发生不可重复读
  3. 幻读(phantom read):同一查询在同一事务中多次进行,由于其他提交事务所做的插入操作,每次返回不同的结果集,此时发生幻读

事务隔离级别

在这里插入图片描述

设置事务隔离级别

查看当前会话隔离级别

select @@tx isolation;

查看系统当前隔离级别

select @@global.tx isolation;

设置当前会话隔离级别

set session transaction isolation level repeatable read;

设置系统当前隔离级别

set global transaction isolation level repeatable read;

mysql 默认的事务隔离级别是 repeatable read,

一般情况下,没有特殊要求,没有必要修改(因为该级别可以满足绝大部分项目需求)

在这里插入图片描述

mysql事务 ACID

事务的 acid 特性

原子性(Atomicity)

原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。

一致性(Consistency)

事务必须使数据库从一个一致性状态变换到另外一个一致性状态

隔离性(Isolation)

事务的隔离性是多个用户并发访问数据库时,数据库为每一个用户开启的事务,不能被其他事务的操作数据所干扰,多个并发事务之间要相互隔离。

持久性(Durability)

持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来即使数据库发生故障也不应该对其有任何影响

mysql 表类型和存储引擎

基本介绍

​ MySQL的表类型由存储引擎(Storage Engines)决定

主要包括MyISAM、innoDB、Memory等

  1. MySQL数据表主要支持六种类型,分别是:CSV、Memory、ARCHIVE, MRG_MYISAM、 MYISAM、 InnoBDB。
  2. 这六种又分为两类,一类是”事务安全型”(transaction-safe),比如:InnoDB;

其余都属于第二类,称为”非事务安全型”(non-transaction-safe)[mysiam 和 memory]
在这里插入图片描述

主要的存储引擎/表类型特点

在这里插入图片描述

细节说明

  1. MylSAM不支持事务、也不支持外键,但其访问速度快,对事务完整性没有要求
  2. InnoDB存储引擎提供了具有提交、回滚和崩溃恢复能力的事务安全。

但是比起MylSAM存储引擎,InnoDB写的处理效率差一些并且会占用更多的磁盘空间以保留数据和索引。

MEMORY存储引擎使用存在内存中的内容来创建表。

每个MEMORY表只实际对应一个磁盘文件。MEMORY类型的表访问非常得快,

因为它的数据是放在内存中的,并且默认使用HASH索引。但是一旦MySQL服务关闭,表中的数据就会丢失掉,表的结构还在。

如何选择表的存储引擎

如果你的应用不需要事务,处理的只是基本的CRUD操作,

那么MylSAM是不二选择,速度快

  1. 如果需要支持事务,选择InnoDB。
  2. Memory存储引擎就是将数据存储在内存中,由于没有磁盘I./O的等待,速度极快。

但由于是内存存储引擎,所做的任何修改在服务器重启后都将消失。

(经典用法用户的在线状态().)

修改存储引擎

在这里插入图片描述

视图(view)

基本概念

​ 视图是一个虚拟表,其内容由查询定义。同真实的表一样,

视图包含列,其数据来自对应的真实表(基表)

视图和基表关系的示意图

在这里插入图片描述

视图的基本使用

  1. create view 视图名 as select语句
  2. alter view 视图名 as select语句 -更新成新的视图
  3. SHOW CREATE VIEW
  4. drop view视图名1,视图名2

视图的细节

  1. 创建视图后,到数据库去看,对应视图只有一个视图结构文件(形式: 视图名.frm)

  2. 视图的数据变化会影响到基表,基表的数据变化也会影响到视图[insert update delete ]

  3. 视图中可以再使用视图 , 比如从 view01 视图中,选出 字段 做出新视图

视图最佳实践

安全。一些数据表有着重要的信息。有些字段是保密的,不能让用户直接看到。

这时就可以创建一个视图,在这张视图中只保留一部分字段。

这样,用户就可以查询自己需要的字段,不能查看保密的字段。

​ 性能。关系数据库的数据常常会分表存储,使用外键建立这些表的之间关系。

这时,数据库查询通常会用到连接(JOIN)。这样做不但麻烦,效率相对也比较低。

如果建立一个视图,将相关的表和字段组合在一起,就可以避免使用JOIN查询数据。

​ 灵活。如果系统中有一张旧的表,这张表由于设计的问题,即将被废弃。

然而,很多应用都是基于这张表,不易修改。这时就可以建立一张视图,

视图中的数据直接映射到新建的表。这样,就可以少做很多改动,也达到了升级数据表的目的。

Mysql 管理

mysql中的用户,都存储在系统数据库mysql中 user 表中

在这里插入图片描述

其中user表的重要字段说明:

1.host: 允许登录的“位置”,

localhost表示该用户只允许本机登录,也可以指定ip地址,比如:192.168.1.100

  1. user: 用户名;

  2. authentication_string:

密码,是通过mysql的password()函数加密之后的密码。

创建用户

create user ‘用户名’ ‘@’ ‘允许登录位置’ identified by ’密码’

说明:创建用户,同时指定密码

删除用户

drop user ‘用名’ ‘@’ ‘允许登录位置’;

用户修改密码

修改自己的密码:

set password = password('密码');

修改他人的密码(需要有修改用户密码权限):

set password for '用户名'@'登录位置' = password('密码');

mysql 中的权限
在这里插入图片描述

给用户授权

基本语法:

grant权限列表on库.对象名 to ‘用户名’ ‘@’ ‘登录位置’ 【identified by'密码'】

说明:

  1. 权限列表,多个权限用逗号分开

  2. grant select on …

  3. grant select, delete, create on …

  4. grant all 【privileges】 on… //表示赋予该用户在该对象上的所有权限

特别说明

*.*:代表本系统中的所有数据库的所有对象(表,视图,存储过程)

库.*:表示某个数据库中的所有数据对象(表,视图,存储过程等)

identified by可以省略,也可以写出

如果用户存在,就是修改该用户的密码。

如果该用户不存在,就是创建该用户!

回收用户授权

基本语法:

​ revoke 权限列表 on 库**.**对象名 from '用户名’ ‘@‘ ‘登录位置';

权限生效指令

如果权限没有生效,可以执行下面命令

​ 基本语法:

​ FLUSH PRIVILEGES;

细节说明

在创建用户的时候,如果不指定Host,则为%,

%表示表示所有IP都有连接权限create user xxx;

你也可以这样指定create user ‘xxx’ ‘@’ ’19168.1.%’

表示 xxx用户在192.168.1.*的ip可以登录mysql

予该用户在该对象上的所有权限

特别说明

*.*:代表本系统中的所有数据库的所有对象(表,视图,存储过程)

库.*:表示某个数据库中的所有数据对象(表,视图,存储过程等)

identified by可以省略,也可以写出

如果用户存在,就是修改该用户的密码。

如果该用户不存在,就是创建该用户!

回收用户授权

基本语法:

​ revoke 权限列表 on 库**.**对象名 from '用户名’ ‘@‘ ‘登录位置';

权限生效指令

如果权限没有生效,可以执行下面命令

​ 基本语法:

​ FLUSH PRIVILEGES;

细节说明

在创建用户的时候,如果不指定Host,则为%,

%表示表示所有IP都有连接权限create user xxx;

你也可以这样指定create user ‘xxx’ ‘@’ ’19168.1.%’

表示 xxx用户在192.168.1.*的ip可以登录mysql

在删除用户的时候,如果host不是%,需要明确指定 ’用户’ ’@’ host值'

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

4自由度并联机器狗实现行走功能

1. 功能说明 本文示例将实现R328a样机4自由度并联机器狗行走的功能。 2. 电子硬件 在这个示例中,我们采用了以下硬件,请大家参考: 主控板 Basra主控板(兼容Arduino Uno)‍ 扩展板 Bigfish2.1扩展板‍ 电池7.4V锂电池 …

【Linux】进程优先级 进程切换 环境变量

目录 一、进程优先级 1、优先级概念 2、优先级特点 3、修改Linux下的优先级 二、进程切换 1、进程特性 2、进程切换 三、环境变量 1、基本概念 2、常见环境变量 3、查看环境变量方法 4、PATH环境变量 5、和环境变量相关的命令 6、环境变量的组织方式 7、通过代码如何获取环境…

io.netty学习(十一)Reactor 模型

目录 前言 传统服务的设计模型 NIO 分发模型 Reactor 模型 1、Reactor 处理请求的流程 2、Reactor 三种角色 单Reactor 单线程模型 1、消息处理流程 2、缺点 单Reactor 多线程模型 1、消息处理流程 2、缺点 主从Reactor 多线程模型 主从Reactor 多线程模型示例 1…

索尼笔记本U盘重装Win10系统教程图解

很多使用索尼笔记本的用户想要给笔记本重装一下Win10系统,但不清楚具体要怎么操作,首先用户需要确保自己的索尼笔记本电脑能够正常联网,还需要准备一个8G以上的U盘,接着按照小编分享的索尼笔记本U盘重装Win10系统教程图解操作&…

怎么高效的通过爬虫获取数据

导语:在当今数字化时代中,获取数据已成为许多企业和个人的重要需求。在快速获取数据时,通过爬虫技术迅速获取网络数据已成为一项重要的技能和技术。然而,在应用爬虫技术前,需要注意一些重要的问题。本文总结了从数据来…

九大数据结构

数据结构想必大家都不会陌生,对于一个成熟的程序员而言,熟悉和掌握数据结构和算法也是基本功之一。数据结构本身其实不过是数据按照特点关系进行存储或者组织的集合,特殊的结构在不同的应用场景中往往会带来不一样的处理效率。 常用的数据结…

IDEA上面书写wordcount的Scala文件具体操作

系列文章目录 IDEA创建项目的操作步骤以及在虚拟机里面创建Scala的项目简单介绍_intellij 创建scala 目录 系列文章目录 1、编写Scala程序 2、更换pom.xml文件 3、更新Maven的依赖文件 4、执行代码即可 总结 前言 本文主要在上述文章的基础上编辑和创建一个WordCount应…

Linux常用命令——ftp命令

在线Linux命令查询工具 ftp 用来设置文件系统相关功能 补充说明 ftp命令用来设置文件系统相关功能。ftp服务器在网上较为常见,Linux ftp命令的功能是用命令的方式来控制在本地机和远程机之间传送文件,这里详细介绍Linux ftp命令的一些经常使用的命令…

【23-06-25:window基础命令学习】

目录 命令提示符cd /? 查看cd 语法 切换文件目录cd /d d:\ 改变当前的驱动器到D盘, 根目录切换到D盘,因为改变了驱动器,所以需要加上 /dDIRmd 命令 创建目录(文件夹) ,也可以直接创建多级子目录![在这里插…

MySql进阶篇(1)

MySql进阶篇 一、存储引擎1.1 MySql体系结构1.2 存储引擎的简介1.3 存储引擎的特点1.3.1 innoDB1.3.2 MyISAM1.3.3 Memory1.3.4 上述总结 1.4 存储引擎的选择 二、索引2.1 索引的概述2.2 索引结构2.2.1 二叉树和红黑树2.2.2 B-Tree(多路平衡查找树)2.2.3…

基于Java+Swing实现天气预报系统

基于JavaSwing实现天气预报系统 一、系统介绍二、功能展示1.主面2.IP定位城市3.通过城市名称查询天气状态4、查看各城区的天气 三、代码展示四、其他系统五、获取源码 一、系统介绍 系统主要通过输入城市名字(可通过电脑IP查询所属城市,查询所属城市IP接…

Linux系统编程(exec函数家族和system函数)

文章目录 前言一、exec函数家族二、system函数介绍三、system函数使用总结 前言 本篇文章我们继续讲解多进程编程中的,exec函数家族和system函数。 一、exec函数家族 exec 函数家族是一组在类Unix操作系统中常用的函数,用于在当前进程中执行一个新的程…

STM32模拟I2C协议获取HDC1080温度和湿度传感器数据

STM32模拟I2C协议获取HDC1080温度和湿度传感器数据 HDC1080是一款温湿度传感器,具有如下特点: 其中温度和湿度经过出厂校准。这里介绍STM32模拟I2C总线协议访问HDC1080的HAL库实现范例。 HDC1080电路连接 HDC1080的内部原理及电路连接如下&#xff1…

GIS 功能模块设计

文章目录 1 .地图渲染2. 地图控制设备管理模块设计1 . 导航树管理2. 查询定位功能3. 资源管理功能4 . 入沟管理管线业务功能模块设计1 .轨迹图管理2. 单线图管理3. 设备接线图管理4. 工井立视图管理其他管理模块1 .用户管理功能2. 数据导入功能 1 .地图渲染 主要解决将指定的空…

16个小的UI设计规则却能产生巨大的影响

微信搜索 【大迁世界】, 我会第一时间和你分享前端行业趋势,学习途径等等。 本文 GitHub https://github.com/qq449245884/xiaozhi 已收录,有一线大厂面试完整考点、资料以及我的系列文章。 快来免费体验ChatGpt plus版本的,我们出的钱 体验地…

最新导则下生态环评报告编制技术(报告篇、制图篇、指数篇、综合应用)

根据生态环评内容庞杂、综合性强的特点,依据生态环评最新导则,将内容分为4大篇章(报告篇、制图篇、指数篇、综合篇)、10大专题(生态环评报告编制、土地利用图的制作、植被类型及植被覆盖度图的制作、物种适宜生境分布图的制作、生物多样性测定、生物量及…

VUE L 条件列表渲染 ⑧

目录 文章有误请指正,如果觉得对你有用,请点三连一波,蟹蟹支持✨ V u e j s Vuejs Vuejs条件渲染列表渲染 基本列表 Key的原理 列表过滤 列表排序 列表更新小问题 监测数据改变的原理~对象 V u e S e t VueSet VueSet的…

游戏业务使用什么防护最安全 110.42.3.X

近几年,随着网络的发展,游戏行业也发展迅速,游戏成为人们空闲时间最主要的娱乐项目。网络游戏也成为收入可观的产业。可观的盈利也带来了严峻的问题,网络游戏目前也是网络安全的重灾区,是黑客的主要攻击对象。 有矛就有…

这个端午节,我们用AI创作了有趣的画作

端午节期间,小伙伴们都是如何安排的? 小灰在自己创立的知识星球ChatGPT与AI绘画上面,搞了一场有趣的比赛: 请球友们利用AI绘画平台,创作出一幅端午节相关的图画,比一比谁画得更好。 知识星球的小伙伴们踊跃…

Vue3项目中锚点定位实现

代码 <!doctype html> <html class"no-js"><head><meta charset"utf-8"><title>锚点</title><script src"https://unpkg.com/vue3/dist/vue.global.js"></script><link rel"styleshee…