返回链接 网站惩罚检查 错误检查,wordpress适合做什么,wordpress模板 国内,广州网站制作开发公司哪家好目录 一、数据库存储引擎#xff08;了解#xff09;1.了解MySQL体系结构2.存储引擎#xff08;了解#xff09;2.1.存储引擎的介绍2.2.存储引擎分类2.3.如何选择引擎#xff1f; 3.事务控制语言(TCL)事务的四个特性(ACID) 二、数据类型#xff08;了解#xff09;1.整型… 目录 一、数据库存储引擎了解1.了解MySQL体系结构2.存储引擎了解2.1.存储引擎的介绍2.2.存储引擎分类2.3.如何选择引擎 3.事务控制语言(TCL)事务的四个特性(ACID) 二、数据类型了解1.整型常用的是int2.字符串类型3.枚举类型 enum enumeration4.日期类型 一、数据库存储引擎了解
1.了解MySQL体系结构 如上图所示mysql结构总共分为4个层次连接层/服务层/引擎层/存储层
连接层最上层是一些客户端和链接服务主要完成一些类似于连接处理、授权认证、及相关的安全方案。服务器也会为安全接入的每个客户端验证它所具有的操作权限服务层第二层架构主要完成大多数的MySQL的核心服务功能如SQL接口并完成缓存的查询SQL的分析和优化部分内置函数的执行。所有跨存储引擎的功能也在这一层实现如过程、函数等。引擎层存储引擎真正负责了MySQL中数据的存储和提取服务器通过API和存储引擎进行通信。不同的存储引擎具有不同的功能。这样我们可以根据自己的需要。来选取合适的存储引擎存储层主要是将数据存储在文件系统之上并完成存储引擎的交互。
2.存储引擎了解
2.1.存储引擎的介绍 MySQL的存储引擎指MySQL中管理数据的方式。 存储引擎是基于表的而不是基于库的所以存储引擎也可被称为表类型。 数据库存储引擎是数据库底层软件组织数据库管理系统DBMS使用数据引擎进行创建、查询、更新和删除数据。 不同的存储引擎提供不同的存储机制、索引、锁定等功能使用不同的存储引擎还可以 获得特定的功能。 现在许多不同的数据库管理系统都支持多种不同的数据引擎。MySQL数据库的核心就是存储引擎。 文件系统回顾 操作系统组织和存取数据的一种机制。文件系统是一种软件。 文件系统类型ext2 3 4 xfs 不管使用什么文件系统数据内容不会变化区别是不同的文件系统直接存储空间、大小、速度都不同 MySQL引擎可以理解为 MySQL的“文件系统”只不过功能更加强大。 MySQL引擎功能 除了可以提供基本的存取功能还有更多功能事务功能、锁定、备份和恢复、优化以及特殊功能。 2.2.存储引擎分类
MySQL存储引擎介绍
InnoDB存储引擎默认引擎最常用的。 InnoDB是事务型数据库的首选引擎支持事务ACID支持行锁定和外键InnoDB是默认的MySQL引擎 InnoDB特点支持事务处理、支持外键、支持崩溃修复和并发控制。如果需要对事务的完整性要求比较高比如银行要求实现并发控制比如12306售票那选择InnoDB有很大的优势。如果需要频繁的更新、删除操作的数据库也可以选择InnoDB因为它支持事务的提交commit和回滚rollback。 MyISAM存储引擎了解 MyISAM基于ISAM存储引擎并对其进行扩展。它是在Web、数据存储和其他应用环境下最常使用的存储引擎之一。MyISAM拥有较高的插入、查询速度但不支持事务。 MyISAM特点 插入数据快空间和内存使用比较低。如果表主要是用于插入新记录和读出记录那么选择MyISAM能实现处理高效率。如果应用程序对数据的完整性、并发性要求比较低也可以使用。 MEMORY内存型引擎(了解) MEMORY存储引擎将表中的数据存储到内存中为查询和引用其他表数据提供了快速访问。 MEMORY特点 所有的数据都在内存中数据的处理速度快但是安全性不高因为数据极其容易发生丢失服务器重启后数据就丢失了。如果需要很快的读写速度对数据的安全性要求较低可以选择MEMOEY。但是它对表的大小有要求不能建立太大的表。所以这类数据库引擎只使用在相对较小的数据库表中。常见的应用场景有需要高速缓存的表、经常被读但不被写的临时表 外键(foreign key)链接了两个表确保数据的关系一致性。外键约束规定一个表中的数据必须匹配另一个表中的数据。 行锁定(Row locking)行锁定允许多个事务同时访问表中的不同行只有访问同一行时才需要排队。这可以在更新数据时降低锁定的范围提高并发效率。 事务所有操作要么全部完成要么全部不完成。 2.3.如何选择引擎
具体情况具体分析主要看业务场景每个引擎适用不同的业务场景 如果要提供提交、回滚、并要求实现并发控制InnoDB是一个好的选择 如果数据表主要用来插入和查询记录则MyISAM引擎能提供较高的处理效率 如果只是临时存放数据数据量不大并且不需要较高的数据安全性可以选择将数据保存在内存中的Memory引擎 使用哪一种引擎需要灵活选择一个数据库中多张表可以使用不同引擎以满足各种性能和实际需求使用合适的存储引擎将会提高整个数据库的性能。
存储引擎查看
mysql show engines;
或者 show engines\G; 也可以 \G是让结果更加人性化的显示从而更易阅读看你的mysql当前默认的存储引擎
mysql show variables like %storage_engine%;
------------------------------------------
| Variable_name | Value |
------------------------------------------
| default_storage_engine | InnoDB |
| default_tmp_storage_engine | InnoDB |
| disabled_storage_engines | |
| internal_tmp_disk_storage_engine | InnoDB |
------------------------------------------
4 rows in set (0.00 sec)
如何查看Mysql服务器上的版本
mysql select version();
-----------
| version() |
-----------
| 5.7.42 |
-----------
1 row in set (0.00 sec)扩展了解知识 什么是外键外键的主要作用是保持数据的一致性、完整性。 什么是索引索引相当于书中的目录可以提高数据检索的效率降低数据库的IO。MySQL在300万条记录左右性能开始逐渐下降虽然官方文档说500~800w记录所以大数据量建立索引是非常有必要的 什么是行锁定与锁表可以将一张表单独锁定和可以单独锁定一行的记录。为了防止你在操作的同时也有别人在操作。 什么是事务事务是有一步或者几步数据库的操作。这系列操作要么全部执行要么全部放弃执行。
3.事务控制语言(TCL)
事务控制语言 Transation Control Language是一组能对事务进行控制的SQL语句。 有时可能需要使用 DML 进行批量数据的删除修改增加。DML数据操作语言用于操作数据Insert、Select等 比如在一个员工系统中想删除一个人的信息。除了删除这个人的基本信息外还应该删除与此人有关的其他信息如邮箱地址等等。 如
--BEGIN;开启一个新的事务INSERT INTO …;插入操作SAVEPOINT point1;设置事务的第一个保存点UPDATE … ;更新操作SAVEPOINT point2;设置事务的第二个保存点DELETE FROM … ;删除操作ROLLBACK TO point1;回滚到 point1 保存点UPDATE … ;更新操作COMMIT;提交事务
那么从开始执行到结束就会构成一个事务。 对于事务要保证事务的完整性。要么全部成功要么全部不成功则将操作撤回。
事务的四个特性(ACID) 原子性事务是应用中最小的执行单位就如原子是自然界最小颗粒事务要么成功要么不成功。具有不可再分的特征。事务是应用中不可再分的最小执行体。最小了不可再分了 一致性事务执行的结果必须使数据库从一个一致性状态变到另一个一致性状态比如转账前账号A和账号B的钱的总数为10000转账后账号A和账号B的前的总数应该还是10000当数据库中只包含事务成功提交的结果时数据库处于一致性状态。一致性是通过原子性来保证的。 隔离性并发执行的事务之间不能互相影响。当涉及到多用户操作同一张表时数据库会为每一个用户开启一个事务。各个事务的执行互不干扰任意一个事务的内部操作对其他并发的事务都是隔离的。也就是说并发执行的事务之间不能看到对方的中间状态并发执行的事务之间不相互影响。说白了就是你做你的我做我的 持续性持续性也称为持久性指事务一旦提交对数据所做的任何改变都要记录到永久存储器中通常是保存进物理数据库。即使数据库崩溃了我们也要保证事务的完整性。即一个事务一旦提交它对数据库中数据的改变就是永久性的即便发生系统故障也不会丢失。 二、数据类型了解
在MySQL数据库管理系统中可以通过存储引擎来决定表的类型。 同时MySQL数据库管理系统也提供了数据类型决定表存储数据的类型。 常见的数据类型
1.整型常用的是int
作用用于存储用户的年龄、游戏的Level、经验值等。 分类tinyint smallint mediumint int bigint 取值范围
MySQL数据类型最小值最大值tinyint(n)0255smallint(n)-32,76832,767mediumint(n)-83886088388607int(n)-2,147,483,6482,147,483,647bigint(n)-9,223,372,036,854,775,8089,223,372,036,854,7 结论
当整数值超过 int 数据类型支持的范围时就可以采用 bigint。在 MySQL 中int 数据类型是主要的整数的数据类型。
mysql create table t4 (id int);
Query OK, 0 rows affected (0.00 sec)
mysql desc t4;
-------------------------------------------
| Field | Type | Null | Key | Default | Extra |
-------------------------------------------
| id | int(11) | YES | | NULL | |
-------------------------------------------
1 row in set (0.00 sec)
mysql insert into t4 values(1);
Query OK, 1 row affected (0.01 sec)
mysql select * from t4;
------
| id |
------
| 1 |
------
1 row in set (0.00 sec)2.字符串类型
作用用于存储用户的姓名、爱好、电话邮箱地址发布的文章等 字符类型 char varchar char表示【定长字符串】长度是固定的如果插入数据的长度【小于】char的固定长度时则用空格填充因为长度固定所以存取速度要比varchar快很多甚至能快50%但正因为其长度固定所以会占据多余的空间。 char10根据10来限制一定会占10个小于10个用空格补齐。 列的长度是固定在为创建表时声明的长度0 ~ 255 即创建表时在char类型后面使用小括号()指定最大长度。比如char(10)、char(100)等。 该长度表示char能存储的最大字符数。它是固定的不能变化。 允许的长度从0到255个字符。也就是说char(0)到 char(255)都是允许的。 varchar表示【可变长字符串】长度是可变的插入的数据是多长就按照多长来存储varchar在存取方面与char相反它存取慢因为长度不固定但正因如此不占据多余的空间。 varchar(10) 根据实际字符串长度占空间最多10个 列中的值为可变长字符串长度为0 ~ 65535 即varchar 列中的值是可变长度的字符串其长度可以在 0(空字符串)到 65535(最长字符串)个字符之间。
结合性能角度char更快节省磁盘空间角度varchar更小具体情况还需具体来设计数据库才是妥当的做法。 总结 1、经常变化的字段用varchar 2、知道固定长度的用char 3、超过255字符的只能用varchar或者text 4、能用varchar的地方不用text文本格式 案例
mysql create table t8(c char(5),v varchar(12));
Query OK, 0 rows affected (0.42 sec)mysql insert into t8 values(abcde,abcdef);
Query OK, 1 row affected (0.38 sec)
mysql insert into t8 values(abc,abcdef); #char可以少于规定长度。
Query OK, 1 row affected (0.05 sec)
mysql insert into t8 values(abc777,abcdef7); #char不能大于规定的长度。
ERROR 1406 (22001): Data too long for column c at row 13.枚举类型 enum enumeration
ENUM 是一个字符串对象值为表创建时列规定中枚举的一列值有限制的时候用枚举。其语法格式字段名 ENUM( ‘值1’, ‘值1’, …, ‘值n’ ) 案例
mysql create table t101(name enum(tom,jim)); #只能从tom,jim两个里面2选其1
mysql INSERT INTO t101 VALUES(tom); #插入数据
Query OK, 1 row affected (0.00 sec)4.日期类型
时间和日期类型测试year、date、time、datetime、timestamp 作用用于存储用户的注册时间文章的发布时间文章的更新时间员工的入职时间等 注意事项: 插入年份时尽量使用4位值 插入两位年份时69以20开头比如65, 结果2065 70以19开头比如82结果1982 案例
#创建表格
mysql create table test_time(d date,t time,dt datetime);
Query OK, 0 rows affected (0.03 sec)
#查看表结构
mysql desc test_time;
--------------------------------------------
| Field | Type | Null | Key | Default | Extra |
--------------------------------------------
| d | date | YES | | NULL | |
| t | time | YES | | NULL | |
| dt | datetime | YES | | NULL | |
--------------------------------------------
3 rows in set (0.01 sec)
#插入数据
mysql insert into test_time values(now(),now(),now());
Query OK, 1 row affected, 1 warning (0.02 sec)
#查询数据
mysql select * from test_time;
-------------------------------------------
| d | t | dt |
-------------------------------------------
| 2023-07-04 | 03:26:01 | 2023-07-04 03:26:01 |
-------------------------------------------
1 row in set (0.00 sec)
#测试年新建一个表格指定字段是born_yesr数据类型是year
mysql create table t3(born_year year);
Query OK, 0 rows affected (0.40 sec)
#查看表结构
mysql desc t3;
-----------------------------------------------
| Field | Type | Null | Key | Default | Extra |
-----------------------------------------------
| born_year | year(4) | YES | | NULL | |
-----------------------------------------------
1 row in set (0.00 sec)
#插入数据
mysql insert into t3 values (12),(80);
Query OK, 2 rows affected (0.06 sec)
Records: 2 Duplicates: 0 Warnings: 0
mysql select * from t3;
-----------
| born_year |
-----------
| 2012 |
| 1980 |
-----------
2 rows in set (0.00 sec)
#插入数据
mysql insert into t3 values (2019),(81);
Query OK, 2 rows affected (0.00 sec)
Records: 2 Duplicates: 0 Warnings: 0
mysql select * from t3;
-----------
| born_year |
-----------
| 2012 |
| 1980 |
| 2019 |
| 1981 |
-----------
4 rows in set (0.00 sec)