MariaDB:如果存在同名的持久表,我如何选择临时表?

MariaDB:如果存在同名的持久表,我如何选择临时表?,mariadb,temp-tables,Mariadb,Temp Tables,我创建了一个持久表temp和一个临时表temp,也就是说,它们都有相同的名称。如何专门对持久表或临时表使用select/update/insert?他们之间有什么不同 马里亚布说: 注− 允许临时表与现有非临时表具有相同的名称,因为MariaDB将其视为差异引用 所以,我想应该可以参考这些表格中的一个。这个问题与我在SO中提出的问题相关,但向后退了一步。如果临时表与现有的非临时表同名,则临时表将隐藏非临时表的名称 这意味着在SQL语句中,您将无法引用非临时表 解决方法是在创建临时表之前在非临时表

我创建了一个持久表
temp
和一个临时表
temp
,也就是说,它们都有相同的名称。如何专门对持久表或临时表使用select/update/insert?他们之间有什么不同

马里亚布说:

注− 允许临时表与现有非临时表具有相同的名称,因为MariaDB将其视为差异引用


所以,我想应该可以参考这些表格中的一个。这个问题与我在SO中提出的问题相关,但向后退了一步。

如果临时表与现有的非临时表同名,则临时表将隐藏非临时表的名称

这意味着在SQL语句中,您将无法引用非临时表

解决方法是在创建临时表之前在非临时表上创建视图,因为视图在内部保留对非临时表的引用:

CREATE TABLE t1 (a VARCHAR(100));
INSERT INTO t1 VALUES ("foo");
CREATE VIEW v_t1 AS SELECT a FROM t1;
CREATE TEMPORARY TABLE t1 (b VARCHAR(100));
INSERT INTO t1 VALUES ("bar");
SELECT * FROM v_t1;
SELECT * FROM t1;

如果临时表与现有的非临时表具有相同的名称,则临时表将隐藏非临时表的名称

这意味着在SQL语句中,您将无法引用非临时表

解决方法是在创建临时表之前在非临时表上创建视图,因为视图在内部保留对非临时表的引用:

CREATE TABLE t1 (a VARCHAR(100));
INSERT INTO t1 VALUES ("foo");
CREATE VIEW v_t1 AS SELECT a FROM t1;
CREATE TEMPORARY TABLE t1 (b VARCHAR(100));
INSERT INTO t1 VALUES ("bar");
SELECT * FROM v_t1;
SELECT * FROM t1;

就这样。只要临时表存在,所有
选择
更新
插入
,甚至
删除表
都将在临时表上执行。就是这样。只要临时表存在,所有
选择
更新
插入
,甚至
删除表
都将在临时表上执行。