paint-brush
如何在 MariaDB 中使用临时表经过@alejandroduarte
726 讀數
726 讀數

如何在 MariaDB 中使用临时表

经过 Alejandro Duarte4m2024/05/02
Read on Terminal Reader

太長; 讀書

临时表对于临时数据操作非常有用。临时表仅在创建它的会话期间存在,其他会话将无法看到它。例如,考虑数据库中一个名为“products”的表。我们可以创建一个模拟“products”结构的临时表
featured image - 如何在 MariaDB 中使用临时表
Alejandro Duarte HackerNoon profile picture

让我们探索一下 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. | +----+--------+------------------+---------------------------------------------------+

我们看到了过滤后的数据。

结论

临时表提供了一种强大的方法来临时处理数据,而不会影响持久数据存储。它们在需要临时操作或转换数据的场景中特别有用。您可以使用永久表进行这种数据操作,但当您需要自动清理、降低命名冲突风险、隔离和安全性以及查询性能的资源管理时,临时表非常有用。