gpt4 book ai didi

Mysql:MyISAM表文件已删除,但仍在插入和选择数据。如何?

转载 作者:行者123 更新时间:2023-11-29 23:17:39 27 4
gpt4 key购买 nike

有人可以解释一下这里发生了什么吗

我在 MyISAM 中创建了一张表。

显示表格——显示它。select 命令从表中给出空表

我从位置删除了 myisam 文件。

显示表格——不显示。

到目前为止还好。

现在,我仍然能够插入表,并能够从表中选择[这会发生吗?怎么办?]

再次,drop table 表示表不存在。在此之后,select 命令显示表不存在。

问题是“它在哪里插入,从哪里选择数据;在删除表调用之后,它在哪里消失?”

服务器版本:5.5.38-log MySQL 社区服务器(GPL)

总体顺序..

MySQL [test]> CREATE TABLE test (id int(11) DEFAULT NULL) ENGINE=MyISAM DEFAULT CHARSET=latin1;
Query OK, 0 rows affected (0.05 sec)

MySQL [test]> show tables;
+----------------+
| Tables_in_test |
+----------------+
| test |
+----------------+
1 row in set (0.00 sec)

MySQL [test]> select * from test;
Empty set (0.00 sec)

~~~~~~~~~~~~~~~~~~~~~~~~~

[root@localhost test]# pwd
/var/lib/mysql/test
[root@localhost test]# ll
total 16
-rw-rw---- 1 mysql mysql 8556 Dec 23 14:08 test.frm
-rw-rw---- 1 mysql mysql 0 Dec 23 14:08 test.MYD
-rw-rw---- 1 mysql mysql 1024 Dec 23 14:08 test.MYI
[root@localhost test]# rm -f *
[root@localhost test]# ll
total 0
[root@localhost test]#

~~~~~~~~~~~~~~~~~~~~~~~~~

MySQL [test]> show tables;
Empty set (0.00 sec)

MySQL [test]> insert into test values (1234);
Query OK, 1 row affected (0.00 sec)

MySQL [test]> select * from test;
+------+
| id |
+------+
| 1234 |
+------+
1 row in set (0.00 sec)

MySQL [test]> drop table test;
ERROR 1051 (42S02): Unknown table 'test'

MySQL [test]> select * from test;
ERROR 1146 (42S02): Table 'test.test' doesn't exist

最佳答案

在 Unix 上,如果删除另一个进程打开的文件,它只是从目录中删除名称,但该文件仍然存在于磁盘上,其他进程可以继续访问它。在所有进程关闭文件之前,它不会真正消失。

MySQL 守护进程大概会在第一次访问表时打开与表相关的文件,然后尽可能长时间地保持文件打开。因此,一旦它访问了表,删除文件名不会影响它对表内容的操作。

但是,诸如显示表删除表之类的DML操作是通过访问目录而不是打开的文件来工作的,因此它们会注意到更改。然后所有内部数据结构都与文件系统同步。

关于Mysql:MyISAM表文件已删除,但仍在插入和选择数据。如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27617365/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com