mysql 從一個表中查數據,插入另一個表

不管是在網站開發(fā)還是在應用程序開發(fā)中,我們經常會碰到

需要將MySQL或MS SQLServer某個表的數據批量導入到另一個表的情況,甚至有時還需要指定導入字段。

本文就將以MySQL數據庫為例,介紹如何通過SQL命令行將某個表的所有數據或指定字段的數據,導入到目標表中。此方法對于SQLServer數據庫,也就是T-SQL來說,同樣適用?。

類別一、?如果兩張張表(導出表和目標表)的字段一致,并且希望插入全部數據,可以用這種方法:

INSERT?INTO目標表SELECT??*?FROM來源表 ;

例如,要將?articles?表插入到?newArticles?表中,則可以通過如下SQL語句實現(xiàn):

INSERT? INTO? newArticles? SELECT? ?*? FROM? ? articles ;

類別二、?如果只希望導入指定字段,可以用這種方法:

INSERT? ?INTO? 目標表?(字段1,?字段2,?...)? SELECT? 字段1,?字段2,?...? FROM? 來源表? ;

請注意以上兩表的字段必須一致,否則會出現(xiàn)數據轉換錯誤。

INSERT? ?INTO? ?TPersonnelChange? ?(UserId,? DepId,? SubDepId,? PostionType,? AuthorityId,? ChangeDateS,? InsertDate,? UpdateDate,? SakuseiSyaId? )

SELECT? ?UserId,DepId,? ?SubDepId,? ?PostionType,? ?AuthorityId,??DATE_FORMAT (EmployDate,? '%Y%m%d'? ),? NOW(),? ?NOW(),? ?1

FROM? ? ?TUserMst? ? WHERE? ? `Status` = 0? ? AND QuitFlg = 0? ? AND UserId < 2


? ??web開發(fā)中,我們經常需要將一個表的數據插入到另外一個表,有時還需要指定導入字段,設置只需要導入目標表中不存在的記錄,雖然這些都可以在程序中拆分成簡單sql來實現(xiàn),但是用一個sql的話,會節(jié)省大量代碼。下面我以mysql數據庫為例分情況一一說明:

1.如果2張表的字段一致,并且希望插入全部數據,可以用這種方法:

INSERT? ? ?INTO? ? 目標表? ? SELECT? ? *? ? FROM? ? 來源表;

? ? insert? ? into? ? insert? ? Test? ? select? ? *? ? from? ? insertTest2;

2.如果只希望導入指定字段,可以用這種方法:

INSERT? ? INTO? ? 目標表? ?(字段1, 字段2, ...)? SELECT? ?字段1, 字段2, ...? ?FROM? ?來源表; (這里的話字段必須保持一致)

? insert? ? into? ? insertTest2? ? (id)? ? select? ? id? ? from? ? insertTest2;

3.如果您需要只導入目標表中不存在的記錄,可以使用這種方法:

INSERTINTO? ? 目標表? ? ?(字段1,? ?字段2,? ?...)? ?SELECT? ? 字段1,? ?字段2,? ?...? ?FROM? ? 來源表? ? WHERE? ?notexists(select * from 目標表

where? 目標表 . 比較字段 = 來源表 . 比較字段 );

?1>.插入多條記錄:

insert? ?into? ? ?insertTest2( id,? name )? ? select? ?id,? name? ?from? ?insertTest?

?where? ?notexists (select? *? from? insertTest2? where? insertTest2.id? =? insertTest.id);

?2>.插入一條記錄:

insert? ?into? ?insertTest? (id,? ?name)? ?SELECT? 100,? 'liudehua'? ? FROM? ?dual? ? WHERE? ?

notexists(select? ?*? ?from? ?insertTest? ? where? ?insertTest.id=100);


Mysql清空表(truncate)與刪除表中數據(delete)的區(qū)別

為某基于wordpress搭建的博客長久未除草,某天升級的時候發(fā)現(xiàn)已經被插入了幾萬條垃圾留言,

如果一條條刪除那可真是累人的活。遂考慮直接進入mysql直接清空表或者刪除表中數據。

本文記錄一下這2種操作模式的區(qū)別,目標對象是表wp_comments,里面的所有留言均是垃圾留言,均可刪除。然后便有了以下2種方式(進入mysql操作界面后):

truncate? ?table? ?wp_comments;

delete? ?*? ? from? ?wp_comments;

其中truncate操作中的table可以省略,delete操作中的*可以省略。這兩者都是將wp_comments表中數據清空,不過也是有區(qū)別的,如下:

truncate是整體刪除(速度較快), delete是逐條刪除(速度較慢)。

truncate不寫服務器log,delete寫服務器log,也就是truncate效率比delete高的原因。

truncate不激活trigger(觸發(fā)器),但是會重置Identity(標識列、自增字段),相當于自增列會被置為初始值,又重新從1開始記錄,而不是接著原來的ID數。

而delete刪除以后,Identity依舊是接著被刪除的最近的那一條記錄ID加1后進行記錄。

如果只需刪除表中的部分記錄,只能使用DELETE語句配合where條件。 DELETE? ?FROM? ?wp_comments? ?WHERE……

全文完。原創(chuàng)文章請隨便轉載。愿和大家分享,并且一起進步!

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容