日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql sql_mode 详解_五、被 MySQL sql_mode 深深伤害( 下 )

發布時間:2024/3/26 数据库 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql sql_mode 详解_五、被 MySQL sql_mode 深深伤害( 下 ) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

當我們要重新設置 MySQL sql_mode 的時候,可能看到那一串長長的列表就會患頭痛病,這哪個是哪個啊,哪個是重要的啊?哪個是可以缺少的啊?

我們就會想要呼喚一個簡單的版本,要是有三個特殊的 sql_mode 分別表示寬松、標準、嚴格那該多好,出現 sql_mode 問題的時候就先設置寬松版本

MySQL 也考慮到了這個問題,所以在 5.0 以后的版本中新增加了三個特殊的 sql_mode

sql_mode

說明

ANSI

寬松模式,對于大部分的 sql 語句按照古老的模式執行成功,但會拋出一個警告

TRADITIONAL

算是標準模式吧,這種模式下有些 sql 語句就會直接出錯

STRICT_TRANS_TABLES

嚴格模式,這種模式下只要一條 SQL 語句出錯就會直接中斷事務的執行

而設置這三種模式的語法也很簡單

1、設置當前連接的 sql_mode

set @@sql_mode=TRADITIONAL;

set @@sql_mode=STRICT_TRANS_TABLES;

set @@sql_mode=ANSI;

2、設置全局的 sql_mode

set global @@sql_mode=TRADITIONAL;

set global @@sql_mode=STRICT_TRANS_TABLES;

set global @@sql_mode=ANSI;

3、持久化設置,也就是更改 my.cnf 文件

[mysqlnd]

sql_mode=TRADITIONAL

sql_mode=STRICT_TRANS_TABLES

sql_mode=ANSI

對了,三者你只能選擇一個

對于我們前面提到的 timestamp 默認值 0 錯誤等,可以直接使用 ANSI 模式,這樣便可以插入數據,而對于除數為0的結果的字段值,數據庫將會用 NULL 值代替

剛剛我們不是說了這三種特殊的模式是一些其它模式的結合體嗎?我們下面就來看看它們包括哪些具體的 sql_mode

1、ANSI

相當于

REAL_AS_FLOAT

PIPES_AS_CONCAT

ANSI_QUOTES

IGNORE_SPACE

ONLY_FULL_GROUP_BY

注意,還是包含了 ONLY_FULL_GROUP_BY

2、STRICT_TRANS_TABLES

它不是一個結合體,而是一個單獨體,在這個模式下,會進行數據的嚴格校驗,錯誤數據不能插入,報 error 錯誤

如果不能將給定的值插入到事務表中,則放棄該語句

對于非事務表,如果值出現在單行語句或多行語句的第1行,則放棄該語句

3、TRADITIONAL

相當于

STRICT_TRANS_TABLES

STRICT_ALL_TABLES

NO_ZERO_IN_DATE

NO_ZERO_DATE

ERROR_FOR_DIVISION_BY_ZERO

NO_ENGINE_SUBSTITUTION

注意,包含了 STRICT_TRANS_TABLES

時間有限,這一章節我們先講到這里,我覺得 sql_mode 還是看官方的文檔來的最好

干貨推薦

附錄:MySQL 拾遺:系列文章

總結

以上是生活随笔為你收集整理的mysql sql_mode 详解_五、被 MySQL sql_mode 深深伤害( 下 )的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。