Jan 01, 1970
让我们探索一下 MariaDB 中的临时表是如何工作的。首先,我们必须连接到服务器。例如(使用您自己的连接详细信息):
mariadb -h 127.0.0.1 -u root -p"RootPassword!" --database demo
现在,为了指出一些事项,让我们创建一个标准(永久)表。方法如下:
CREATE TABLE t ( c INT );
即使我们退出客户端,这个表t
仍会保留在数据库中:
exit
当我们重新连接并使用SHOW TABLES;
检查现有表时,表t
仍将被列出:
mariadb -h 127.0.0.1 -u root -p"RootPassword!" --database demo
SHOW TABLES;
+----------------+ | Tables_in_demo | +----------------+ | t | +----------------+
所有这些都非常明显,但是现在,让我们重新创建该表并尝试一些不同的东西:
CREATE OR REPLACE TEMPORARY TABLE t ( c INT );
请注意TEMPORARY
关键字。创建此表后,如果我们运行SHOW TABLES;
,它将出现在列表中。我们可以向其中插入数据、查询它并将其与其他表连接起来。在当前会话期间,它的行为就像普通表一样。但是,如果我们退出客户端,然后重新连接,并再次执行SHOW TABLES;
,则不会列出临时表t
。
临时表仅在创建它的会话期间存在,其他会话将无法看到它。
临时表对于临时数据操作非常有用。例如,考虑数据库中一个名为products
的表:
CREATE TABLE products ( id INT NOT NULL AUTO_INCREMENT, code VARCHAR(100) NOT NULL, name VARCHAR(250) NOT NULL, description TEXT DEFAULT NULL, PRIMARY KEY (id), UNIQUE KEY code (code) )
我们可以创建一个模拟products
结构的临时表:
CREATE TEMPORARY TABLE t LIKE products;
我们可以通过运行以下命令来确认这一点:
DESCRIBE t;
+-------------+--------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------------+--------------+------+-----+---------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | code | varchar(100) | NO | UNI | NULL | | | name | varchar(250) | NO | | NULL | | | description | text | YES | | NULL | | +-------------+--------------+------+-----+---------+----------------+
最初, t
为空。但是,假设我们想将一些数据从products
转移到t
。假设我们只想包含代码中包含数字 0 的产品:
INSERT INTO t SELECT * FROM products WHERE code LIKE '%0%';
运行此命令后,如果我们查询临时表t
:
SELECT * FROM t;
+----+--------+------------------+---------------------------------------------------+ | id | code | name | description | +----+--------+------------------+---------------------------------------------------+ | 1 | BG2024 | BugBlaster | Eradicates software bugs with a single scan. | | 3 | FW001 | FireWhale | An oversized, comprehensive firewall solution. | | 4 | CLD404 | CloudNine Finder | Find your way back from cloud outages and errors. | +----+--------+------------------+---------------------------------------------------+
我们看到了过滤后的数据。
临时表提供了一种强大的方法来临时处理数据,而不会影响持久数据存储。它们在需要临时操作或转换数据的场景中特别有用。您可以使用永久表进行这种数据操作,但当您需要自动清理、降低命名冲突风险、隔离和安全性以及查询性能的资源管理时,临时表非常有用。