《Mysql學(xué)習(xí)解析mysqldump的delay-insert選項(xiàng)》要點(diǎn):
本文介紹了Mysql學(xué)習(xí)解析mysqldump的delay-insert選項(xiàng),希望對(duì)您有用。如果有疑問(wèn),可以聯(lián)系我們。
如果用delayed-insert插入時(shí)不用鎖表.
./bin/mysqldump -uroot? -proot?? --lock-tables --extended-insert? --opt --quick? --master-data? test >/home/zhanghong/opdir/tmp/test.sql
--
LOCK TABLES `student` WRITE;
/*!40000 ALTER TABLE `student` DISABLE KEYS */;
INSERT INTO `student` VALUES (16,'hhah',3),(17,'22',3),(18,'ss',18);
/*!40000 ALTER TABLE `student` ENABLE KEYS */;
UNLOCK TABLES;MYSQL教程
使用delayed-insert不會(huì)鎖表
./bin/mysqldump -uroot? -proot?? --lock-tables --delayed-insert --extended-insert? --opt --quick? --master-data? test >/home/zhanghong/opdir/tmp/test.sql
/*!40000 ALTER TABLE `student` DISABLE KEYS */;
INSERT? DELAYED INTO `student` VALUES (16,'hhah',3),(17,'22',3),(18,'ss',18);
/*!40000 ALTER TABLE `student` ENABLE KEYS */;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;MYSQL教程
當(dāng)一個(gè)線程對(duì)一個(gè)表執(zhí)行DELAYED語(yǔ)句時(shí),會(huì)創(chuàng)建出一個(gè)管理程序線程(如果原來(lái)不存在),對(duì)用于本表的所有DELAYED語(yǔ)句進(jìn)行處理.
?線程會(huì)檢查是否管理程序以前已獲取了DELAYED鎖定;如果沒(méi)有獲取,則告知管理程序線程進(jìn)行此項(xiàng)操作. 即使其它線程對(duì)表有READ或WRITE鎖定,也可以獲得DELAYED鎖定.但是管理程序會(huì)等待所有的ALTER TABLE鎖定或FLUSH TABLE鎖定,以確保表的結(jié)構(gòu)是最新的.
?線程執(zhí)行INSERT語(yǔ)句,但不是把行寫入表中,而是把最終行的拷貝放入一個(gè)由管理程序線程管理的隊(duì)列中.線程會(huì)提示出現(xiàn)語(yǔ)法錯(cuò)誤,這些錯(cuò)誤會(huì)被報(bào)告到客戶端中.
?因?yàn)樵诓迦氩僮髦?INSERT返回已經(jīng)完成,所以客戶端不能從服務(wù)器處獲取重復(fù)記錄的數(shù)目,也不能獲取生成的行的AUTO_INCREMENT值.(如果您使用C API,則出于同樣的原因,mysql_info()函數(shù)不會(huì)返回任何有意義的東西.)
?當(dāng)行被插入表中時(shí),二進(jìn)制日志被管理程序線程更新.在多行插入情況下,當(dāng)?shù)谝恍斜徊迦霑r(shí),二進(jìn)制日志被更新.
MYSQL教程
轉(zhuǎn)載請(qǐng)注明本頁(yè)網(wǎng)址:
http://www.fzlkiss.com/jiaocheng/5136.html