是否可以使用同名创建一个mysql视图和表
例如我有一个表hs_hr_employee我想创建一个同名的视图
create VIEW hs_hr_employee AS SELECT * from hs_hr_employee;
我收到了以下错误
#1050 - Table 'hs_hr_employee' already exists
任何帮助感谢
此致
答案 0 :(得分:6)
答案 1 :(得分:2)
如上所述,您无法使用观看次数,但可以使用临时表格。
如果创建一个与实际表同名的临时表,则临时表将 shadow (隐藏)实际表。这意味着您无法访问实际的表,直到删除了临时表:
mysql> create table t select 1; # actual table t
Query OK, 1 row affected (0.58 sec)
Records: 1 Duplicates: 0 Warnings: 0
mysql> create temporary table t select*from t; # temp table t
Query OK, 1 row affected (0.53 sec)
Records: 1 Duplicates: 0 Warnings: 0
mysql> insert t select 2; # t refers to the temp table
Query OK, 1 row affected (0.06 sec)
Records: 1 Duplicates: 0 Warnings: 0
mysql> select*from t; # temp table
+---+
| 1 |
+---+
| 1 |
| 2 |
+---+
2 rows in set (0.00 sec)
mysql> drop table t; # temp table
Query OK, 0 rows affected (0.06 sec)
mysql> show tables like "t"; # verify that actual table still exists. show tables will not show temporary tables
+--------------------+
| Tables_in_test (t) |
+--------------------+
| t |
+--------------------+
1 row in set (0.00 sec)
mysql>
mysql> select*from t; # now t refers to the actual table
+---+
| 1 |
+---+
| 1 |
+---+
1 row in set (0.00 sec)
mysql> drop table t; # actual table
Query OK, 0 rows affected (0.14 sec)
mysql>
但是,一旦断开会话,临时表就会消失(即使你没有drop
)。每次连接时,您都需要重新创建它们。
答案 2 :(得分:0)
是的,如果您在其他模式下创建它。
例如
dbo.Customers
user.customers(这可能是一个视图)
您可以通过包含架构来调用它,也可以从分配了架构的用户那里调用它。
这是用于MS SQL服务器。
答案 3 :(得分:-2)
不仅在 mysql 服务器中,而且在任何 sqldialect 中,同一架构中的表和视图不能具有相同的名称,因为当您触发选择查询时会导致歧义,例如从何处从表中选择列或查看。