当前位置: 首页 > news >正文

MySQL SQL Mode

SQL Mode 是 MySQL 中一个重要的系统变量,它决定了 MySQL 应遵循的 SQL 语法规则和数据验证规则。


什么是 SQL Mode

SQL Mode 定义了 MySQL 应该支持的 SQL 语法以及执行数据验证的方式。通过设置不同的 SQL Mode,可以让 MySQL 在不同程度上兼容其他数据库系统,或者启用更严格的数据检查。


查看当前 SQL Mode

SELECT @@GLOBAL.sql_mode;   -- 查看全局 SQL Mode
SELECT @@SESSION.sql_mode;  -- 查看当前会话的 SQL Mode

常见的 SQL Mode 选项

  1. STRICT_TRANS_TABLES
    对事务表启用严格模式,非法数据值会导致错误而非警告

  2. STRICT_ALL_TABLES
    对所有表启用严格模式

  3. NO_ZERO_IN_DATE
    禁止日期中的月份或日部分为零(如 '2023-00-01')

  4. NO_ZERO_DATE
    禁止 '0000-00-00' 作为有效日期

  5. ERROR_FOR_DIVISION_BY_ZERO
    除零操作产生错误而非 NULL

  6. ONLY_FULL_GROUP_BY
    要求 GROUP BY 子句包含所有非聚合列

  7. ANSI_QUOTES
    将双引号视为标识符引用符(类似标准 SQL)

  8. PIPES_AS_CONCAT
    将 || 视为字符串连接符而非 OR 运算符

  9. NO_AUTO_CREATE_USER
    禁止 GRANT 自动创建用户

  10. NO_ENGINE_SUBSTITUTION
    当指定存储引擎不可用时产生错误而非自动替换


常用的 SQL Mode 组合

  1. 传统模式 (TRADITIONAL)
    等同于:STRICT_TRANS_TABLES, STRICT_ALL_TABLES, NO_ZERO_IN_DATE, NO_ZERO_DATE, ERROR_FOR_DIVISION_BY_ZERO, NO_AUTO_CREATE_USER, NO_ENGINE_SUBSTITUTION

  2. ANSI 模式
    等同于:REAL_AS_FLOAT, PIPES_AS_CONCAT, ANSI_QUOTES, IGNORE_SPACE

  3. 严格模式 (STRICT)
    等同于:STRICT_TRANS_TABLES, STRICT_ALL_TABLES


设置 SQL Mode

  1. 在配置文件中设置(永久生效):

    [mysqld]
    sql_mode=ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
  2. 动态设置(当前会话):

    SET SESSION sql_mode = 'mode1,mode2,...';
  3. 动态设置(全局):

    SET GLOBAL sql_mode = 'mode1,mode2,...';

SQL Mode 的重要性

正确设置 SQL Mode 可以:

  • 提高数据完整性

  • 确保与其他数据库系统的兼容性

  • 防止不良数据插入

  • 使 MySQL 行为更符合标准 SQL

在生产环境中,通常建议使用严格模式(TRADITIONAL)以确保数据质量。

http://www.dtcms.com/a/123265.html

相关文章:

  • Spring Boot MongoDB自定义连接池配置
  • 十分钟机器学习之--------------线性回归
  • 关于 Spring Boot 后端项目使用 Maven 打包命令、JAR/WAR 对比、内嵌服务器与第三方服务器对比,以及热部署配置的详细说明
  • 雷池WAF身份认证 - CAS
  • 数码视讯TR100系列/TR100-G1/TR100-G4/数码视讯F7-国科GK6323V100C芯片-刷机固件包
  • 如何优雅使用 ReentrantLock 进行加解锁:避免常见坑点,提高代码可维护性
  • ADI的BF561双核DSP怎么做开发,我来说一说(十一)NANDFLASH的读写
  • 十三届蓝桥杯Java省赛 B组(持续更新..)
  • YOLO 8 入坑(持续更新)
  • 【含文档+PPT+源码】基于Android家政服务系统的开发与实现
  • 【python】yield关键字的使用及执行步骤分析
  • HTTP 1.0 时代,第一次优化
  • antv x6使用(支持节点排序、新增节点、编辑节点、删除节点、选中节点)
  • ThinkpPHP生成二维码
  • 【C++初阶】--- vector容器功能模拟实现
  • STM32硬件IIC+DMA驱动OLED显示——释放CPU资源,提升实时性
  • Keras简介
  • AI 赋能 DBA:如何用 DeepSeek 等大模型简化数据库管理工作
  • 【每日随笔】丛林法则 ( 弱肉强食 | 适者生存 | 资源有限稀缺 | 没有道德约束 | 自发性与无序性 | 丛林法则映射 - 资源分配 与 社会分层 )
  • C++23新特性:显式对象形参与显式对象成员函数
  • Unity AssetBundle依赖树可视化分析工具开发指南
  • BeagleBone Black笔记
  • 传感器篇(二)——激光雷达
  • Prompt-to-prompt image editing with cross attention control
  • 网络通讯协议UDP转发TCP工具_UdpToTcpRelay_双向版
  • 蓝桥杯c ++笔记(含算法 贪心+动态规划+dp+进制转化+便利等)
  • 食堂采购系统源码模块化开发详解:管理、订单、入库、对账一体化方案
  • 游戏引擎学习第214天
  • module错误集合
  • SAP Business One系统标准功能之外的不允许负库存控制