首页 > 数据库 >MySQL 基础内容

MySQL 基础内容

时间:2023-05-15 12:12:39浏览次数:35  
标签:JOIN name Person 基础 查询 索引 内容 MySQL id

事务

Mysql 的事务是由一系列的 SQL 指令所构成的逻辑处理单元,这些指令要么全部执行,要么全部不执行,可以使用 COMMIT 或 ROLLBACK 指令来结束一个事务。

Mysql 中事务的 ACID 特性:

  1. 原子性(Atomicity),事务中的所有操作要么全部执行成功,要么全部回滚。
  2. 一致性(Consistency),事务必须使所有的数据都保持一致的状态。
  3. 隔离性(Isolation),事务执行时其他事务是不知道的,在并发环境中,同一时间只有一个事务被允许对某一数据进行修改。
  4. 持久性(Durability),事务一旦提交,它对数据库中数据的改动就应该是永久性的。即使系统崩溃等故障情况,数据也不应该丢失。

在 Mysql 中,使用 BEGIN、COMMIT 和 ROLLBACK 开始和结束一个事务,事务的执行过程中如果发生错误,可以使用 ROLLBACK 将操作回滚到事务开始之前的原始状态。如果事务执行成功,可以使用 COMMIT 将操作修改的数据永久性的存储在数据库中。

视图

就是把一次查询的结果当作临时的表, 简化复杂的查询
举一个例子,假设我们有一个students表,表格结构如下:

Field Type Null Key Default Extra
id int(11) NO PRI NULL auto_increment
name varchar(255) NO NULL
age int(11) NO NULL
gender varchar(255) NO NULL
class varchar(255) NO NULL
create_at timestamp NO NULL
update_at timestamp NO NULL

我们可以通过以下 SQL 语句创建一个根据条件查询年龄大于等于18岁的学生的视图:

CREATE VIEW adult_students AS 
  SELECT id, name, age, gender, class 
  FROM students 
  WHERE age >= 18;

现在我们可以像查询表格一样查询这个视图,例如执行以下查询语句:

SELECT * FROM adult_students;

索引

Mysql的索引主要有以下几种:

  1. 唯一索引(Unique Index): 限制该列的数据必须唯一,可以是NULL值,一个表可以有多个唯一索引。
  2. 主键索引(Primary Key Index): 主键索引是一种特殊的唯一索引,不允许有NULL值,每个表只能有一个主键索引。
  3. 普通索引(Normal Index):普通索引没有任何限制,一个表可以有多个普通索引。
  4. 全文索引(Fulltext Index):全文索引专门用来创建全文索引,所谓全文索引就是对CHAR、VARCHAR以及TEXT字段进行全文检索。

索引的作用是提高查询效率。建立索引后,查询语句的执行流程变成先在索引树中搜索对应的值,然后再到数据表中查询对应的数据。

举例来说,假设有一张名为student的表,里面有学生的信息,包括姓名、年龄、性别等。如果要查询所有年龄为18岁的学生,就可以在age字段上建立一个普通索引。如果没有建立索引会从表中所有数据中根据条件查找年龄为18岁的学生,这个操作会比较耗时。

建立索引的缺点是会增加插入、修改、删除操作的时间,因为每次对数据进行修改都要维护一次索引。

综上所述,建立索引可以提高查询效率,但需要权衡插入、修改、删除效率的损失。根据实际情况,可以针对不同的查询场景建立不同的索引,以提高查询性能。

索引会建立单独的表, 索引值对应原始数据行. 减少查询的数据读取开销, 提高查询效率.

外键

外键是关系型数据库中的一种重要的约束。它用来建立两个表之间的链接,并保证参照完整性。在 MySQL 中,可以使用 FOREIGN KEY 关键字来创建外键。

下面是一个 MySQL 中的外键举例:

假设有两个表:Person 和 Order,每个人可以对应多个订单,每个订单只能由一个人创建。Person 表中有一个主键 person_id(人员 ID),而 Order 表中有一个外键 person_id,它指向 Person 表中的 person_id。

创建 Person 表:

CREATE TABLE Person (
  person_id INT PRIMARY KEY,
  name VARCHAR(20),
  age INT
);

创建 Order 表:

CREATE TABLE Order (
  order_id INT PRIMARY KEY,
  person_id INT,
  product_name VARCHAR(30),
  FOREIGN KEY (person_id) REFERENCES Person(person_id)
);

通过这种方式,我们可以定义一个 Person 和 Order 之间的联系,并保证参照完整性。当尝试删除 Person 表中具有关联的行时,就会受到限制。

外键不仅可以保证参照完整性,还可以优化查询效率。比如在上述例子中,如果不建立外键约束,每次查询 Order 表时都需要和 Person 表进行 join 操作,而建立外键后,查询效率可以提高。

JOIN 和 UNION

MySQL的JOIN和UNION是用来查询数据库中的数据的常用语句。JOIN用于将多个表中的数据链接在一起,而UNION则可以将两个或多个查询的结果合并在一起。

JOIN可以分为以下几种类型:

  1. INNER JOIN(内连接):它只返回两张表中共有的值,即两张表都存在的行。
  2. LEFT JOIN(左连接):它返回包括左表中所有的行以及右表中存在的行。
  3. RIGHT JOIN(右连接):它返回包括右表中所有的行以及左表中存在的行。
  4. FULL OUTER JOIN(全连接):它返回所有符合条件的行,即包括两个表中所有的行。

UNION将两个或多个SELECT语句的结果集合并在一起,合并的结果中包括的行数等于各个查询的结果集中包含的行数之和。需要注意的是,UNION仅能够使用在每个SELECT语句的返回列是相互兼容的情况下。

举一个简单的例子,如果有服务表和客户表,其中服务表包含服务员的姓名和服务的时间,客户表包含客户的姓名和电话号码。如果需要查询所有的服务信息和客户信息,可以使用以下SQL语句:

SELECT s.name AS server_name, s.service_time, c.name AS customer_name, c.phone_number
FROM server AS s 
LEFT JOIN customer AS c
ON s.name = c.name;

使用LEFT JOIN是因为服务表中的服务员都需要列出,但不一定每个服务记录都对应着客户的记录。如果不使用JOIN,查询结果将由两个独立的结果集组成,需要手动合并结果。

如果没有使用索引,则查询将需要扫描整个表,而使用了索引,则可以更快地定位到需要的数据,提高查询的速度和效率。

标签:JOIN,name,Person,基础,查询,索引,内容,MySQL,id
From: https://www.cnblogs.com/livebz/p/17401446.html

相关文章

  • MySQL的varchar存储原理:InnoDB记录存储结构
    摘要:varchar(M)能存多少个字符,为什么提示最大16383?innodb怎么知道varchar真正有多长?记录为NULL,innodb如何处理?某个列数据占用的字节数非常多怎么办?影响每行实际可用空间的因素有哪些?本篇围绕innodb默认行格式dynamic来说说原理。本文分享自华为云社区《MySQL的varchar水真的太深......
  • windows mysql安装
      [mysqld]#设置3306端口port=3306#设置mysql的安装目录basedir=D:\lvse\mysql-5.7.41-winx64#设置mysql数据库的数据的存放目录datadir=D:\lvse\mysql-5.7.41-winx64\data#允许最大连接数max_connections=200#允许连接失败的次数。这是为了防止有人从该主机试......
  • Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class
    报错代码Loadingclass`com.mysql.jdbc.Driver'.Thisisdeprecated.Thenewdriverclassis`com.mysql.cj.jdbc.Driver'.ThedriverisautomaticallyregisteredviatheSPIandmanualloadingofthedriverclassisgenerallyunnecessary.Exceptionin......
  • mysql将一个表的数据导入到另一个表
     将一个表的数据插入到另外一个表中的几种情况如下:1.如果2张表的字段一致,并且希望插入全部数据,可以用这种方法:   INSERT INTO目标表SELECT*FROM来源表;   例如:insertintoinsertTestselect*frominsertTest2;2.如果只希望导入指定字段,可以用这种方法: ......
  • Java基础语法(十二):try-catch块
    前言Java异常处理机制是Java程序设计中至关重要的一部分。它允许程序员像处理普通数据一样处理异常,并根据异常类型采取合适的措施。其中一个非常基本的异常处理机制是try-catch块。本文将深入探讨Java中的try-catch块,让读者了解它的各种用法和最佳实践。一、try-catch是什......
  • MySQL 存储过程&触发器&事务
    存储过程概念存储过程(StoredProcedure),是为了完成特定功能的SQL语句集。优点存储过程可以理解为shell脚本这类型的命令集输出工具,但是在底层,存储过程拥有更多的优点:语言的灵活性跟功能性更强,在原有基础之上可以插入控制语句、循环语句等让SQL语句的功能更强,能够完成更复杂的......
  • mysql查询某张表数据量
    SELECTtable_schema,table_nameAS'name',table_rowsAS'rows',concat(round(DATA_LENGTH/1024/1024,2),'MB')ASALL_DATA,concat(round(INDEX_LENGTH/1024/1024,2),'MB')ASALL_INDEX,......
  • MySQL学习日志十四,数据库的备份
    数据库备份必要性1.保证重要数据不丢失2.数据转移3.MySQL数据库备份方法mysqldump备份工具1.数据库管理工具,如SQLyog2.直接拷贝数据库文件和相关配置文件3.mysqldump客户端作用:转储数据库搜集数据库进行备份将数据转移到另一个SQL服务器,不一定是MySQL服务器--导......
  • MySQL(四) 数据表的插入、更新、删除数据
    一、插入数据格式:INSERTINTO表名(字段名...)VALUES(值...);创建环境使用person表CREATETABLEperson(idINTUNSIGNEDNOTNULLAUTO_INCREMENT,nameCH......
  • (一)shell 脚本基础
    观看视频:https://www.bilibili.com/video/BV14L4y157Bv/?spm_id_from=333.999.0.0介绍shell是一个命令行解释器,它接收应用程序/用户命令,然后调用操作系统内核。shell还是一个功能强大的编程语言,易编写、易调试、灵活性强。第一行的作用#!/bin/bashShebang在计算机程序中,s......