mysql 修改 sql model_mysql 开发基础系列22 SQL Model(带迁移事项)

本文介绍了MySQL中的SQL Mode,包括其作用、严格模式的设置与演示,以及在数据迁移过程中的应用。严格模式确保数据准确性和事务一致性,组合模式提供多种校验选择。在数据迁移场景下,SQL Mode的特定设置有助于生成通用的建表脚本。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.概述

与其它数据库不同,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;

42bb1b9477141cdfe5e60807767f8f8c.png

--下面可将sql model设置为严格模式

set session sql_mode='STRICT_TRANS_TABLES';

--新建表设置address为10个长度

CREATE TABLEtest_sqlmode

(

addressVARCHAR(10)

)--插入超过长度

INSERT INTO test_sqlmode VALUES('123456789123');

通过下图可以看出, 严格模式下超出数据 插入将报错。 如果不是严格模式,则会报warning 警告 并截取字符。

8e110cb53fbb97b885422e35ee1b2365.png

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中提供的数据库组合模式则会对数据迁移过程会有所帮助。对导出数据更容易导入目标。

3dd45fb1c8a3dbbb920b46adc37fec29.png

在数据迁移过程中,可以设置SQL Mode 为NO_TABLE_OPTIONS 模式,这样将去掉show create table 中的“engine”关键字,获得通用的建表脚本。

--查看表有 engine 引擎

SHOW CREATE TABLE test_sqlmode;

19e4e56bcd84912581516d121eee6bdc.png

--将所有表去掉engine 引擎。变为通用表--修改 当前会话下的sql model

SET SESSION sql_mode='NO_TABLE_OPTIONS'

fe6c294622ed015bdcdc43245de607b0.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值