MySQL是一款著名的關(guān)系型數(shù)據(jù)庫管理系統(tǒng),它具有開源、高效穩(wěn)定以及可擴(kuò)展等優(yōu)點(diǎn),得到了廣泛的應(yīng)用。在實(shí)際開發(fā)中,可能會(huì)遇到需要通過程序向MySQL數(shù)據(jù)庫中插入大量數(shù)據(jù)的情況。本文將介紹如何使用MySQL向一個(gè)表中插入3百萬條數(shù)據(jù)。
CREATE TABLE `test` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(10) DEFAULT '', `age` int(11) DEFAULT '0', `sex` tinyint(4) DEFAULT '0', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
以上代碼表示創(chuàng)建一個(gè)名為test的表,其中包括id、name、age和sex四個(gè)字段,其中id為主鍵,自增長(zhǎng)。接下來我們需要向這個(gè)表中插入大量數(shù)據(jù)。
INSERT INTO `test` (`name`,`age`,`sex`) VALUES ('name1',1,1),('name2',2,2),('name3',3,3),...,('name3000000',30,0);
這里需要注意的是,在實(shí)際的生產(chǎn)環(huán)境中,插入大量數(shù)據(jù)時(shí),我們需要使用批量插入的方式,避免頻繁的連接數(shù)據(jù)庫和寫入數(shù)據(jù)的操作,從而提高效率。以下是批量插入數(shù)據(jù)的示例代碼:
START TRANSACTION; INSERT INTO `test` (`name`,`age`,`sex`) VALUES ('name1',1,1),('name2',2,2),...,('name1000000',100,0); INSERT INTO `test` (`name`,`age`,`sex`) VALUES ('name1000001',101,1),('name1000002',102,2),...,('name2000000',200,0); INSERT INTO `test` (`name`,`age`,`sex`) VALUES ('name2000001',201,1),('name2000002',202,2),...,('name3000000',300,0); COMMIT;
以上代碼表示將3百萬條數(shù)據(jù)平均分成三次批量插入,每次向數(shù)據(jù)庫中插入1百萬條數(shù)據(jù)。在執(zhí)行時(shí),需要開啟事務(wù),避免數(shù)據(jù)插入過程中出現(xiàn)異常而導(dǎo)致數(shù)據(jù)不一致的問題。如果需要性能更好的插入方式,可以考慮使用LOAD DATA INFILE命令來讀取并插入大量數(shù)據(jù)。