日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

今天就討論以下幾個數據批量操作的問題

1. 在一個批量操作的sql中,如果一個失敗,其他的會怎么樣呢

2. 對于大數據表,線上更新而不影響用戶使用

3. 事務與鎖的關系

建立測試表member表

MySQL批量操作語句,會部分成功嗎?

表結構

1. 在一個批量操作的sql中,如果一個失敗,其他的會怎么樣呢

第一種情況:先看一下,多條語句沒有事務控制的代碼

$conn = Yii::$App->db1;
    $sql1 = 'insert into member (name,password) values ("yang","vincent")';
	$sql2 = 'insert into member (name,password,gender) values ("yang","vincent1")';
	    $conn->createCommand($sql1)->execute();
	    $conn->createCommand($sql2)->execute();

執行結果怎么呢 ,下面我們來看看,結果大家也猜得到,報錯了

SQLSTATE[21S01]: Insert value list does not match column list: 1136 Column count doesn't match value count at row.....

字段不匹配,但是,數據表第一條已經插入成功,只是第二條語句出錯了!

第二種情況:多條語句,有事務控制

測試代碼如下:

$conn = Yii::$app->db1;
		$transaction = $conn->beginTransaction();
		try {
			$sql1 = 'insert into member (name,password) values ("yang","vincent")';
			$sql2 = 'insert into member (name,password,gender) values ("yang","vincent1")';
		    $conn->createCommand($sql1)->execute();
		    $conn->createCommand($sql2)->execute();
		    // ... executing other SQL statements ...
		    $transaction->commit();
		} catch (Exception $e) {
		    $transaction->rollBack();
		}

結果同樣出錯,錯誤信息和第一種情況一致,但是這次數據表一條記錄也沒有,不難理解,我們都知道,在一個事務中,多個操作,要么都失敗,要么都成功。

第三種情況:一條語句,批量插入,有事務控制

測試代碼如下:

$sql1 = 'insert into member (name,password) values ("yang","vincent"),("yang","lily",1)';
		    $conn->createCommand($sql1)->execute();
		    $transaction->commit();

執行代碼出錯,錯誤和上面情況一致,數據表一條也沒有寫入成功,所以批量操作的sql語句是原子性的操作,相當于事務 控制。

總結:

在進行批量插入時,要么都成功,要么都失敗,比如:在一個有唯一性索引的表批量插入時,只要有一個重復,整個操作都會失敗,并不是部分成功,部分失敗,在實際開發中要注意!

2. 大數據表,如何做到線上更新而不影響用戶使用

我們的應用上線以后,功能在不停的迭代更新,數據表難免會修改,當數據量很大時,進行table更新,如修改表結構、增加字段、修改字段值、加索引,這些操作肯定會對用戶有影響的。

比如增加索引,一張表千萬數量級,可能會卡住幾十分鐘或長達幾個小時。

常用的方法是:

在測試環境測試修改的影響,如果是幾分鐘,可以直接在線修改,如果時間長則不行

選一個用戶使用最少的時間,停服更新;這應該是最常用的方法,這也是程序猿苦逼的原因,經常要熬夜功能上線。

業界的其他方案,也只有大公司能玩得轉:

fecebook自己開發的工具,地址

http://bazaar.launchpad.net/~MySQLatfacebook/mysqlatfacebook/tools/files/head:/osc

也是8年前的版本,沒有更新過了,只適用于mysql5.0,5.1 ,用php寫的腳步,有興趣的可以看一下,也許有借鑒意義;

像BAT這些大公司內部應該都有自己研發的工具,畢竟他們更有這些需求,技術大牛也多!

在線表結構的在線修改是一個業界難題!

3. 事務與鎖的關系

事務中會不會加鎖?

事務加不加鎖,和事務的隔離級別有關,隔離級別中的可重復讀和串行化,本身事務已經完全隔離了,所以事務內操作就沒必要加鎖了。

事務本身并不加鎖,加不加鎖取決于執行的語句,一旦加鎖直到事務提交或 回滾才會釋放。

事務的作用是什么?

事務保證操作的完整性,如訂單和庫存的操作,但不保證數據的正確性,如 update goods set num=num-1 where goods_id=1,所以這樣不能保證超賣情況!還需要鎖機制。

鎖的作用是什么?

鎖是避免并發的操作導致數據破壞,導致結果不是預期,常用在一些數據敏感的場合!

分享到:
標簽:批量 操作 MySQL
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定