首页 > 数据库 >MySQL

MySQL

时间:2023-04-15 19:35:35浏览次数:52  
标签:deleted MySQL 增列 索引 mysql 主键

1.回表的原因

mysql回表:是指在查询过程中,mysql使用了索引来查找数据的行位置,但因为索引不包含所有需要查询的列,mysql还需要从主键索引或者聚簇索引中进一步读取数据来获取完整记录的过程。

回表的原因:因为非聚集索引(即普通的索引)只包含索引列及主键的值,而不是整个数据行。假设一个表有多个列,其中某些列被索引,如果查询语句需要使用那些未被索引的列,则会发生回表操作。

这种情况下,mysql需要根据查询结果中每个匹配行的主键到聚簇索引中进行二次查找以获取完整数据行。这个过程可能会降低查询性能,特别是当需要访问大量行时,回表操作的效率将变得更加重要。

2.MySQL如何对一个字段做唯一限制并可以逻辑删除

要在 MySQL 中对一个字段进行唯一性限制并支持逻辑删除,可以使用以下步骤:

  1. 创建表格时,在相关字段的定义后面增加 UNIQUE 关键字。例如
CREATE TABLE example (
  id INT(11) AUTO_INCREMENT PRIMARY KEY,
  name VARCHAR(50) UNIQUE,
  is_deleted BOOL
);

其中,name 字段被标记为唯一,is_deleted 用于表示记录是否被逻辑删除。

  1. 在执行逻辑删除时,而不是直接将记录从数据表中删除,标记 is_deleted 为 True。例如:
    UPDATE example SET is_deleted = TRUE WHERE id = 1;
  2. 当查询数据表时,添加 WHERE 条件来过滤已逻辑删除的记录。例如:
SELECT * FROM example WHERE is_deleted = FALSE;

通过这些步骤,可以在 MySQL 数据库中对特定字段进行唯一性限制,并支持逻辑删除

3.插入失败主键是否会自增

当mysql记录失败时,由于语句并没有真正执行成功,因此主键值不会自增。如果的记录中包含自增列,mysql只在成功时才会为该列分配一个新的唯一值。

当使用insert语句向带有自增列的表中一条记录时,可以不指定自增列的值,并将其设置为null或省略。mysql会自动生成下一个可用的自增列值,并将其到记录中。但如果失败了,则会导致主键自增列值的浪费,因为它已经被使用过了。因此,如果可能的话,最好在执行之前检查是否存在重复

4.是否遇到过order by失效的问题

其中一种常见的情况是在使用order by语句时未使用正确的数据类型进行排序。例如,将字符串数据类型(char或varchar)与数字数据类型(int或float)混合使用进行排序,会导致排序结果不正确。

标签:deleted,MySQL,增列,索引,mysql,主键
From: https://www.cnblogs.com/zjh996/p/17321685.html

相关文章

  • MySql安装与连接
    MySql简介MySQL是一种关系型数据库管理系统,它是开源软件,在广泛使用的LAMP(Linux、Apache、MySQL、PHP/Python/Perl)技术栈中扮演重要角色。MySQL支持多种操作系统,包括Linux、Windows、macOS等,可以处理大量数据并提供高效的性能。MySQL使用SQL(StructuredQueryLanguage)语言......
  • mysql 8.0.25
    ######################     mysql-8.0.25/boost/boost_1_73_0/boost/utility.hppmysql-8.0.25/boost/boost_1_73_0/boost/variant.hppmysql-8.0.25/boost/boost_1_73_0/boost/version.hppmysql-8.0.25/boost/boost_1_73_0/boost/visit_each.hppmysql-8.0.25/boos......
  • Mysql索引
    索引优化速度首先创建了一个数据库,并创建了一个表,里面有800w条记录对其中的一条记录进行查询,使用了4.5s此时存储这个表的文件已经有500M的大小了添加索引后发现,刚刚存储表的文件变大了,变成了655m索引需要占用磁盘空间索引创建使用索引查询我们创建索引只对创建......
  • 存储引擎-mysql体系结构
    mysql体系结构:连接层:最上层是一些客户端和链接服务,主要完成一些连接处理,授权认证,以及相关的安全方案,服务器也会为安全接入的每一个客户端验证它所具有的操作权限服务层:第二层架构主要用于完成大多数的核心服务功能,如sql接口,并完成缓存的查询,sql的分析和优化,部分内置函数的执行......
  • mysql left join 查询时主表为null统计count为0的解决方法(join后面加group by)
     如果没有加groupby则会出UserCount为0外其它都是nullselecta.*,count(b.ID)asUserCountfromerp_roleasaleftjoinerp_userasbona.ID=b.RoleIdwhere1=1anda.TenantID=2anda.RoleName='string' 加上groupby一切正常selecta.*,count(b.ID)as......
  • mysql如何查询所有表和字段信息
    1MySQL中information_schema是什么information_schema数据库是MySQL自带的,它提供了访问数据库元数据的方式。元数据:元数据是关于数据的数据,如数据库名或表名,列的数据类型,或访问权限等。有些时候用于表述该信息的其他术语包括“数据字典”和“系统目录”。在MySQL中,把informat......
  • Linux中如何通过yum或者apt下载安装MySQL
    一、 yummysql5.7以下mysql5.7以上Centos8可以,但是需要重新配置文件可以,但是需要重新配置文件可以,但是需要重新配置文件Centos7可以直接yum,但是是安装mariadb-server。如果是mysql-server需要配置文件直接yum后启动就好yum后需要修改密码才可以进入Ubuntu......
  • Mysql 中,为什么 WHERE 使用别名会报错,而 ORDER BY 不会报错?
       Mysql中,为什么WHERE使用别名会报错,而ORDERBY不会报错? 我们先对salary*12命名一个别名annual_salSELECTemployee_id,salary,salary*12annual_salFROMemployeesORDERBYannual_sal; 这段代码以annual_sal升序输出且正常执行没有报错。说明orderby......
  • Linux系统之安装mysql数据库
    (Linux系统之安装mysql数据库)一、查看系统版本[root@node~]#cat/etc/os-releaseNAME="CentOSLinux"VERSION="7(Core)"ID="centos"ID_LIKE="rhelfedora"VERSION_ID="7"PRETTY_NAME="CentOSLinux7(Core)"ANSI_......
  • 远程连接MySQL数据库
    远程连接MySQL数据库一、连接远程数据库:1、显示密码如:MySQL连接远程数据库(192.168.5.116),端口“3306”,用户名为“root”,密码“123456”mysql-h192.168.5.116-P3306-uroot-p1234562、隐藏密码如:MySQL连接本地数据库,用户名为“root”,C:/>mysql-hlocalhost-uroot-p......