mysql資料庫怎麼把查詢出來的資料生成臨時表

時間 2022-05-02 04:28:40

1樓:愛可生雲資料庫

mysql 需要建立隱式臨時表來解決某些型別的查詢。往往查詢的排序階段需要依賴臨時表。例如,當您使用 group by,order by 或distinct 時。

這樣的查詢分兩個階段執行:首先是收集資料並將它們放入臨時表中,然後是在臨時表上執行排序。

對於某些 union 語句,不能合併的 view,子查詢時用到派生表,多表 update 以及其他一些情況,還需要使用臨時表。如果臨時表很小,可以到記憶體中建立,否則它將在磁碟上建立。mysql 在記憶體中建立了乙個表,如果它變得太大,就會被轉換為磁碟上儲存。

記憶體臨時表的最大值由 tmp_table_size 或 max_heap_table_size 值定義,以較小者為準。mysql 5.7 中的預設大小為 16mb。

如果執行查詢的資料量較大,或者尚未查詢優化,則可以增加該值。設定閾值時,請考慮可用的 ram 大小以及峰值期間的併發連線數。你無法無限期地增加變數,因為在某些時候你需要讓 mysql 使用磁碟上的臨時表。

注意:如果涉及的表具有 text 或 blob 列,則即使大小小於配置的閾值,也會在磁碟上建立臨時表。

2樓:曲印枝邵黛

建立臨時表

方法一:

create

table

#臨時表名(欄位1

約束條件,

欄位2約束條件,

.....)

create

table

##臨時表名(欄位1

約束條件,

欄位2約束條件,

.....)

方法二:

select

*into

#臨時表名

from

你的表;

select

*into

##臨時表名

from

你的表;

注:以上的#代表區域性臨時表,##代表全域性臨時表查詢臨時表

select

*from

#臨時表名;

select

*from

##臨時表名;

刪除臨時表

drop

table

#臨時表名;

drop

table

##臨時表名;

sql如何把查詢出來的多個表建立成乙個臨時表

3樓:

select * into #temp from

select a,b,c  from table1

union all

select a,b,c  from table2

1、sql server使用select into會自動生成臨時表,不需要事先建立。

select * into #temp from sysobjects

2、sql要把多個表合併成乙個要用到union或union all的關鍵字。

3、union或union all的區別是:union會自動壓縮多個結果集合中的重複結果,而union all則將所有的結果全部顯示出來。

4樓:公尺若明

這個方法不好...

臨時表使用檢視比較正確

基本介紹

應該是create view name

as select * from ...

---------------------------------------

檢視是乙個虛擬表,其內容由查詢定義。同真實的表一樣,檢視包含一系列帶有名稱的列和行資料。但是,檢視並不在資料庫中以儲存的資料值集形式存在。

行和列資料來自由定義檢視的查詢所引用的表,並且在引用檢視時動態生成。

對其中所引用的基礎表來說,檢視的作用類似於篩選。定義檢視的篩選可以來自當前或其它資料庫的乙個或多個表,或者其它檢視。分布式查詢也可用於定義使用多個異類源資料的檢視。

如果有幾台不同的伺服器分別儲存組織中不同地區的資料,而您需要將這些伺服器上相似結構的資料組合起來,這種方式就很有用。

通過檢視進行查詢沒有任何限制,通過它們進行資料修改時的限制也很少。

一、檢視的作用

* 簡單性。看到的就是需要的。檢視不僅可以簡化使用者對資料的理解,也可以簡化他們的操作。那些被經常使用的查詢可以被定義為檢視,從而使得使用者不必為以後的操作每次指定全部的條件。

* 安全性。通過檢視使用者只能查詢和修改他們所能見到的資料。資料庫中的其它資料則既看不見也取不到。

資料庫授權命令可以使每個使用者對資料庫的檢索限制到特定的資料庫物件上,但不能授權到資料庫特定行和特定的列上。通過檢視,使用者可以被限制在資料的不同子集上:

使用許可權可被限制在基表的行的子集上。

使用許可權可被限制在基表的列的子集上。

使用許可權可被限制在基表的行和列的子集上。

使用許可權可被限制在多個基表的連線所限定的行上。

使用許可權可被限制在基表中的資料的統計彙總上。

使用許可權可被限制在另一檢視的乙個子集上,或是一些檢視和基表合併後的子集上。

* 邏輯資料獨立性。檢視可幫助使用者遮蔽真實表結構變化帶來的影響。

二、檢視的優點

(1)檢視能簡化使用者的操作

(2)檢視機制可以使使用者以不同的方式查詢同一資料

(3)檢視對資料庫重構提供了一定程度的邏輯獨立性

(4)檢視可以對機密的資料提供安全保護

三、檢視的安全性

檢視的安全性可以防止未授權使用者檢視特定的行或列,是使用者只能看到表中特定行的方法如下:

1 在表中增加乙個標誌使用者名稱的列;

2 建立檢視,是使用者只能看到標有自己使用者名稱的行;

3 把檢視授權給其他使用者。

四、邏輯資料獨立性

檢視可以使應用程式和資料庫表在一定程度上獨立。如果沒有檢視,應用一定是建立在表上的。有了檢視之後,程式可以建立在檢視之上,從而程式與資料庫表被檢視分割開來。

檢視可以在以下幾個方面使程式與資料獨立:

1 如果應用建立在資料庫表上,當資料庫表發生變化時,可以在表上建立檢視,通過檢視遮蔽表的變化,從而應用程式可以不動。

2 如果應用建立在資料庫表上,當應用發生變化時,可以在表上建立檢視,通過檢視遮蔽應用的變化,從而使資料庫表不動。

3 如果應用建立在檢視上,當資料庫表發生變化時,可以在表上修改檢視,通過檢視遮蔽表的變化,從而應用程式可以不動。

4 如果應用建立在檢視上,當應用發生變化時,可以在表上修改檢視,通過檢視遮蔽應用的變化,從而資料庫可以不動。

五、檢視的書寫格式

create view 《檢視名》[(列名組)]

as 《子查詢》

drop view 《索引名》

注意:檢視可以和基本表一樣被查詢,但是利用檢視進行資料增,刪,改操作,會受到一定的限制。

(1)由兩個以上的基本表匯出的檢視

(2)檢視的字段來自字段表示式函式

(3)檢視定義中有巢狀查詢

(4)在乙個不允許更新的檢視上定義的檢視

六、建立和管理檢視

(建立檢視時注意事項的介紹)

(一). 利用企業管理器建立與管理檢視

1.使用企業管理器建立檢視:

2.使用企業管理器的「嚮導」建立檢視:

3.使用企業管理器的修改檢視:

注意:在 「設計檢視」時完成的工作:

新增表/刪除表 ?新增引用字段/刪除引用字段 ?調整字段順序 ?設定分組

設定過濾條件 ?設定引用字段是否輸出 ?設定檢視其他屬性

4.使用企業管理器的刪除檢視:

(二). 用t-sql語句建立與管理檢視

(檢視由企業管理器建立的檢視—「專案資訊」其相應的t-sql語句)(「檢視屬性」)

1. 使用create view建立檢視的語法: 參見教材p130~135

例子1: 選擇『員工表』和『專案表』中的部分欄位和記錄建立檢視,並且限制表『員工表』 中的記錄只能是部門為「專案部」的記錄集合,檢視定義為view_part,其程式清單如下:

create view view_part

as select 員工表.編號, 員工表.姓名,員工表.性別,

員工表.所屬部門, 專案表.專案編號, 專案表.名稱

from 專案表 inner join 員工表 on 專案表.負責人 = 員工表.編號

where 員工表.所屬部門='專案部'

例子2:定義檢視時指定別名並加密

create view 專案資訊檢視

(專案名稱,專案客戶,專案負責人,開始日期,[計畫工期(天)])

with encryption

as select 專案表.名稱,客戶表.客戶名稱, 員工表.姓名,專案表.開始日期,

datediff(day,專案表.開始日期,專案表.結束日期)

from 專案表 inner join 員工表 on 專案表.負責人 = 員工表.編號

inner join 客戶表 on 專案表.客戶 = 客戶表.客戶編號

where 員工表.所屬部門='專案部'

使用語句:exec sp_helptext 『專案資訊檢視』顯示訊息為:

「物件備註已加密。」

操作結果如下圖所示

例子5-3:使用with check option子句

問題提出:

若建立檢視ygb_view,其程式清單如下:

create view ygb_view

as select * from 員工表

where 員工表.性別=『女』執行下列語句,插入新記錄:

insert into ygb_view(姓名,性別,工資)

values(『李立三』,『男』,2300)

插入操作成功,但不合理!

解決辦法:使用with check option,程式清單如下:

create view ygb_view

as select * from 員工表 where 員工表.性別=『女』with check option

同樣,插入新記錄:

insert into ygb_view(姓名,性別,工資) values(『李立三』,『男』,2300)

插入操作將失敗!

2.使用alter view修改檢視 語法:參見教材

3.刪除檢視drop view

使用drop view命令刪除檢視的語法如下: drop view 檢視名1 [, ……]

例: drop view ygb_view

七、使用檢視操作表資料

(一)、通過檢視新增表資料

使用insert語句實現。

注意:檢視是虛擬表,其本身不儲存資料(來自其引用表), 新增的資料是儲存於檢視參照的資料表中。

條件分析:

1)使用者有向資料表插入資料的許可權;

2)檢視只引用表中部分字段,插入資料時只能是明確其應用的字段取值;

3)未引用的字段應具備下列條件之一:

允許空值;設有預設值;是標識字段;資料型別是timestamp或uniqueidentifer;

4)檢視不能包含多個欄位的組合

5)檢視不能包含使用統計函式的結果;

6)檢視不能包含distinct或group by子句;

7)定義檢視使用with check option,則插入資料應符合相應條件;

8)若檢視引用多個表,一條insert語句只能同乙個基表表中資料;

例:首先建立了乙個新的檢視:

create view ygb_view

as select * from 員工表 where 員工表.性別=『女』 with check option

然後,通過執行以下語句使用該檢視向基表新增一條新的資料記錄:

insert into ygb_view(姓名,性別,工資) values(『李立平』,『女』,2300)

(二). 更新資料記錄

使用檢視可以更新基表資料記錄(注意使用insert時的限制同樣適用)。

例子3:

(1) update 專案_view

set 專案負責人= 『王大力』 where 專案負責人= 『王立兵』

(2) update 專案_view

set 結束日期= dateadd(day, 50, 結束日期) where 客戶名稱=『cch公司』

(三)、刪除資料記錄

利用delete語句,使用檢視刪除記錄,可以刪除任何基表中的記錄。

注意: 必須指定在檢視中定義過的字段來刪除記錄;

檢視引用多個表時,無法用delete命令刪除資料。

例子4:delete ygb_view where 員工工資<1500

sql資料查詢,批量修改sql資料庫查詢出來的資料

第一種寫法,比較好理解 declare num int set num 0 select case when rowindex in 1,2 then num num score else num num 2 score endfrom select row number over order by...

php連線mysql資料庫,執行查詢語句後,排序後再輸出

select from table order by id desc 查詢 所有 來自 table表 排序 按照 id 降序,desc 代表降序,asc 代表公升序 你的情況直接使用排序語句就可以 select id,type from news where order by id desc php...

如何用mysql展示資料庫名稱,查詢mysql資料庫中所有表名

3全部被取消的命令mysql 之前提供了乙個 rename database db old to db new 的命令來直接對資料庫改名,可能由於實現的功能不完備 比如,這條命令可能是乙個超大的事務,或者是由於之前的表很多還是 myisam 等 後來的版本直接取消了這條命令。更改資料庫名大致上有以下...

mysql資料庫太大了怎麼備份,mysql資料庫如何備份?

命令 mysqlhotcopy 這個命令會在拷貝檔案之前會把表鎖住,並把資料同步到資料檔案中,以避免拷貝到不完整的資料檔案,是最安全快捷的備份方法。命令的使用方法是 mysqlhotcopy u root pdb1 db2 dbn 如果需要備份全部資料庫,可以加上 regexp 引數。mysqlho...

怎麼開啟mysql資料庫檔案,mysql 如何開啟sql檔案

這是資料庫資料存放檔案。每種軟體都有它自己的存放格式,就是資料的排列方式。字尾名均為db。delphi vb vc等等程式設計類軟體都可以開啟的。但顯示的資料方式不一定一樣。手上沒有這些軟體的話,試試office裡的access。有些專用軟體db資料是加密不公開的,普通方式還無法開啟。你是不是想看看...