今天,她給我打來電話
她:你明天陪我去趟醫院吧
我:怎麼了
她:我懷孕了,陪我去打胎
我:他的嗎
她:嗯
我心一沉,猶豫了片刻:生下來吧,我養!
她:他的孩子,你不配養!
我:我隨孩子姓
我們來看實際案例
表 tbl_batch_update
資料如下
執行效果如下
更嚴謹點
該如何實現? UPDATE 是不是也支援 ORDER BY ?
還真支援,如下所示
是不是有很多疑問:
相比於單表,貌似更簡單一些,不支援 ORDER BY 和 LIMIT
UPDATE 的修飾符之一,用來降低 SQL 的優先順序
當使用 LOW_PRIORITY 之後, UPDATE 的執行將會被延遲,直到沒有其他使用者端從表中讀取資料為止
但是,只有表級鎖的儲存引擎才支援 LOW_PRIORITY ,表級鎖的儲存引擎包括: MyISAM 、 MEMORY 和 MERGE ,所以最常用的 InnoDB 是不支援的
使用場景很少,混個眼熟就好
UPDATE 的修飾符之一,用來宣告 SQL 執行時發生錯誤的處理方式
如果沒有使用 IGNORE , UPDATE 執行時如果發生錯誤會中止,如下所示
LIMIT row_count 子句是行匹配限制。一旦找到滿足 WHERE 子句的 row_count 行,無論這些行是否實際更改,該語句都會立即停止
也是就說 LIMIT 限制的是 查階段 ,與 更新階段 沒有關係
還是有區別的
UPDATE 中 SET 子句的 value 是表示式,我們可以理解,這個 DEFAULT 是什麼意思?
我們先來看這麼一個問題,假設某列被宣告了 NOT NULL ,然而我們更新這列成 NULL
會發生什麼
我們看下 SQL_MODE ,執行 SELECT @@sql_mode; 得到結果
STRICT_TRANS_TABLES 表明啟動了嚴格模式,對 INSERT 和 UPDATE 語句的 value 管控會更嚴格
如果我們關閉嚴格模式,再看看執行結果
想必大家都很清楚
然而,以下 SQL 中的 name 列的值會是多少
我們來看下結果
name 的值是不是和預想的有點不一樣?
單表 UPDATE 的 SET 是從左往右進行的,然而多表 UPDATE 卻不是,多表 UPDATE 不能保證按任何特定順序進行
1、不管是 UPDATE ,還是 DELETE ,都有一個先查的過程,查到一行處理一行
2、 UPDATE 語法中的 LOW_PRIORITY 很少用, IGNORE 偶爾用, ORDER BY 和 LIMIT 相對會用的多一點,都混個眼熟
3、 sql_mode 是比較重要的知識點,推薦大家掌握;生產環境,強烈推薦開啟嚴格模式