新聞中心
在進(jìn)行數(shù)據(jù)庫導(dǎo)入和導(dǎo)出的操作過程中,我們常常會遇到空表無法導(dǎo)入數(shù)據(jù)庫的問題。這是因?yàn)樵趯?dǎo)入時(shí),數(shù)據(jù)庫系統(tǒng)默認(rèn)情況下是不支持導(dǎo)入空表的。因此,在進(jìn)行數(shù)據(jù)庫導(dǎo)入操作時(shí),需要注意一些小細(xì)節(jié),避免空表無法導(dǎo)入的情況發(fā)生。本文就將詳細(xì)介紹如何解決這一問題。

創(chuàng)新互聯(lián)建站是一家網(wǎng)站設(shè)計(jì)制作、成都網(wǎng)站制作,提供網(wǎng)頁設(shè)計(jì),網(wǎng)站設(shè)計(jì),網(wǎng)站制作,建網(wǎng)站,按需開發(fā),網(wǎng)站開發(fā)公司,2013年至今是互聯(lián)行業(yè)建設(shè)者,服務(wù)者。以提升客戶品牌價(jià)值為核心業(yè)務(wù),全程參與項(xiàng)目的網(wǎng)站策劃設(shè)計(jì)制作,前端開發(fā),后臺程序制作以及后期項(xiàng)目運(yùn)營并提出專業(yè)建議和思路。
一、了解空表無法導(dǎo)入數(shù)據(jù)庫的原因
當(dāng)我們把需要導(dǎo)入的表在MySQL中使用show create table tablename命令查看表結(jié)構(gòu)后,會發(fā)現(xiàn)表結(jié)構(gòu)中包含一下兩個關(guān)鍵字:
CREATE TABLE `tablename` (
…
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
其中ENGINE=InnoDB DEFAULT CHARSET=utf8mb4就是表格的默認(rèn)參數(shù),而如果在導(dǎo)入時(shí)表格為空時(shí),MySQL并不會生成INSERT語句,因此導(dǎo)入失敗。
二、解決方法
了解了空表無法導(dǎo)入數(shù)據(jù)庫的原因,接下來,我們便可以通過以下幾種方法來解決這一問題:
1.修改MySQL的默認(rèn)設(shè)置參數(shù)
我們可以在MySQL的配置文件中增加一句“SET SQL_MODE=”NO_AUTO_VALUE_ON_ZERO”;”,將默認(rèn)?修改為0,這樣在導(dǎo)入空白表格時(shí),MySQL就會自動插入一條自增長ID為0的記錄,從而解決該問題。
2.使用MySQL Workbench軟件進(jìn)行導(dǎo)入
MySQL Workbench是一款MySQL數(shù)據(jù)庫開發(fā)和管理工具,可以方便快捷的進(jìn)行數(shù)據(jù)庫導(dǎo)入操作。在使用該軟件進(jìn)行導(dǎo)入操作時(shí),可以選擇在import options菜單中勾選“Populate options”,然后點(diǎn)擊continue按鈕,MySQL Workbench就會自動給表格插入一條自增長ID為0的記錄,從而解決導(dǎo)入空表格失敗的問題。
3.手動插入一條記錄
如果以上兩個方法都不行,則需要手動插入一條記錄。在導(dǎo)入空表數(shù)據(jù)時(shí),手動向該表中插入一條數(shù)據(jù)即可。例如,在MySQL Workbench的Query窗口中,我們可以使用如下SQL語句手動插入一條數(shù)據(jù):
INSERT INTO `tablename` (`id`, `name`, `age`, `address`) VALUES (1, ‘Tom’, 22, ‘Beijing’);
其中,id字段為主鍵,可以自行指定,因?yàn)槲覀冎皇菫榱私鉀Q空表無法導(dǎo)入問題,所以無需特別關(guān)注。
:
數(shù)據(jù)庫導(dǎo)入操作是一個非常重要的工作,在進(jìn)行這項(xiàng)工作時(shí),空表無法導(dǎo)入的問題會經(jīng)常出現(xiàn)。因此,我們需要通過使用MySQL的默認(rèn)設(shè)置參數(shù)、MySQL Workbench軟件進(jìn)行導(dǎo)入、手動插入一條記錄等方式來解決這一問題,以保證我們的工作順利進(jìn)行。
相關(guān)問題拓展閱讀:
- oracle11g導(dǎo)出數(shù)據(jù)庫時(shí)怎么設(shè)置把空表也導(dǎo)出
oracle11g導(dǎo)出數(shù)據(jù)庫時(shí)怎么設(shè)置把空表也導(dǎo)出
用PLSQL直接導(dǎo)出dmp文件
1、Oracle11g默認(rèn)對空表不分備弊配segment,故使用exp導(dǎo)出Oracle11g數(shù)據(jù)庫時(shí),空型兆表不會導(dǎo)出。
2、設(shè)置deferred_segment_creation 參數(shù)為FALSE后,無論是空表還是非空表,都分配segment。
在sqlplus中,執(zhí)行如下命令:
SQL>alter system set deferred_segment_creation=false;
查看:
SQL>show parameter deferred_segment_creation;
該值設(shè)置后只對后面新增的表產(chǎn)生作用,對之前建立的空表不起作用。
3、可以使用手工為空表分卜滾租配Extent的方式,來解決導(dǎo)出之前建立的空表的問題。說明如下:
3.1 使用ALLOCATE EXTENT的說明
使用ALLOCATE EXTENT可以為數(shù)據(jù)庫對象分配Extent。其語法如下:
ALLOCATE EXTENT { SIZE integer | DATAFILE ‘filename’ | INSTANCE integer }
可以針對數(shù)據(jù)表、索引、物化視圖等手工分配Extent。
ALLOCATE EXTENT使用樣例:
ALLOCATE EXTENT
ALLOCATE EXTENT(SIZE integer )
ALLOCATE EXTENT(DATAFILE ‘filename’)
ALLOCATE EXTENT(INSTANCE integer)
ALLOCATE EXTENT(SIZE integer DATAFILE ‘filename’)
ALLOCATE EXTENT(SIZE integer INSTANCE integer)
針對數(shù)據(jù)表操作的完整語法如下:
ALTER TABLE table_name ALLOCATE EXTENT | DATAFILE ‘filename’ | INSTANCE integer})>
故,需要構(gòu)建如下樣子簡單的SQL命令:
alter table aTabelName allocate extent
3.2 構(gòu)建對空表分配空間的SQL命令,
查詢當(dāng)前用戶下的所有空表(一個用戶更好對應(yīng)一個默認(rèn)表空間)。命令如下:
SQL>select table_name from user_tables where NUM_ROWS=0;
根據(jù)上述查詢,可以構(gòu)建針對空表分配空間的命令語句,如下:
SQL>Select ‘a(chǎn)lter table ‘||table_name||’ allocate extent;’ from user_tables where num_rows=0
批量輸出上述生成的SQL語句,建立C:\createsql.sql,其內(nèi)容如下:
set heading off;
set echo off;
set feedback off;
set termout on;
spool C:\allocate.sql;
Select ‘a(chǎn)lter table ‘||table_name||’ allocate extent;’ from user_tables where num_rows=0;
spool off;
執(zhí)行C:\createsql.sql,命令如下:
SQL>@ C:\createsql.sql;
執(zhí)行完畢后,得到C:\allocate.sql文件。
打開該文件會看到,已經(jīng)得到對所有空表分配空間的命令SQL語句。
3.4 執(zhí)行SQL命令,對空表分配空間:
執(zhí)行C:\allocate.sql,命令如下:
SQL>@ C:\allocate.sql;
執(zhí)行完畢,表已更改。
3.4 此時(shí)執(zhí)行exp命令,即可把包括空表在內(nèi)的所有表,正常導(dǎo)出。
另外:Oracle11g中,對密碼是大小寫敏感的,即密碼中的字母是區(qū)分大小寫的。
在Oracle10g中及以前,密碼中的字母大小寫無所謂。
1、Oracle11g默認(rèn)對空表不分配segment,故使用exp導(dǎo)出Oracle11g數(shù)據(jù)庫時(shí),空表不會導(dǎo)出。
2、設(shè)置deferred_segment_creation 參數(shù)為FALSE后,無論是空表還是非空表,都分配segment。
在sqlplus中,執(zhí)行如下命令:
SQL>alter system set deferred_segment_creation=false;
查看:
SQL>show parameter deferred_segment_creation;
該值設(shè)置后只大閉拿對后面新增的表產(chǎn)生作用,對之前建立的空表不起作用。
3、可以使用手工為空表分配Extent的方式,來解決導(dǎo)出之前建立的空表的問題。說明如下:
3.1 使用ALLOCATE EXTENT的說明
使用ALLOCATE EXTENT可以為數(shù)據(jù)庫對象分配Extent。其語法如下:
ALLOCATE EXTENT { SIZE integer | DATAFILE ‘filename’ | INSTANCE integer }
可以針對數(shù)據(jù)表、索引、物化視圖等手工分配Extent。
ALLOCATE EXTENT使用樣例:
ALLOCATE EXTENT
ALLOCATE EXTENT(SIZE integer )
ALLOCATE EXTENT(DATAFILE ‘filename’)
ALLOCATE EXTENT(INSTANCE integer)
ALLOCATE EXTENT(SIZE integer DATAFILE ‘filename’)
ALLOCATE EXTENT(SIZE integer INSTANCE integer)
針對數(shù)據(jù)表操作的完整語法如下:
ALTER TABLE table_name ALLOCATE EXTENT | DATAFILE ‘filename’ | INSTANCE integer})>
故,需要構(gòu)建如下樣子簡單的SQL命令:
alter table aTabelName allocate extent
3.2 構(gòu)建對空表分配態(tài)隱空間的SQL命令,
查詢當(dāng)前用戶下的所有空表(一個用戶更好對應(yīng)一個默認(rèn)表空間)。命令如下:
SQL>select table_name from user_tables where NUM_ROWS=0;
根據(jù)上述查詢,可以構(gòu)建針對空表分配空間的命令語句,如下:
SQL>Select ‘a(chǎn)lter table ‘||table_name||’ allocate extent;’ from user_tables where num_rows=0
批量輸出上述生成的SQL語句,建立C:\createsql.sql,其內(nèi)容如下:
set heading off;
set echo off;
set feedback off;
set termout on;
spool C:\allocate.sql;
Select ‘a(chǎn)lter table ‘||table_name||’ allocate extent;’ from user_tables where num_rows=0;
spool off;
執(zhí)行C:\createsql.sql,命令如下:
SQL>@ C:\createsql.sql;
執(zhí)行完畢后,得到C:\allocate.sql文件。
打開該文件會看到,已經(jīng)得到對所有空表分配空間的命令SQL語句。
3.4 執(zhí)行SQL命令,對空表分配空間:
執(zhí)行C:\allocate.sql,命令如下:
SQL>@ C:\allocate.sql;
執(zhí)行完畢,表已更改。
3.4 此時(shí)執(zhí)行exp命令,即可把包括空表在內(nèi)的滾搭所有表,正常導(dǎo)出。
另外:Oracle11g中,對密碼是大小寫敏感的,即密碼中的字母是區(qū)分大小寫的。
在Oracle10g中及以前,密碼中的字母大小寫無所謂。
1 將數(shù)據(jù)庫TEST完全導(dǎo)出,用扮兆迅戶名system 密碼猜殲manager 導(dǎo)出到D:\daochu.dmp中
exp system/manager@TEST file=d:\daochu.dmp full=y
2 將數(shù)據(jù)庫中system用戶與sys用戶的表廳此導(dǎo)出
exp system/manager@TEST file=d:\daochu.dmp owner=(system,sys)
空表無法導(dǎo)入數(shù)據(jù)庫的介紹就聊到這里吧,感謝你花時(shí)間閱讀本站內(nèi)容,更多關(guān)于空表無法導(dǎo)入數(shù)據(jù)庫,如何解決空表無法導(dǎo)入數(shù)據(jù)庫的問題?,oracle11g導(dǎo)出數(shù)據(jù)庫時(shí)怎么設(shè)置把空表也導(dǎo)出的信息別忘了在本站進(jìn)行查找喔。
創(chuàng)新互聯(lián)服務(wù)器托管擁有成都T3+級標(biāo)準(zhǔn)機(jī)房資源,具備完善的安防設(shè)施、三線及BGP網(wǎng)絡(luò)接入帶寬達(dá)10T,機(jī)柜接入千兆交換機(jī),能夠有效保證服務(wù)器托管業(yè)務(wù)安全、可靠、穩(wěn)定、高效運(yùn)行;創(chuàng)新互聯(lián)專注于成都服務(wù)器托管租用十余年,得到成都等地區(qū)行業(yè)客戶的一致認(rèn)可。
分享名稱:如何解決空表無法導(dǎo)入數(shù)據(jù)庫的問題?(空表無法導(dǎo)入數(shù)據(jù)庫)
分享地址:http://m.fisionsoft.com.cn/article/dposedc.html


咨詢
建站咨詢
