mysql 开发基础系列22 SQL Model(带迁移事项)
一.概述
與其它數(shù)據(jù)庫不同,mysql 可以運(yùn)行不同的sql model 下, sql model 定義了mysql應(yīng)用支持的sql語法,數(shù)據(jù)校驗(yàn)等,這樣更容易在不同的環(huán)境中使用mysql。
sql model 常用來解決下面幾類問題:
(1) 通過設(shè)置sql mode, 可以完成不同嚴(yán)格程度的數(shù)據(jù)校驗(yàn),有效地保障數(shù)據(jù)準(zhǔn)備性。
(2) 通過設(shè)置sql model 為ansi 模式,來保證大多數(shù)sql符合標(biāo)準(zhǔn)的sql語法,這樣應(yīng)用在不同數(shù)據(jù)庫之間進(jìn)行遷移時(shí),則不需要對業(yè)務(wù)sql 進(jìn)行較大的修改。
(3) 在不同數(shù)據(jù)庫之間進(jìn)行數(shù)據(jù)遷移之前,通過設(shè)置SQL Mode 可以使MySQL 上的數(shù)據(jù)更方便地遷移到目標(biāo)數(shù)據(jù)庫中。
1. 演示sql model 嚴(yán)格模式
從mysql 5.7 開始, ?默認(rèn)是嚴(yán)格模式, mysql 開始嚴(yán)格遵從SQL 92規(guī)范。通過strict_trans_tables嚴(yán)格模式實(shí)現(xiàn)了數(shù)據(jù)的嚴(yán)格校驗(yàn)。 使錯(cuò)誤數(shù)據(jù)不能插入表中, 從而保證了數(shù)據(jù)的準(zhǔn)確性。
-- 查看sql model 模式SELECT @@sql_mode;-- 下面可將sql model設(shè)置為嚴(yán)格模式 set session sql_mode='STRICT_TRANS_TABLES'; -- 新建表設(shè)置address為10個(gè)長度 CREATE TABLE test_sqlmode (address VARCHAR(10) ) -- 插入超過長度 INSERT INTO test_sqlmode VALUES('123456789123');
通過下圖可以看出, 嚴(yán)格模式下超出數(shù)據(jù) 插入將報(bào)錯(cuò)。 如果不是嚴(yán)格模式,則會報(bào)warning 警告 并截取字符。
2.?sql mode 組合模式
組合模式類似于角色和權(quán)限的關(guān)系。這樣當(dāng)實(shí)際應(yīng)用時(shí),只需要設(shè)置一個(gè)模式組合,就可以設(shè)置很多的原子模式,大大方便了用戶的工作。
| ANSI模式 | 寬松模式,對插入數(shù)據(jù)進(jìn)行校驗(yàn),如果不符合定義類型或長度,對數(shù)據(jù)類型調(diào)整或截?cái)啾4?#xff0c;報(bào)warning警告。 等同于REAL_AS_FLOAT、PIPES_AS_CONCAT、ANSI_QUOTES、IGNORE_SPACE 和ANSI 組合模式 |
| traditional 模式 | 嚴(yán)格模式,當(dāng)向mysql數(shù)據(jù)庫插入數(shù)據(jù)時(shí),進(jìn)行數(shù)據(jù)的嚴(yán)格校驗(yàn),保證錯(cuò)誤數(shù)據(jù)不能插入,報(bào)error錯(cuò)誤。用于事務(wù)時(shí),會進(jìn)行事務(wù)的回滾。 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模式 | 嚴(yán)格模式,進(jìn)行數(shù)據(jù)的嚴(yán)格校驗(yàn),錯(cuò)誤數(shù)據(jù)不能插入,報(bào)error錯(cuò)誤。 例如:不允許非法日期,也不允許超過字段長度的值插入字段中,對于插入不正確的值給出錯(cuò)誤而不是警告 |
?
二. sql model 遷移如何使用
如果mysql 與其它異構(gòu)數(shù)據(jù)庫之間有數(shù)據(jù)遷移的需求時(shí),那么mysql中提供的數(shù)據(jù)庫組合模式則會對數(shù)據(jù)遷移過程會有所幫助。對導(dǎo)出數(shù)據(jù)更容易導(dǎo)入目標(biāo)。
在數(shù)據(jù)遷移過程中,可以設(shè)置SQL Mode 為NO_TABLE_OPTIONS 模式,這樣將去掉show create table 中的“engine”關(guān)鍵字,獲得通用的建表腳本。
-- 查看表有 engine 引擎 SHOW CREATE TABLE test_sqlmode; -- 將所有表去掉engine 引擎。變?yōu)橥ㄓ帽?/span> -- 修改 當(dāng)前會話下的sql model SET SESSION sql_mode='NO_TABLE_OPTIONS'轉(zhuǎn)載于:https://www.cnblogs.com/MrHSR/p/9317979.html
總結(jié)
以上是生活随笔為你收集整理的mysql 开发基础系列22 SQL Model(带迁移事项)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: matlab复杂网络上的博弈演化,科学网
- 下一篇: Laravel5.5 MySQL配置、读