目录
2.2退出命令: exit quit(需要重新连接MySQL)
1.什么是数据库
1.1数据库相关概念
DB:数据库:
即存储数据的“仓库”,其本质一个文件系统,它保存了一系列有组织的数据。
DBMS:数据库管理系统:
是一种操纵和管理数据库的大型软件,用于建立、使用和维护数据库,对数据库进行统一管理和控制。用户通过数据库管理系统访问数据库表内的数据。
SQL:结构化查询语言
sql是一种结构化查询语言,用于访问和处理数据库的标准计算机语言。(专门用来与数据库通信的语言)
常见数据库对象:
2.MySQL的使用:
MYSQL体系结构:
以管理员的身份打开命令窗口
net start MySQL80 打开MySQL服务
net stop MySQL80 关闭MySQL服务
2.1连接MySQL:
2.2退出命令: exit quit(需要重新连接MySQL)
2.2.1查看MySQL里的所有数据库:
information_schema:MySQL自带的数据库,主要保存MySQL的系统信息。
mysql:运行需要的系统信息。
performance_schema:监控mysql的性能。
sys:展示mysql技术性能。
2.3创建自己的数据库:
create database 名称 (名称唯一)
2.3.1使用创建的数据库:
2.3.2查看创建表信息:
show cerate table student\G(返回数据类型不同)也可查看创建表信息。
一条数据的存储过程:创建数据库、确认字段、创建数据库表、插入数据。
2.4MySQL中的数据类型:
1.整数类型数据:MySQL 主要提供的整数类型有 TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT,其属性字段可以添加 AUTO_INCREMENT 自增约束条件。
2.小数类型数据:MySQL中使用浮点数和定点数来表示小数。浮点类型有单精度浮点数(FLOAT)和双精度浮点数(DOUBLE);定点类型只有一种,就是 DECIMAL。
3.时间和日期型数据:MySQL中有多处表示日期的数据类型:YEAR、TIME、DATE、DTAETIME、IMESTAMP。当只记录年信息的时候,可以只使用 YEAR 类型。每一个类型都有合法的取值范围,当指定不合法的值时,系统将“零”值插入数据库中。(时间相关的数据可以加引号' ',也可以不加)
4.字符串型数据: 字符串类型用来存储字符串数据,还能存储图片和声音的二进制数据。字符串可以区分或者不区分大小写的串比较,还可以进行正则表达式的匹配查找。MySQL中的字符串类型有 CHAR、VARCHAR、TINYTEXT、TEXT、MEDIUMTEXT、LONGTEXT、ENUM、SET 等。
5.二进制型数据:二进制数据适合存储各种非文本格式的数据,例如图像、音频和视频等文件,因为这些文件通常很大且不易于通过文本形式进行存储和处理。同时,二进制数据可以通过编程来处理和解析,使得可以轻松地将它们嵌入到各种应用程序中。 MySQL 中的二进制字符串有 BIT、BINARY、VARBINARY、TINYBLOB、BLOB、MEDIUMBLOB 和 LONGBLOB。
3.创建和管理数据库:
3.1删除所创建的数据库:
drop database 名称
drop database if exists 名称(安全命令:如果存在就删除)
3.3.1创建一个teacher表:
3.3.2查看创建表结构:
1.DESCRIBE 表名; 2. SHOW CREATE TABLE 表名\G
使用SHOW CREATE TABLE语句不仅可以查看表创建的详细语句,还可以查看存储引擎和字符编码。
3.3.3修改表:
追加一个列:ADD
ALTER TABLE 表名 ADD 字段名 字段类型
修改一个字段的长度、类型、默认值:MODIFY
ALTER TABLE 表名 MODIFY 字段名 字段类型
删除:DROP
重命名:CHANGE
3.3.4表的重命名:
RENAME
删除表:DROP TABLE IF EXISTS 数据表(表里所有数据全部消失不可恢复)
清空表:
TRUNCATE TABLE 表名;
DELETE FROM 表名;
区别:delete有回滚空间,而truncate没有。
4.基本的查询语言:
4.1SQL分类:
DDL(数据定义语言),这些语句定义了不同的数据库、表、视图、索引等数据库对象,还可以用来创建、删除、修改数据库和数据表结构。
主要的语句关键字包括:CREATRE、DROP、ALTER等。
DML(数据操作语言),用于添加、删除、更新、和查询数据库记录,并检查数据完整性。
主要的语句关键字包括:INSERT、DELETER、UPDATE、SELECT等。
DCL(数据控制语言),用于定义数据库、表、字段、用户的访问权限和安全级别。
主要的语句关键字包括:GRANT、REVOKE、COMMIT、ROLLBACK、SAVEPOINT等。
4.2SQL语言的规则与规范:
SQL可以写在一行或多行。为了提高可读性,各子句分行写,必要时使用缩进。
每条命令以; \g 或\G结束
关键字不能缩写也不能分行
4.3注释:
单行注释:# 注释文字(MySQL特有的方式) 或 -- 注释文(--后面必须加空格)
多行注释:/* 注释文字 */
4.4数据导入指令:
在命令客户端登录mysql,使用source指令导入。
mysql> source 文件所在位置
5.基本的SELECT语句:
5.1SELECT...FROM:
5.2列的别名:
重命名一个列
紧跟列名,也可以在列名和别名之间加入关键字AS,别名使用双引号,以便在别名中包含空格或特殊字符并区分大小写。(AS是可以省略的)
SELECT 列名,原名称 AS 别名 FROM 表名;
5.3去除重复行:
默认情况下,查询会返回全部行。包括重复行。
SELECT DISTINCT 列名 FROM 表名;
5.4着重号:
SELECT *FROM order;会报错因为MySQL中有自己的order
正确的表示:SELECT *FROM `order`;
5.5过滤数据:
SELECT 字段1,字段2
FROM 表名
WHERE 过滤条件
如图过滤为c_id>500
5.6显示表结构:
DESCRIBE或DESC命令,显示表结构。
Field:表示字段名称。
Type:表示字段类型。
Null:表示该列是否可以存储Null值。
Key:表示该列是否已编制索引。
Default:表示该列是否有默认值。
Extra:表示可以获取的与给定列有关的附加信息。
6.相关运算符:
6.1算术运算符:
主要为:加(+)、减(-)、乘(*)、除(/)和取模(%)
6.2比较运算符:
等于(=):
两个均为NULL时,返回值为1,不为返回0。
不等于(<>和!=)不相等返回1,相等则为0。
6.3.逻辑运算符:
6.4.运算符优先级:
7.DML语言:
7.1添加数据(使用VALUES语句添加):
1.按照默认顺序插入:
2.为指定的字段插入数据:
3.指定字段批量插入:
4.所有数据批量插入:
7.2添加数据(将查询结果插入到表中):
7.3更新数据:(UPDATE)
7.4删除数据:(DELETE)
7.5计算列:
某一列的值是通过别的列计算得来的。
8.索引:
是一种特殊文件,包含对数据表里所有记录的引用指针。类似于书的目录。
MYSQL的索引是在存储引擎实现的,不同存储引擎有不同的索引结构,主要包含:
8.1.B-Tree
B-Tree 是一种自平衡树的数据结构,可保持数据的排序并允许在对数时间复杂度内搜索数据、插入数据和删除数据。B-Tree索引广泛应用于MySQL、PostgreSQL等关系数据库中。
查询方法如下:
- 数据库从树的根部开始,将搜索关键字与当前节点的关键字的值进行比较。
- 如果相等,则数据库返回该记录。
- 否则,数据库根据比较结果确定下一步要搜索的子树。
8.2.Hash
哈希索引是另一种流行的索引算法,用于加速查询。哈希索引使用哈希函数将键映射到索引位置。此算法对于精确匹配查询最有用,例如根据主键值搜索特定记录。哈希索引通常用于内存数据库,例如 Redis。
查询方法如下:
- 数据库计算查询条件的哈希值
- 在哈希表中查找对应的哈希桶
- 然后数据库检索指向表中具有相应哈希值的行的指针
- 使用这些指针从表中检索实际行
创建索引:
create INDEX index_name on table_name (
index_clo_name,...
);
查看索引:
SHOW INDEX FROM table_name;
删除索引:
DROP INDEX index_name on table_name;
8.3索引的缺点:
索引并不是越多越好,过多的索引会占用大量的存储空间,并且会影响数据库的性能。因此,在创建索引时,需要在查询效率和存储空间之间做出平衡。同时,应该尽量避免创建不必要的索引,只在必要的情况下创建索引。
查询sql的执行频率:
8.4.慢日志查询:
慢日志查询参数:
8.5.profiling:
-- 是否支持profiling
SELECT @@have_profiling
9.explain:
Explain是MySQL中用于查看查询执行计划的命令。通过Explain,我们可以了解MySQL如何使用索引来执行查询。以下是Explain命令的输出中一些关键列的解释:
9.1 id:
在SQL中,执行的顺序是从大到小,遵循以下规则:
1. 对于具有相同ID的记录,执行顺序是从上到下;
2. 如果是一个子查询,ID的序号会递增,优先级与ID值成正比,因此ID值越大的记录越早被执行;
3. 如果多个具有相同ID的记录存在,可以认为它们是同一个组,按照从上到下的顺序依次执行。同时,在各个组中,ID值越大的记录越具有优先级,优先级越高,执行越早。
9.2 select_type:
9.3 table:
table列显示的是访问的哪个表。一般情况下,table列相当简单:它就是那个表,或者该表的别名。但是,如果FROM子句中有子查询或UNION操作,table列就会变得更加复杂。
1.在FROM子句中有子查询时,table列是<derivedN>,其中N是子查询的id
2.当有UNION时,UNION RESULT的table列中包含一个参与UNION的id列表,如<union1,2>
9.4 type:
表示MySQL在表中找到所需行的方式,又称“访问类型”,type扫描方式由快到慢:system > const > eq_ref > ref > range > index > all。
9.5 possible_keys:
显示了MySQL可以使用的索引选项,指示了可以在表中查找记录的索引。如果查询涉及到的列上有索引,则该索引将显示出来,但并不意味着会被查询使用。
9.6 key:
显示MySQL实际决定使用的键(索引)。
9.7 key_len:
计算查询中使用的索引长度(显示值为该列最大可能长度,非实际使用长度)可以通过索引列在表示索引中的字节数来进行。
9.8 ref:
显示了之前的表在key列记录的索引中查找值所用的列或常量。
9.9 row:
表示估计为了找到所需的行而要读取的行数。这个值越小越好。
9-10 filtered:
针对表里符合某个条件的记录数的百分比所做的一个悲观估算。如果你把rows列和这个百分比相乘,就能看到MySQL估算它将和查询计划里面一个表关联的行数。
9-11 extra:
10.事务:
事务是逻辑上的一组数据库操作,要么都执行,要么都不执行。
10.1四大特性:
1.原子性(Atomicity):
是指事务包含的所有操作要么全部成功,要么全部失败回滚。因此事务的操作如果成功就必须完全应用到数据库,如果操作失败不能对数据库有任何影响。
2.一致性(Consistency):
一致性要求事务执行前后数据库的状态保持一致。事务执行过程中可能涉及多个操作,这些操作的结果必须满足数据库的约束和规则。
3.隔离性(Isolation):
隔离性是指当多个用户并发访问数据库时,比如操作同一张表时,数据库为每个用户开启的事务,不能被其他事务的操作干扰,多个并发事务要互相隔离。即要达到一种效果:对于任意两个并发的事务T1和T2,在事务T1看来,T2要么在T1开始之前就已经结束,要么在T1结束之后开始,这样每个事务都感觉不到有其他的事务在并发执行。
4.持久性(Durability):
持久性是指一个事务一旦被提交了,那么对数据库中的数据的改变是永久的,即便是在数据库系统中遇到故障的情况下也不会丢失提交事务的操作。
10.2隔离级别:
-
未提交读(READ UNCOMMITTED)
-
提交读 (READ COMMITTED)
-
可重复读 (REPEATABLE READ)
-
串行化 (SERIALIZABLE)
查看当前事务隔离级别:
SELECT @@SESSION.transaction_isolation;
更改隔离级别:
SET SESSION TRANSACTION ISOLATION LEVEL 隔离级别名称
10.3事务原理:
原子性、一致性、持久化是由innoDB中的两份日志来保证的,一份是redo log日志(重做日志),一份是undo log日志(回滚日志)。
隔离性是通过数据库的锁加上MVCC来保证的。
11.视图:
1.概念:
是一种虚拟存在的表,本身不具有数据占用很少的内存空间。
2.优点:
简化SQL操作、保护数据给用户授予表的特定部分的访问权限、更改数据格式和表示。
3.定义视图:
create view 视图名称 as select 列名,列名 from 表名;
删除视图:
drop view 视图名称;