當前位置:首頁 » 編程語言 » sql儲存另一張表的欄位
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

sql儲存另一張表的欄位

發布時間: 2023-06-04 16:16:54

『壹』 sql怎樣把一個表的數據插入到另一個表裡

  1. 復製表結構及數據到新表select * into 目標表名 from 源表名

    資料庫A中某表的的某列欄位,更新到資料庫B中某表的某列欄位:(use master 資料庫)

    update a

    set a.name=b.name

    from temp1.dbo.tableA a,temp2.dbo.tableA b

    where a.id=b.id

『貳』 SQL 創建一個臨時表#tabletemp 裡面有兩個欄位「cn」和「dt」分別用來存儲另一個表的欄位名和數據類型。

提到MySQL臨時表,我們都很熟悉了,一般來說,分為兩類:

1. MySQL 臨時表引擎,名字叫做 Memory。比如

create table tmp1(id int, str1 varchar(100) ) engine = memory;

由參數max_heap_table_size 來控制,超過報錯。

2. 非臨時表的引擎,這里又分為兩類:

  • 用戶自定義的臨時表,比如:

  • create temporary table (id int, str1 varchar(100) );

  • SQL執行過程中產生的內部臨時表,比如:UNION , 聚合類ORDER BY,派生表,大對象欄位的查詢,子查詢或者半連接的固化等等場景。

  • 那麼這兩種臨時表的計數器通常用show global status like '%tmp_%tables%' 來查看。比如

  • mysql> show status like '%tmp_%tables%';``+-------------------------+-------+``| Variable_name | Value |``+-------------------------+-------+``| Created_tmp_disk_tables | 0 |``| Created_tmp_tables | 0 |``+-------------------------+-------+``2 rows in set (0.00 sec)

  • 以上結果分別代表,只創建磁碟上的臨時表計數以及臨時表的總計數。這兩個計數器由參數 tmp_table_size 和 max_heap_table_size 兩個取最小值來控制。

    那在 MySQL 5.7 之前,這個 SQL 運行中產生的臨時表是 MYISAM,而且只能是 MYISAM。那 MySQL 從 5.7 開始提供了參數 Internal_tmp_mem_storage_engine 來定義內部的臨時表引擎,可選值為 MYISAM 和 INNODB 。當然這里我們選擇 INNODB 。並且把內部的臨時表默認保存在臨時表空間 ibtmp1 (可以用參數 innodb_temp_data_file_path 設置大小以及步長等)下。當然這里我們得控制下 ibtmp1 的大小,要不然一個爛SQL就把磁碟整爆了。

    但是MySQL 5.7 之前都沒有解決如下問題:

  • VARCHAR的變長存儲。那就是如果臨時表的欄位定義是 VARCHAR(200),那麼映射到內存里處理的欄位變為CHAR(200)。假設 VARCHAR(200) 就存里一個字元 "Y", 那豈不是很大的浪費。

  • 大對象的默認磁碟存儲,比如 TEXT,BLOB, JSON等,不管裡面存放了啥,直接轉化為磁碟存儲。

  • MySQL 8.0 開始,專門實現了一個臨時表的引擎 TempTable , 解決了 VARCHAR欄位的邊長存儲以及大對象的內存存儲。由變數 interal_tmp_mem_storage_engine來控制,可選值為 TempTable(默認)和 Memory;新引擎的大小由參數temp_table_max_ram 來控制,默認為1G。超過了則存儲在磁碟上(ibtmp1)。並且計數器由性能字典的表 memory_summary_global_by_event_name 來存儲。

  • mysql> SELECT * FROM performance_schema. memory_summary_global_by_event_name WHERE event_name like '%temptable%'G*************************** 1. row *************************** EVENT_NAME: **memory/temptable/physical_disk** COUNT_ALLOC: 0 COUNT_FREE: 0 SUM_NUMBER_OF_BYTES_ALLOC: 0 SUM_NUMBER_OF_BYTES_FREE: 0 LOW_COUNT_USED: 0 CURRENT_COUNT_USED: 0 HIGH_COUNT_USED: 0 LOW_NUMBER_OF_BYTES_USED: 0CURRENT_NUMBER_OF_BYTES_USED: 0 HIGH_NUMBER_OF_BYTES_USED: 0*************************** 2. row *************************** EVENT_NAME: **memory/temptable/physical_ram** COUNT_ALLOC: 1 COUNT_FREE: 0 SUM_NUMBER_OF_BYTES_ALLOC: 1048576 SUM_NUMBER_OF_BYTES_FREE: 0 LOW_COUNT_USED: 0 CURRENT_COUNT_USED: 1 HIGH_COUNT_USED: 1 LOW_NUMBER_OF_BYTES_USED: 0CURRENT_NUMBER_OF_BYTES_USED: 1048576 HIGH_NUMBER_OF_BYTES_USED: 10485762 rows in set (0.03 sec)

  • 以上 memory/temptable/physical_disk 代表放入磁碟上的臨時表計數情況。

    memory/temptable/physical_ram 代表放入內存的臨時表計數情況。

    那總結下MySQL 8.0 引入的 TempTable 引擎:

  • 默認內部臨時表引擎。

  • 支持變長字元類型的實際存儲。

  • 設置變數 temp_table_max_ram 來控制實際存儲內存區域大小。

『叄』 sql語句把一個表的欄位插入到另外一個表

在HH中列出要插入列的列表跟select from mm表中的選擇的列的列表一一對應就可以了,當然兩邊的數據類型應該是兼容的。

1、insert into hh (fielda,fieldb,fieldc) select fieldx,fieldy,fieldz from mm

『肆』 sql怎樣將一個表中的數據添加到另一個表

1、假如A表存在

則 insert into A(a,b,c) (select a,b,c from B)

2、假如A表不存在

select a,b,c into A from B

3、假如需要跨資料庫

insert into ADB.[dbo].A(a,b,c) (select a,b,c from BDB.[dbo].B)

(4)sql儲存另一張表的欄位擴展閱讀:

SQL導入語句

1、如果要導出數據到已經生成結構(即現存的)FOXPRO表中,可以直接用下面的SQL語句

insert into openrowset('MSDASQL',

'Driver=Microsoft Visual FoxPro Driver;SourceType=DBF;SourceDB=c:',

'select * from [aa.DBF]')

select * from 表

說明:

SourceDB=c: 指定foxpro表所在的文件夾

aa.DBF 指定foxpro表的文件名.

2、導出到excel

EXEC master..xp_cmdshell 'bcp SettleDB.dbo.shanghu out c: emp1.xls -c -q -S"GNETDATA/GNETDATA" -U"sa" -P""'

3、/** 導入文本文件

EXEC master..xp_cmdshell 'bcp dbname..tablename in c:DT.txt -c -Sservername -Usa -Ppassword'

『伍』 sql存儲過程從一張表中查詢到的值作為另一張表的新的欄位

如果兩表欄位相同,則可以直接這樣用。
insert into table_a select * from table_b
如果兩表欄位不同,a表需要b中的某幾個欄位即可,則可以如下使用:
insert into table_a(field_a1,field_a2,field_a3) select field_b1,field_b2,field_b3 from table_b
還可以加上where條件

『陸』 在SQL資料庫中如何把一個表的同一個欄位復制到同一個表的另一個欄位

1、復製表結構及數據到新表select*into目標表名from源表名(要求目標表不存在,因為在插入時會自動創建)。