Insert

如果在大插入期間失去連接會發生什麼?

  • February 18, 2020

當你在一個巨大的插入過程中失去與數據庫的連接時會發生什麼。會插入部分數據嗎?什麼都不會插入嗎?這是什麼原因?

我正在描繪的範例語句是:

INSERT INTO user 
 (variable) 
values 
 (?),
 (?),
 (?),
 ...,
 (?)

我對 MySQL 或 SQL Server 特別感興趣。

對於 ACID 的 SQL 數據庫 - A 代表 Atomic,表示將發生所有事務或不發生任何事務。當載入了部分數據並且連接停止時,在 ACID 約束中別無選擇,只能刪除所有數據。

對於 MySQL Innodb(預設)是 ACID,但有一個 MyISAM 引擎不是。

對於 SQL Server,DML 命令(如 INSERT)始終受事務保護。如果在處理該命令時出現問題,則整個事務將回滾。全有或全無。

請注意,這裡與各種批量載入選項有所不同。其中包括 BULK INSERT 命令、BCP.EXE、SqlBulkCopy 類和 SSIS。對於此類工具,您可以定義每個事務的行數。例如,如果您為每個事務指定 10,000 行,並且在 54,321 行之後出現問題,那麼您將送出 50,000 行並回滾 4,321 行。

引用自:https://dba.stackexchange.com/questions/259867