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

Mysql:MyISAM表文件已删除,但仍在插入和选择数据。怎样,mysql,Mysql,谁能给我解释一下这里发生了什么 我在MyISAM中创建了一个表 显示表格-显示它。 select命令从表中给出空表 我从位置删除myisam文件 显示表格-不显示它 好吧,到现在为止 现在,我仍然能够插入到表中,并且能够从表中选择[它会发生吗?如何发生??] 同样,drop table表示表不存在。 在此之后,select命令表示表不存在 问题是它从哪里插入,从哪里选择数据;在电话会议结束后,它在哪里消失了 服务器版本:5.5.38-log MySQL社区服务器GPL 总的顺序 MySQL [t

谁能给我解释一下这里发生了什么

我在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
~~~~~~~~~~~~~~~~~~~~~~~~~

[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操作(如show tables和drop tables)是通过访问目录而不是打开的文件来工作的,因此它们会注意到更改。然后所有内部数据结构都与文件系统同步。

MySQL服务器在内存中保留了一些内容。它只在需要时才进入磁盘。