MySQL数据库查不到表中内容

查询空邮箱,查不到内容

img

img


修改表中内容,显示修改成功,但是查询是修改之前的

img

img

有没有可能where条件是email='null' 呢?
修改表中内容,显示修改不成功。1图蓝色部分的结果为空,后面的update修改的行也是0.

你这样试试

select * from student where email = '';

找一个集成环境,比如说 navicat,执行下 update 看看呢

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 你可以看下这个问题的回答https://ask.csdn.net/questions/7585625
  • 这篇博客你也可以参考下:MySql 数据库 - 重置数据库、重置初始密码方法,数据库初始化方法,长时间不用忘记密码暴力解决方法
  • 你还可以看下sql参考手册中的 MySQL 备份和恢复 将一个数据库从一个服务器复制到另一个服务器
  • 除此之外, 这篇博客: Mysql数据库索引原理及算法原理中的 情况三:查询条件用到了索引中列的精确匹配,但是中间某个条件未提供。 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:
        EXPLAIN SELECT * FROM employees.titles WHERE emp_no='10001' AND from_date='1986-06-26';
        +----+-------------+--------+------+---------------+---------+---------+-------+------+-------------+
        | id | select_type | table  | type | possible_keys | key     | key_len | ref   | rows | Extra       |
        +----+-------------+--------+------+---------------+---------+---------+-------+------+-------------+
        |  1 | SIMPLE      | titles | ref  | PRIMARY       | PRIMARY | 4       | const |    1 | Using where |
        +----+-------------+--------+------+---------------+---------+---------+-------+------+-------------+

    此时索引使用情况和情况二相同,因为title未提供,所以查询只用到了索引的第一列,而后面的from_date虽然也在索引中,但是由于title不存在而无法和左前缀连接,因此需要对结果进行扫描过滤from_date(这里由于emp_no唯一,所以不存在扫描)。如果想让from_date也使用索引而不是where过滤,可以增加一个辅助索引<emp_no, from_date>,此时上面的查询会使用这个索引。除此之外,还可以使用一种称之为“隔离列”的优化方法,将emp_no与from_date之间的“坑”填上。

    首先我们看下title一共有几种不同的值:

        SELECT DISTINCT(title) FROM employees.titles;
        +--------------------+
        | title              |
        +--------------------+
        | Senior Engineer    |
        | Staff              |
        | Engineer           |
        | Senior Staff       |
        | Assistant Engineer |
        | Technique Leader   |
        | Manager            |
        +--------------------+

    只有7种。在这种成为“坑”的列值比较少的情况下,可以考虑用“IN”来填补这个“坑”从而形成最左前缀:

        EXPLAIN SELECT * FROM employees.titles
        WHERE emp_no='10001'
        AND title IN ('Senior Engineer', 'Staff', 'Engineer', 'Senior Staff', 'Assistant Engineer', 'Technique Leader', 'Manager')
        AND from_date='1986-06-26';
        +----+-------------+--------+-------+---------------+---------+---------+------+------+-------------+
        | id | select_type | table  | type  | possible_keys | key     | key_len | ref  | rows | Extra       |
        +----+-------------+--------+-------+---------------+---------+---------+------+------+-------------+
        |  1 | SIMPLE      | titles | range | PRIMARY       | PRIMARY | 59      | NULL |    7 | Using where |
        +----+-------------+--------+-------+---------------+---------+---------+------+------+-------------+

    这次key_len为59,说明索引被用全了,但是从type和rows看出IN实际上执行了一个range查询,这里检查了7个key。看下两种查询的性能比较:

        SHOW PROFILES;
        +----------+------------+-------------------------------------------------------------------------------+
        | Query_ID | Duration   | Query                                                                         |
        +----------+------------+-------------------------------------------------------------------------------+
        |       10 | 0.00058000 | SELECT * FROM employees.titles WHERE emp_no='10001' AND from_date='1986-06-26'|
        |       11 | 0.00052500 | SELECT * FROM employees.titles WHERE emp_no='10001' AND title IN ...          |
        +----------+------------+-------------------------------------------------------------------------------+

    “填坑”后性能提升了一点。如果经过emp_no筛选后余下很多数据,则后者性能优势会更加明显。当然,如果title的值很多,用填坑就不合适了,必须建立辅助索引。

  • 您还可以看一下 吴京忠老师的MySQL 备份与恢复详解(高低版本 迁移;不同字符集 相互转换;表课程中的 02. 逻辑备份:单表还原 和 多表还原小节, 巩固相关知识点

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^