首页 > 数据库 >30秒了解Mysql

30秒了解Mysql

时间:2023-06-30 23:36:00浏览次数:46  
标签:引擎 存储 30 数据表 了解 Mysql 数据 主键

本篇主要是一文带大家大致了解什么是Mysql。本篇文章主要涉及的内容有:

  • 什么是数据库?
  • 数据库中的几个基本术语?
  • Mysql中InnoDB引擎支持的4种事务隔离级别
  • Mysql中如何使用ENUM?
  • Mysql中的存储引擎
  • mysql中char与varchar的区别?
  • 主键和候选键的区别?
  • blob和text的区别?
  • Mysql中的锁
  • 数据库三范式

什么是数据库?

数据库其实顾名思义就是存储数据的仓库,数据库可以存储上亿条数据,而数据的来源也很多,比如系统的消费记录,发送的消息记录等文本类型的数据,当然数据也可以是图形或者音乐等其他格式的数据。数据库是按照特定的数据结构来组织,存储和管理数据的仓库,实际上数据库的本质一样是将数据存储在磁盘中的本地文件中,只不过对外提供了API,所以不需要我们编写操作数据文件的指令。而关系型数据库使用最为广泛的莫过于Oracle、Mysql以及SQL Server。我这里是以Mysql作为基础进行讲解。

数据库中的几个基本术语

  • 数据库:存储数据的仓库,是一些关联表的集合。
  • 数据表:是数据的矩阵,可以理解为电子表格。
  • 数据表中的列:表示一个属性,比如用户名。
  • 数据表中的行:表示一行数据,比如用户表中指定一个用户的用户信息。
  • 主键:一个数据表只能够设置一个主键,可以唯一标识一条数据,但是可以多个列组合当成主键使用。

InnoDB引擎支持的4种事务隔离级别

InnoDB引擎支持的4种事务隔离级别分别是:读未提交、读已提交、可重复读、串行读。

  • 读未提交:允许脏读,可以读取其他session中未提交的脏数据。
  • 读已提交:不可读取其他session尚未提交的数据,只有其他session数据已提交才能读取到,为不重复读。
  • 可重复读:该级别下可重复读,InnoDB引擎默认采用可重复读,不允许读取还未提交的脏数据,但是可能存在InnoDB独有的幻读。
  • 串行读:该级别下隔离程度最高,事务只能一个接着一个串行执行,无法并发执行。每次串行读都需要获得表级共享锁,读写操作都会阻塞。

幻读

事务在插入一条已经经过检查不存在的记录,但是插入结果是数据已经存在,之前的检查操作如同幻影。Mysql默认采用可重复读级别,所以只可能出现幻读的情况。

Mysql中如何使用ENUM?

ENUM是一个字符串对象,可以通过ENUM限制字段的取值范围。如果插入数据时字段的取值并非可选值之一,则会空串或者NULL代替用户想要插入的值。比如用户性别我们在建表时可以使用ENUM限制取值范围只能为男或女,但是插入时是保密,这时候因为不输入性别的取值范围,所以性别字段会保存成空串或者NULL。当然其实很不建议在数据库使用ENUM限制取值范围,因为坑其实挺多的,比如ENUM通过角标取值,但是角标从1开始,因为0留给空串了,再或者在ENUM中0和"0"是不一样的,如果将0当做角标去操作由于ENUM角标从1开始会报错,如果使用"0"去操作,最后插入的是空串,因为角标0是预留给空串的。所以说在数据库层次不建议使用ENUM限制字段取值范围。

Mysql中的存储引擎

实际上Mysql支持的存储引擎很多,Mysql既可以支持NDB和InnoDB这种事务安全表的存储引擎,也可以支持MyISAM、MEMORY、CSV、BLACKHOLE、FEDERATED等非事务安全表的存储引擎。在Mysql中主要有四种存储引擎:InnoDB、MyISAM、MEMORY以及BLACKHOLE。InnoDB:Mysql5.6默认的存储引擎,支持外键约束和行级锁。如果数据操作除了插入和查询之外,还包括很多更新和删除操作,那么InnoDB存储引擎是比较合适的。InnoDB除了有效的降低由删除和更新导致的锁定,还可以确保事务的完整提交和回滚。

  • MyISAM:MyISAM不支持事务、外键,但是优势是访问速度快,不过由于表级别的锁定限制了它在读写负载方面的性能,因此它经常应用于只读或者以读为主的数据场景,并且场景需要对事务的完整性、并发性要求不高。
  • MEMORY:在内存中存储所有数据,Memory访问数据非常快,因为它的数据是存放在内存中的,并且默认使用HASH索引,但是一旦服务关闭,表中的数据就会丢失。
  • BLACKHOLE:黑洞存储引擎,只接收但却并不保存数据。对这种引擎的表的查询常常返回一个空集。可以应用于主从复制中的分发主库。

mysql中char与varchar的区别?

  • char:定长,一般用于固定长度的数据存储。比如手机号。存取效率高。存储容量最多为255个字符数。
  • varchar:不定长,可以节省空间。varchar需要在数据之前使用一到两个字节存储数据长度。最多情况下可以存储65532个字符数。

主键、超键和候选键的区别?

  • 主键:主键刚才其实已经讲过了,一个数据表只能够设置一个主键,可以唯一标识一条数据,但是可以多个列组合当成主键使用。
  • 超键:能唯一标识数据表的都可以作为超键。
  • 候选键:不含有多余属性的超键,也就是候选键去掉任何一个属性都不再属于超键。

我们举个简单的例子助于理解:

学生表中每个学生都有学号,性别,年龄,姓名,专业。显而易见的学号是作为主键存在的,在学生表中是不允许重复的,{学号},{学号,姓名},{学号,性别},{姓名,专业}这些组合都可以唯一标识一个学生的存在,所以这些组合都可以成为超键,但是{学号,姓名},{学号,性别}这两个组合去掉姓名或者性别只留下一个学号一样可以标识一个学生的存在,所以这两个组合不是候选键。

Mysql中的锁

Mysql锁机制其实相对其他数据库更为简单,MyISAM存储引擎以及MEMORY存储引擎支持表级锁,InnoDB存储引擎支持行级锁和表级锁,但是默认情况下是采用行级锁,也就是我们常说的共享锁和互斥锁。从锁的角度来说,表级锁适合查询为主,行级锁更适合有大量按索引条件并发更新数据。当然最重要的是一定要防止出现死锁现象。

数据库三范式

  • 第一范式:属性不可分割。
  • 第二范式:每个数据表必须拥有主键,并且唯一标识整个数据表。
  • 第三范式:消除数据冗余,信息只在一个数据表存储,不能存储在多张数据表。然后通过外键进行关联。

blob和text的区别?

  • text:text是非二进制字符串,并且需要指定字符集,并按照该字符集进行校验和排序。只能存储纯文本,可以看作是VARCHAR在长度不足时的扩展。
  • blob:blob存储的是二进制数据,因此无需字符集校验,blob除了存储文本信息外,由于二进制存储格式,所以还可以保存图片等信息,blob可以看作是VARBINARY在长度不足时的扩展。

相同点

  • 都不允许有默认值。
  • 保存或检索数据不删除尾部空格。
  • 索引在blob或者text上必须执行索引前缀的长度。

不同点

  • text大小写不敏感,而blob排序和比较以大小写敏感的方式执行。
  • text是非二进制字符串,blob存储的是二进制数据。
  • text需要指定字符集,blob无需字符集校验。
  • blob可以储存图片, text只能储存纯文本文件。

标签:引擎,存储,30,数据表,了解,Mysql,数据,主键
From: https://blog.51cto.com/u_16173732/6595595

相关文章

  • 30秒了解Mysql
    本篇主要是一文带大家大致了解什么是Mysql。本篇文章主要涉及的内容有:什么是数据库?数据库中的几个基本术语?Mysql中InnoDB引擎支持的4种事务隔离级别Mysql中如何使用ENUM?Mysql中的存储引擎mysql中char与varchar的区别?主键和候选键的区别?blob和text的区别?Mysql中的锁数据......
  • C++面试八股文:std::vector了解吗?
    某日二师兄参加XXX科技公司的C++工程师开发岗位第23面:面试官:vector了解吗?二师兄:嗯,用过。面试官:那你知道vector底层是如何实现的吗?二师兄:vector底层使用动态数组来存储元素对象,同时使用size和capacity记录当前元素的数量和当前动态数组的容量。如果持续的push_back(empl......
  • mysql5.7.13 使用笔记
    社区版下载地址:https://dev.mysql.com/downloads/mysql/ 安装:http://www.linuxidc.com/Linux/2016-04/130414.htm     (配置文件my.cnf在网页的最下面)更新yum源:tar解压失败:http://alany.blog.51cto.com/6125308/1422299###############################################......
  • 一篇带你了解JVM内存模型和垃圾回收机制
    JVM内存模型根据Java虚拟机规范,Java数据区域分为五大数据区域。 JVM的结构其中方法区和堆是所有线程共享的,虚拟机栈、本地方法栈和程序计数器则为线程私有的。有的博客称方法区是永久代,那是因为前者是JVM的规范,而后者则是JVM规范的一种实现,并且只有HotSpot才有永久代,JDK8......
  • 数据结构和算法-2023.06.30
    动态链表的生成和初衷......
  • 每日总结2023年6月30日
    今日学习:操作系统:管理软硬件以及数据,控制程序运行,人机之间的接口,应用软件和硬件之间的接口(进程管理、存储管理、文件管理、作业管理、设备管理);进程的状态:三态模型(运行、就绪、等待)、五态模型(运行、静止就绪、活跃就绪、静止阻塞、活跃阻塞);前趋图:可以直观看到哪些任务可以同时进行,......
  • MySQL入门使用,以及创建账号和权限
    当客户端连接MySQL服务器时,必须提供有效的身份认证,例如用户名和密码。当用户执行任何数据库操作时,服务器将会验证用户是否具有相应的权限,例如查询表需要SELECT权限,删除对象需要DROP权限。为了方便用户权限的管理,MySQL8.0提供了角色的功能。角色(Role)是一组权限的集合。管理......
  • 云服务器centos7安装mysql8
    1.先去官网准备好几个安装包: 2.tar-xvfmysql-8.0.26-1.el8.x86_64.rpm-bundle.tar 3.可能需要卸载系统中自带的mariadbrpm-qa|grepmariadb rpm-e--nodepsmariadb-connector-c-3.1.11-2.oc8.1.x86_64rpm-e--nodepsmariadb-connector-c-config-3.1.11-2.oc8.1.......
  • MySQL学习3--联表查询
    1、常规联表查询创建两张数据库表如下:mysql>select*fromdept;+----+-----------+|id|deptName|+----+-----------+|3|教学部|+----+-----------+1rowinset(0.00sec)mysql>select*fromemployee;+----+---------+--------+------------------......
  • 2023.6.30
    Weekideal和Java编译环境的安装周一MarkDown语法周二标题用n个#+空格+标题为n级标题字体斜体在字体两旁各加一个* 黑体在字体两边各加两个* 斜体和黑体在字体两边各加三个*** 在字体上划线在字体两边各加两个~~引用在开头加上>+空格分割线三......