在利用數(shù)據(jù)庫開發(fā)時,常常會將一些表之間的數(shù)據(jù)互相導(dǎo)入。當(dāng)然可以編寫程序?qū)崿F(xiàn),但是,程序常常需要開發(fā)環(huán)境,不方便。最方便是利用sql語言直接導(dǎo)入。既方便而修改也簡單。以下就是導(dǎo)入的方法。
創(chuàng)新互聯(lián)于2013年開始,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目做網(wǎng)站、成都網(wǎng)站制作網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元烏魯木齊做網(wǎng)站,已為上家服務(wù),為烏魯木齊各地企業(yè)和個人服務(wù),聯(lián)系電話:18980820575
1、 表結(jié)構(gòu)相同的表,且在同一數(shù)據(jù)庫(如,table1,table2)
Sql :
復(fù)制代碼代碼如下:
insert into table1 select * from table2 (完全復(fù)制)
insert into table1 select distinct * from table2(不復(fù)制重復(fù)紀(jì)錄)
insert into table1 select top 5 * from table2 (前五條紀(jì)錄)
2、不在同一數(shù)據(jù)庫中(如,db1 table1,db2 table2)
sql:
[code]
insert into db1.table1 select * from db2.table2 (完全復(fù)制)
insert into db1.table1 select distinct * from db2table2(不復(fù)制重復(fù)紀(jì)錄)
insert into tdb1.able1 select top 5 * from db2table2 (前五條紀(jì)錄)
3、表結(jié)構(gòu)不同的表或復(fù)制部分紀(jì)錄(如,dn_user,dn_user2)
a. 建一個新表[DN_UserTemp](在老表dn_user上增加一列)
復(fù)制代碼代碼如下:
CREATE TABLE [DN_UserTemp] ( [Num] [numeric](18, 0) IDENTITY (1, 1) NOT NULL)
[Id] [idtype] NOT NULL ,
[Name] [fntype] NOT NULL ,
[Descript] [dstype] NULL ,
[LogonNm] [idtype] NOT NULL ,
[Password] [idtype] NULL ,
[Gender] [char] (1) NULL ,
[Quited] [booltype] NOT NULL,
[OffDuty] [booltype] NOT NULL ,
[Stopped] [booltype] NOT NULL,
[OSBind] [booltype] NOT NULL,
[Domain] [idtype] NULL ,
[EMail] [fntype] NULL ,
[UnitId] [idtype] NULL ,
[BranchId] [idtype] NULL ,
[DutyId] [idtype] NULL ,
[LevelId] [idtype] NULL ,
[ClassId] [idtype] NULL ,
[TypeId] [idtype] NULL ,
[IP] [varchar] (15) COLLATE Chinese_PRC_CI_AS NULL ,
[ExpireDT] [datetime] NULL ,
[Sort] [int] NOT NULL ,
[AllowDel] [booltype] NOT NULL,
[UnitChief] [booltype] NOT NULL,
[BranchChief] [booltype] NOT NULL ,
[UnitDeputy] [booltype] NOT NULL ,
[BranchDeputy] [booltype] NOT NULL ,
[Num] [numeric](18, 0) IDENTITY (1, 1) NOT NULL
) ON [PRIMARY]
b. 將dn_uer2的數(shù)據(jù)拷入dn_usertemp
sql:insert into dn_usertemp select * from dn_user2
c.將dn_usertemp 拷入dn_user
sql:
復(fù)制代碼代碼如下:
declare @i int
declare @j int
declare @Name fntype
set @i=1
select @j=count(*) from dn_usertemp
while @i@j 1
begin
select @Name=Name from dn_usertemp where Num=@i
print @Name
insert into dn_user (Name) values (@Name) where Num=@i
select @i=@i 1
end
MySql數(shù)據(jù)庫復(fù)制表數(shù)據(jù)
將 production 數(shù)據(jù)庫中的 mytbl 表快速復(fù)制為 mytbl_new,2個命令如下:
復(fù)制代碼代碼如下:
CREATE TABLE mytbl_new LIKE production.mytbl;
INSERT mytbl_new SELECT * FROM production.mytbl;
第一個命令是創(chuàng)建新的數(shù)據(jù)表 mytbl_new ,并復(fù)制 mytbl 的數(shù)據(jù)表結(jié)構(gòu)。
第二個命令是講數(shù)據(jù)表 mytbl 中的數(shù)據(jù)復(fù)制到新表 mytbl_new 。
注:production.mytbl是指定要復(fù)制表的數(shù)據(jù)庫名稱為 production 。它是可選的。
假如沒有production. ,MySQL數(shù)據(jù)庫將會假設(shè)mytbl在當(dāng)前操作的數(shù)據(jù)庫。
另外:在mysql數(shù)據(jù)庫中復(fù)制數(shù)據(jù)為:
復(fù)制代碼代碼如下:
select * into desTable from sourceTable在mssql中支持,在mysql中不支持
insert into desTable select * from sourceTable
如果從庫上表 t 數(shù)據(jù)與主庫不一致,導(dǎo)致復(fù)制錯誤,整個庫的數(shù)據(jù)量很大,重做從庫很慢,如何單獨(dú)恢復(fù)這張表的數(shù)據(jù)?通常認(rèn)為是不能修復(fù)單表數(shù)據(jù)的,因?yàn)樯婕暗礁鞅頎顟B(tài)不一致的問題。下面就列舉備份單表恢復(fù)到從庫會面臨的問題以及解決辦法:
場景 1
如果復(fù)制報錯后,沒有使用跳過錯誤、復(fù)制過濾等方法修復(fù)主從復(fù)制。主庫數(shù)據(jù)一直在更新,從庫數(shù)據(jù)停滯在報錯狀態(tài)(假設(shè) GTID 為 aaaa:1-100)。
修復(fù)步驟:
在主庫上備份表 t (假設(shè)備份快照 GTID 為 aaaa:1-10000);
恢復(fù)到從庫;
啟動復(fù)制。
這里的問題是復(fù)制起始位點(diǎn)是 aaaa:101,從庫上表 t 的數(shù)據(jù)狀態(tài)是領(lǐng)先其他表的。aaaa:101-10000 這些事務(wù)中只要有修改表 t 數(shù)據(jù)的事務(wù),就會導(dǎo)致復(fù)制報錯 ,比如主鍵沖突、記錄不存在(而 aaaa:101 這個之前復(fù)制報錯的事務(wù)必定是修改表 t 的事務(wù))
解決辦法:啟動復(fù)制時跳過 aaaa:101-10000 這些事務(wù)中修改表 t 的事務(wù)。
正確的修復(fù)步驟:
1. 在主庫上備份表 t (假設(shè)備份快照 GTID 為 aaaa:1-10000),恢復(fù)到從庫;
2. 設(shè)置復(fù)制過濾,過濾表 t:
CHANGE REPLICATION FILTER REPLICATE_WILD_IGNORE_TABLE = ('db_name.t');
3. 啟動復(fù)制,回放到 aaaa:10000 時停止復(fù)制(此時從庫上所有表的數(shù)據(jù)都在同一狀態(tài),是一致的);
START SLAVE UNTIL SQL_AFTER_GTIDS = 'aaaa:10000';
4. 刪除復(fù)制過濾,正常啟動復(fù)制。
注意事項(xiàng):這里要用 mysqldump --single-transaction --master-data=2,記錄備份快照對應(yīng)的 GTID
場景 2
如果復(fù)制報錯后,使用跳過錯誤、復(fù)制過濾等辦法修復(fù)了主從復(fù)制。主、從庫數(shù)據(jù)一直在更新。
修復(fù)步驟:
在主庫上備份表 t (假設(shè)備份快照 GTID為 aaaa:1-10000);
停止從庫復(fù)制,GTID為 aaaa:1-20000;
恢復(fù)表 t 到從庫;
啟動復(fù)制。
這里的問題是復(fù)制起始位點(diǎn)是 aaaa:20001,aaaa:10000-20000 這些事務(wù)將不會在從庫上回放,如果這里面有修改表 t 數(shù)據(jù)的事務(wù),從庫上將丟失這部分?jǐn)?shù)據(jù)。
解決辦法:從備份開始到啟動復(fù)制,鎖定表 t,保證 aaaa:10000-20000 中沒有修改表 t 的事務(wù)。
正確修復(fù)步驟:
對表 t 加讀鎖;
在主庫上備份表 t;
停止從庫復(fù)制,恢復(fù)表 t;
啟動復(fù)制;
解鎖表 t。
如果是大表,這里可以用可傳輸表空間方式備份、恢復(fù)表,減少鎖表時間。
在Mysql程序中有我自己的一個數(shù)據(jù)庫共5張表,里邊數(shù)據(jù)不算太多。我現(xiàn)在想把他們?nèi)颗搅硪慌_電腦中去,該怎么弄,如果不用其它的軟件工具,只用Mysql自已的程序不知可否??
注:不用考慮操作系統(tǒng)。?
---------------------------------------------------------------?
在dos命令提示符下使用mysqldump命令進(jìn)行備份.?
如下:?
C:\Documents and Settings\Administratormysqldump yinshi c:\\backup.txt -uroot?
-p12142022?
說明:yinshi是我的數(shù)據(jù)庫名,里面有5張表; c:\\backup.txt 是我備份出來文件名和路徑;?
-u,-p參數(shù)后面跟的分別是用戶名和密碼.?
將你備份出來的文件我這里是backup.txt拷貝到另一臺機(jī)上,再在dos命令提示符下用mysql命令,進(jìn)行恢復(fù),如下:?
C:\Documents and Settings\Administratormysql c:\\backup.txt -uroot -p12142022?
or?
mysqlsource backup.txt;(這里backup.txt在放在data目錄下)?
---------------------------------------------------------------?
如果另一臺機(jī)器上也安裝了mysql,可以直接導(dǎo)入?
C:\mysql\binmysqldump -h172.20.6.250 -udeveloper -p123456 --opt server_databasename | mysql -hlocalhost -uroot -C obj_databasename?
172.20.6.250源服務(wù)器ip?
developer源服務(wù)器連接用戶名?
---------------------------------------------------------------?
有兩種辦法。?
1、在B機(jī)器上裝mysql。?
將A機(jī)器上的mysql/data下的你的數(shù)據(jù)庫目錄整個拷貝下來。?
將B機(jī)器上的mysql服務(wù)停止。?
找到B機(jī)器上的mysql/data目錄,將你拷貝的目錄粘貼進(jìn)去,然后啟動mysql服務(wù)就可以了。?
2、使用SQL語句備份和恢復(fù)?
你可以使用SELECT INTO OUTFILE語句備份數(shù)據(jù),并用LOAD DATA INFILE語句恢復(fù)數(shù)據(jù)。這種方法只能導(dǎo)出數(shù)據(jù)的內(nèi)容,不包括表的結(jié)構(gòu),如果表的結(jié)構(gòu)文件損壞,你必須要先恢復(fù)原來的表的結(jié)構(gòu)。?
語法:?
SELECT * INTO {OUTFILE | DUMPFILE} ’file_name’ FROM tbl_name?
LOAD DATA [LOW_PRIORITY] [LOCAL] INFILE ’file_name.txt’ [REPLACE | IGNORE]?
INTO TABLE tbl_name?
SELECT ... INTO OUTFILE ’file_name’
你建表復(fù)制就可以了,例如CREATE TABLE aa AS SELECT * FROM tree;這是完全復(fù)制tree表的數(shù)據(jù)及表結(jié)構(gòu)到aa表中。假如要復(fù)制某些字段的話,如:insert into 表名user(表中字段sal) select sal from emp;插入某一列sal到user表中,從emp表中獲取sal的數(shù)據(jù)信息。最后提醒下,Oracle和MySql復(fù)制表建表 一樣,可以自己建表結(jié)構(gòu),再復(fù)制數(shù)據(jù);也可以復(fù)制部分列和部分?jǐn)?shù)據(jù),分開操作。 但要保證數(shù)據(jù)類型一致,插入指定列數(shù),列數(shù)要相同,列的長度空間大就可以了。
網(wǎng)頁題目:mysql怎么復(fù)制列數(shù)據(jù),mysql數(shù)據(jù)庫怎么復(fù)制表
瀏覽地址:http://muchs.cn/article22/hcpijc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供小程序開發(fā)、定制網(wǎng)站、移動網(wǎng)站建設(shè)、App設(shè)計、網(wǎng)站維護(hù)、定制開發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)