mysql 開發基礎系列22 SQL Model

来源:https://www.cnblogs.com/MrHSR/archive/2018/07/16/9317979.html
-Advertisement-
Play Games

一.概述 與其它資料庫不同,mysql 可以運行不同的sql model 下, sql model 定義了mysql應用支持的sql語法,數據校驗等,這樣更容易在不同的環境中使用mysql。 sql model 常用來解決下麵幾類問題 (1) 通過設置sql mode, 可以完成不同嚴格程度的數據校 ...


一.概述

  與其它資料庫不同,mysql 可以運行不同的sql model 下, sql model 定義了mysql應用支持的sql語法,數據校驗等,這樣更容易在不同的環境中使用mysql。
  sql model 常用來解決下麵幾類問題

  (1) 通過設置sql mode, 可以完成不同嚴格程度的數據校驗,有效地保障數據準備性。
  (2) 通過設置sql model 為ansi 模式,來保證大多數sql符合標準的sql語法,這樣應用在不同資料庫之間進行遷移時,則不需要對業務sql 進行較大的修改。
  (3) 在不同資料庫之間進行數據遷移之前,通過設置SQL Mode 可以使MySQL 上的數據更方便地遷移到目標資料庫中。

  1. 演示sql model 嚴格模式

  從mysql 5.7 開始,  預設是嚴格模式, mysql 開始嚴格遵從SQL 92規範。通過strict_trans_tables嚴格模式實現了數據的嚴格校驗。 使錯誤數據不能插入表中, 從而保證了數據的準確性。

-- 查看sql model 模式
  SELECT @@sql_mode;

  

--  下麵可將sql model設置為嚴格模式
set session sql_mode='STRICT_TRANS_TABLES';
--  新建表設置address為10個長度
CREATE TABLE test_sqlmode
(
   address VARCHAR(10) 
)
-- 插入超過長度
INSERT INTO test_sqlmode VALUES('123456789123');

  通過下圖可以看出, 嚴格模式下超出數據 插入將報錯。 如果不是嚴格模式,則會報warning 警告 並截取字元。

  

  2. sql mode 組合模式

    組合模式類似於角色和許可權的關係。這樣當實際應用時,只需要設置一個模式組合,就可以設置很多的原子模式,大大方便了用戶的工作。

ANSI模式

寬鬆模式,對插入數據進行校驗,如果不符合定義類型或長度,對數據類型調整或截斷保存,報warning警告。

等同於REAL_AS_FLOAT、PIPES_AS_CONCAT、ANSI_QUOTES、IGNORE_SPACE 和ANSI

組合模式

traditional 模式

嚴格模式,當向mysql資料庫插入數據時,進行數據的嚴格校驗,保證錯誤數據不能插入,報error錯誤。用於事務時,會進行事務的回滾。

TRADITIONAL 模式等同於STRICT_TRANS_TABLES、STRICT_ALL_TABLES、

NO_ZERO_IN_DATE、NO_ZERO_DATE、ERROR_FOR_DIVISION_BY_ZERO、TRADITIONAL

和NO_AUTO_CREATE_USER 組合模式

STRICT_TRANS_TABLES模式

嚴格模式,進行數據的嚴格校驗,錯誤數據不能插入,報error錯誤。

例如:不允許非法日期,也不允許超過欄位長度的值插入欄位中,對於插入不正確的值給出錯誤而不是警告

 

二. sql model 遷移如何使用

    如果mysql 與其它異構資料庫之間有數據遷移的需求時,那麼mysql中提供的資料庫組合模式則會對數據遷移過程會有所幫助。對導出數據更容易導入目標。

  在數據遷移過程中,可以設置SQL Mode 為NO_TABLE_OPTIONS 模式,這樣將去掉show create table 中的“engine”關鍵字,獲得通用的建表腳本。

-- 查看表有 engine 引擎
SHOW CREATE TABLE test_sqlmode;

-- 將所有表去掉engine 引擎。變為通用表
-- 修改 當前會話下的sql model
SET SESSION sql_mode='NO_TABLE_OPTIONS'


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 現象: 由於辦公室搬遷,機房中的測試伺服器有段時間不用,關機了。起來後,flannel 的IP段變了,遂想通過修改docker0的IP地址來使集群正常工作起來。 但是,無論修改/etc/default/docker中的,DOCKER_OPTS="--bip=X.X.X.X24 "後重啟docker, ...
  • "linuxer" 案例 比如內核的如下commit引入了一個嚴重的安全漏洞(編號CVE 2017 5123): 危害 一個攻擊案例可以參考: "freebuf" 《Linux內核Waitid系統調用本地提權漏洞(CVE 2017 5123)的分析與利用》 修複 而內核的這個commit對其進行了修 ...
  • 使用U盤製作一個PE系統,這裡推薦老毛桃或者大白菜;開機進入Bios,選擇U盤啟動;進入U盤啟動畫面後,選擇一個PE系統;進入PE系統後,我們去本機系統盤,將 C:/Windows/System32/osk.exe 做個備份;將同路徑下的cmd.exe重命名為osk.exe;重啟,進入Windows ...
  • 幾句話 很久之前就接觸到vim,初學那陣覺得vim很酷炫,但確實對新手不是很友好。我也就簡單看了下基本操作就上手了,但又不是長期在vim下工作,這就導致了每一次重新使用vim都要再去回溫下基本操作,很是難受,所以就趁這個機會把基本操作都記錄下來,一來可以當做自己的筆記,二來希望可以幫到同樣和我一樣用 ...
  • 占座 ...
  • 轉自:http://www.maomao365.com/?p=5416 摘要: order by 1,2 的含義是對錶的第一列 按照從小到大的順序進行排列 然後再對第二列按照從小到大的順序進行排列 order by 1,2 等同於 order by [第一列],[第二列] 詳見以下舉例說明 ...
  • 鎖的定義,游標的新建和應用,存儲過程的新建,查看,修改和刪除 ...
  • 當同時排序又分頁時,如果排序的欄位X不是唯一欄位,當多個記錄的X欄位有同一個值時順序是 隨機 的。 這個有可能造成分頁時數據重覆的問題。某一頁又把上一頁的數據查出來了,其實資料庫只有一條記錄。 解決辦法: 如果排序欄位不是唯一的,則增加個二級排序,二級排序的欄位要是 唯一 的(例如id)。 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...