虛擬表是實際上並不存在(物理上不存在),但是邏輯上存在的表。在mysql中,有三種虛擬表:臨時表、記憶體表和視圖;而只能從select語句可以傳回虛擬表的是視圖和衍生表。視圖是為了方便多個表聯表查詢而設計的,所以視圖也是多個表中的欄位由各個表中的關聯關係而建立的一種虛擬表。
本教學操作環境:windows7系統、mysql8版本、Dell G3電腦。
虛擬表,就是實際上並不存在(物理上不存在),但是邏輯上存在的表。
在MySQL中,存在的虛擬表:臨時表、記憶體表和視圖,衍生表。
只能從select語句可以傳回虛擬表的是視圖和衍生表。
一、派生表
當select語句的from子句中使用獨立子查詢時,就稱之為派生表。
select column_list from ( select column_list from table_1 ) derived_table_name where derived_table_name.c1 > 0 ;
与子查询不同,派生表必须具有别名,以便稍后在查询中引用其名字。
如果派生表没有别名,则出错。
二、视图
视图是为了方便多个表联表查询而设计的,所以视图也是多个表中的字段由各个表中的关联关系而创建的一种虚拟表。
视图创建后就保存了下来,以后可以随时用,除非drop删除视图。
在数据库中,只存放了视图的定义,并没有存放视图的数据,数据还是存储在原来的表中,
视图的数据是依赖原来表中的数据的,所以原来表的数据发生了改变,那么显示的视图的数据也会随着改变。
一般来说,我们只是利用视图来查询数据,不会通过视图来操作数据。
1.创建视图
-- other create view other as select a.name as username, b.name as goodsname from user as a, goods as b where a.id=b.id;
2.删除视图
drop view if exists other;
3.调用视图
select * from other;
4.如果视图不存在,则创建视图;如果视图存在,则修改视图
create or replace view view_name as select 语句;
视图创建一遍后会在navicat premium(MySQL可视化工具)保存下来,不可重复创建视图,
所以想重复调试创建视图,需先删除已创建的视图,在执行创建视图的SQL命令或者是修改视图。
视图作用:
- 提高了重用性,就项一个函数,创建一次,可重复调用。
- 对数据库重构,却不影响原数据。
- 让数据更加清晰。想要什么样的数据,就创建什么样的视图。
视图定义的存放位置:information_schema.views
查看视图的基本信息:DESC view_name;
注意:
- 修改视图的数据,将直接修改数据表(即原表)的真实数据。
- 删除视图,不会影响原表的数据,但是删除视图的数据,则会影响到原表。
即可以从select语句可以返回虚拟表,又可以通过构建表结构创建虚拟表的是临时表和内存表。
三、临时表
MySQL临时表在保存一些临时数据时是非常有用的。
临时表是建立在系统临时文件夹中的表,使用得当,完全可以像普通表一样进行各种操作。
临时表的数据和表结构都存储在内存中。
临时表只在当前MySQL连接可见,当关闭连接时,MySQL会自动删除表并释放所有空间。
1.通过构建临时表结构创建临时表
create temporary table tmp_table ( name VARCHAR(10) NOT NULL, value INTEGER NOT NULL ); select * from tmp_table;
2.直接将查询结果导入临时表
create temporary table tmp_table select * from other;
3.删除临时表
drop table tmp_table;
临时表的应用:
- 当某一个SQL语句关联的表在2张及以上,并且和一些小表关联。可以采用将大表进行拆分并且得到比较小的结果集合存放在临时表中。
- 程序执行过程中可能需要存放一些临时数据,这些数据在整个程序的会话过程中需要重复使用。
- 临时表默认是MyISAM(存储引擎),但是可以修改。
注意:
- 临时表与存在的表名相同的时候,存在的表会被隐藏,当临时表被drop,存在的表就可见了。
- show tables语句不会列举临时表,但是会列出内存表。
- 临时表在数据库多个连接之间不能共享。
- 临时表的最大所需内存需要通过tmp_table_size=128MB设定。当数据超过临时表的最大值设定时,自动转为磁盘表,此时因需要进行IO操作,性能会大大下降,而内存表不会,内存表满后,会提示数据满错误。
- 临时表更多作用是系统自己创建或,组织数据以提升性能,如子查询。
四、内存表
表结构建在磁盘上,数据在内存里,当停止服务后,表中的数据会丢失,而表的结构不会丢失。
内存表也可以被看作是临时表的一种。
1.通过构建内存表结构创建内存表
create table tmp_table ( name VARCHAR(10) NOT NULL, value INTEGER NOT NULL )ENGINE=MEMORY; select * from tmp_table; show tables;
2.直接将查询结果导入内存表
create table tmp_table engine=memory select * from other;
3.释放占用的内存
-- 删除数据 delete from tmp_table; -- 清空表 truncate table tmp_table; -- 删除表 drop table tmp_table;
内存表特征:
- 对于varchar等变长类型,内存表使用固定的长度来存放。
- 内存表可以有非唯一的键。
- 内存表不能包含BLOB或TEXT列。
- 内存表支持AUTO_INCREMENT列。
- 内存表支持插入延迟,使读取优先。
- 当临时表变得很大时,MySQL会自动地把它转化为在磁盘上存储的表,而内存表不会自动转换。
- 在MySQL的主从服务器上,内存表可以被复制。
- 内存表最大的size受限于系统变量max_heap_table_size,默认值是16MB,这个变量是可以修改的。
- 内存表对所有用户的连接都是可见的,使得它非常适合做缓存。
内存表必须使用memory存储引擎。
内存表的注意事项:
1、heap不允许使用xxxTEXT和xxxBLOB数据类型;只允许使用=和操作符来搜索记录(不允 许& amp; lt;、>、=);mysql4.1版本之前不支持auto_increment;只允许对非空数据列进行索引(not null)。
注:操作符 “” 说明:NULL-safe equal.这个操作符和“=”操作符执行相同的比较操作,不过在两个操作码均为NULL时,其所得值为1而不为NULL,而当一个操作码为NULL时,其所得值为0而不为NULL。
2、内存表可以通过max_heap_table_size = 2048M来加大使用的内存。
3、内存表必须使用memory存储引擎
五、临时内存表
1.通过构建表结构创建临时内存表
create temporary table tmp_table ( name VARCHAR(10) NOT NULL, value INTEGER NOT NULL )ENGINE=MEMORY; select * from tmp_table; show tables;
2.直接将查询结果导入内存表
create temporary table tmp_table engine=memory select * from other;
临时表使用注意事项:
(1)临时表只在当前连接可见,当这个连接关闭的时候,会自动drop。这就意味着你可以在两个不同的连接里使用相同的临时表名,并且相互不会冲突,或者使用已经存在的表,但不是临时表的表名。(当这个临时表存在的时候,存在的表被隐藏了,如果临时表被drop,存在的表就可见了)。
(2)临时表只能用在 memory,myisam,merge,或者innodb引擎。
(3)临时表不支持mysql cluster(簇)。
(4)在同一个query语句中,你只能查找一次临时表。例如:下面的就不可用
mysql> SELECT * FROM temp_table, temp_table AS t2; ERROR 1137: Can't reopen table: 'temp_table'
如果在一个存储函数里,你用不同的别名查找一个临时表多次,或者在这个存储函数里用不同的语句查找,这个错误都会发生。
(5)show tables 语句不会列举临时表,但是会列出内存表。
(6)你不能用rename来重命名一个临时表。但是,你可以alter table代替:
mysql>ALTER TABLE orig_name RENAME new_name;
【相关推荐:mysql视频教程】
以上是Mysql虛表是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

mysqloffersvariousStorageengines,每個suitedfordferentusecases:1)InnodBisidealForapplicationsNeedingingAcidComplianCeanDhighConcurncurnency,supportingtransactionsancions and foreignkeys.2)myisamisbestforread-Heavy-Heavywyworks,lackingtransactionsactionsacupport.3)記憶

MySQL中常見的安全漏洞包括SQL注入、弱密碼、權限配置不當和未更新的軟件。 1.SQL注入可以通過使用預處理語句防止。 2.弱密碼可以通過強制使用強密碼策略避免。 3.權限配置不當可以通過定期審查和調整用戶權限解決。 4.未更新的軟件可以通過定期檢查和更新MySQL版本來修補。

在MySQL中識別慢查詢可以通過啟用慢查詢日誌並設置閾值來實現。 1.啟用慢查詢日誌並設置閾值。 2.查看和分析慢查詢日誌文件,使用工具如mysqldumpslow或pt-query-digest進行深入分析。 3.優化慢查詢可以通過索引優化、查詢重寫和避免使用SELECT*來實現。

要監控MySQL服務器的健康和性能,應關注系統健康、性能指標和查詢執行。 1)監控系統健康:使用top、htop或SHOWGLOBALSTATUS命令查看CPU、內存、磁盤I/O和網絡活動。 2)追踪性能指標:監控查詢每秒數、平均查詢時間和緩存命中率等關鍵指標。 3)確保查詢執行優化:啟用慢查詢日誌,記錄並優化執行時間超過設定閾值的查詢。

MySQL和MariaDB的主要區別在於性能、功能和許可證:1.MySQL由Oracle開發,MariaDB是其分支。 2.MariaDB在高負載環境中性能可能更好。 3.MariaDB提供了更多的存儲引擎和功能。 4.MySQL採用雙重許可證,MariaDB完全開源。選擇時應考慮現有基礎設施、性能需求、功能需求和許可證成本。

MySQL使用的是GPL許可證。 1)GPL許可證允許自由使用、修改和分發MySQL,但修改後的分發需遵循GPL。 2)商業許可證可避免公開修改,適合需要保密的商業應用。

選擇InnoDB而不是MyISAM的情況包括:1)需要事務支持,2)高並發環境,3)需要高數據一致性;反之,選擇MyISAM的情況包括:1)主要是讀操作,2)不需要事務支持。 InnoDB適合需要高數據一致性和事務處理的應用,如電商平台,而MyISAM適合讀密集型且無需事務的應用,如博客系統。

在MySQL中,外鍵的作用是建立表與表之間的關係,確保數據的一致性和完整性。外鍵通過引用完整性檢查和級聯操作維護數據的有效性,使用時需注意性能優化和避免常見錯誤。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境

MantisBT
Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

PhpStorm Mac 版本
最新(2018.2.1 )專業的PHP整合開發工具