我的编程空间,编程开发者的网络收藏夹
学习永远不晚

MySQL默认的sql mode怎么设置

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

MySQL默认的sql mode怎么设置

本文小编为大家详细介绍“MySQL默认的sql mode怎么设置”,内容详细,步骤清晰,细节处理妥当,希望这篇“MySQL默认的sql mode怎么设置”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

SQL mode

MySQL 5.7默认的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, and NO_ENGINE_SUBSTITUTION

这是MySQL官网的原文描述:“These modes were added to the default SQL mode in MySQL 5.7: The ONLY_FULL_GROUP_BY and STRICT_TRANS_TABLES modes were added in MySQL 5.7.5. The NO_AUTO_CREATE_USER mode was added in MySQL 5.7.7. The ERROR_FOR_DIVISION_BY_ZERO, NO_ZERO_DATE, and NO_ZERO_IN_DATE modes were added in MySQL 5.7.8. For additional discussion regarding these changes to the default SQL mode value, see SQL Mode Changes in MySQL 5.7.”

show sql mode

SELECT @@GLOBAL.sql_mode;SELECT @@SESSION.sql_mode;

set sql mode

设置为GLOBAL,那么所有的客户端都会受到影响,不过要拥有SUPER权限才能进行设置,也就是root用户,设置SESSION,那么受影响的只是当前的连接会话。

SET GLOBAL sql_mode ='ONLY_FULL_GROUP_BY'SET SESSION sql_mode ='ONLY_FULL_GROUP_BY'

下面我们就针对默认设置的这几种SQL mode进行详细的讲解,其他的哪些大家可以去官网参考。

docs.oracle.com/cd/E17952_0…

默认的SQL mode

ONLY_FULL_GROUP_BY

设置了这个值,如果使用GROUP BY,在SELECT后面出现的字段,在GROUP BY后面必须出现,不然报错如下

Expression #3 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'blue.shop.price' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

如下使用的是MySQL默认的sql_mode

ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION

那么下面的语句就会报错,因为GROUP BY后面只有一个字段,而SELECT * 是查出所有字段,所以就报错。

SELECT * FROM shop GROUP BY article

这样写就不会报错

SELECT * FROM shop GROUP BY article , dealer , price

不过我们不可能使用一个GROUP BY,后面还要跟着所有字段,显然不合理,那么就应该将其关闭,只需要将其去掉就行

STRICT_TRANS_TABLES

严格模式控制MySQL如何处理数据更改语句中的无效或缺失值,如INSERT或UPDATE。一个值可能因多种原因无效。例如,它可能具有列的错误数据类型,或者它可能超出了范围。如果要插入的新行不包含定义中没有显式DEFAULT子句的非null列的值,则该值缺失。

比如我们的某个字段设置不能为NULL,而我们插入的数据这个字段为NULL,那么就不能通过,就会报错如下:

1364 - Field 'dealer' doesn't have a default value

那么这个问题要怎么解决呢?我相信这个问题大家经常遇到,一般是我们在插入数据的时候实体的属性没有赋值,所以导致这个问题,所以我们会去检查代码,然后给属性赋值,另外一种做法就是去除STRICT_TRANS_TABLES,这样就不会进行校验,不过是极其不推荐这样做的,因为要我们要保证数据的完整性,所以必须在代码层面做好工作。

NO_ZERO_IN_DATE

NO_ZERO_IN_DATE模式会影响服务器是否允许年部分不为零但月或日部分为0的日期。(该模式影响日期,如“2010-00-01”或“2010-01-00”,但不影响“0000-00-00”。要控制服务器是否允许'0000-00-00',请使用NO_ZERO_DATE模式。)NO_ZERO_IN_DATE的效果还取决于是否启用严格SQL模式,如果没有启用严格SQL模式STRICT_TRANS_TABLES,那么启用了NO_ZERO_IN_DATE也没用。

如下SQL的日期月和日为0,启用了严格模式STRICT_TRANS_TABLES和NO_ZERO_IN_DATE,那么就会报错。

INSERT INTO `blue`.`shop` (`article`, `dealer` ,`price`,`date`) VALUES ('商品5', '5', 5.00, '2022-00-00');

1292 - Incorrect datetime value: '2022-00-00' for column 'date' at row 1

去除严格模式STRICT_TRANS_TABLESNO_ZERO_IN_DATE就不会报错。

NO_ZERO_DATE

上面的NO_ZERO_IN_DATE可以插入'0000-00-00',如果使用了严格模式STRICT_TRANS_TABLES和NO_ZERO_DATE,那么就不可以插入'0000-00-00'。

ERROR_FOR_DIVISION_BY_ZERO

对于INSERT或者UPDATE中,如果被除数为0,那么就会产生错误,数据无法插入,MOD(N,M)也是一样

INSERT INTO `blue`.`shop` (`article`,dealer ,`price`,`date`) VALUES ('商品5', '5', MOD(10,0), '0000-00-00');

对于SELECT,如果被除数为0,那么就会返回NULL,MOD(N,M)也一样。

SELECT price / 0  FROM shop

报错信息: 1365 - Division by 0

NO_AUTO_CREATE_USER

不能使用grant命令创建密码为空的用户。

NO_ENGINE_SUBSTITUTION

如果指定了NO_ENGINE_SUBSTITUTION,我们在创建表或者修改表的时候,如果去指定了不存在或者不支持的存储引擎,那么就会报错,无法创建和修改,如果没有配置NO_ENGINE_SUBSTITUTION,那么就会将我们指定的存储引擎(不支持或者不存在)的存储引擎替换为默认的存储引擎,MySQL5.7后的默认存储引擎为InnoDB,所以就会自动设置为InnoDB。

如下我们创建表,将存储引擎设置为一个不存在的InnoDBTest,因为我们去除了NO_ENGINE_SUBSTITUTION,所以不会报错,并且会替换成默认的InnoDB

创建sql

CREATE TABLE store ( `name` VARCHAR ( 255 ) DEFAULT NULL ) ENGINE = InnoDBTest

查看创建过程

SHOW CREATE TABLE store

结果

CREATE TABLE `store` (  `name` varchar(255) DEFAULT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci

MySQL存储引擎

SHOW ENGINES;

MySQL默认的sql mode怎么设置

读到这里,这篇“MySQL默认的sql mode怎么设置”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注编程网行业资讯频道。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

MySQL默认的sql mode怎么设置

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

MySQL默认的sql mode怎么设置

本文小编为大家详细介绍“MySQL默认的sql mode怎么设置”,内容详细,步骤清晰,细节处理妥当,希望这篇“MySQL默认的sql mode怎么设置”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。SQL mod
2023-07-05

MySQL怎么设置默认值

在MySQL中,可以通过以下两种方式设置默认值:在创建表时设置默认值:可以在CREATE TABLE语句中为列指定默认值。例如,创建一个名为"users"的表,并为"age"列设置默认值为25:CREATE TABLE users (
2023-10-24

mysql默认值怎么设置

mysql 提供设置列默认值的功能,确保数据完整性和一致性。可通过 alter table 语句设置默认值,支持常量、表达式、函数调用或空(null)值。默认值适用于新插入的行,不影响现有行且不能违反列数据类型的限制。MySQL 默认值设置
mysql默认值怎么设置
2024-05-16

sql怎么设置默认值为空

在SQL中,可以在创建表时设置列的默认值为空。具体方法如下:1. 在创建表时,在列的定义后面加上 `DEFAULT NULL`。示例代码:```sqlCREATE TABLE my_table (column1 INT DEFAULT NU
2023-08-25

sql中怎么设置字段的默认值

在 sql 中设置字段默认值的方法有:1. 使用 default 关键字后跟常量或表达式;2. 使用 constraint 关键字和 default 选项;3. 使用特定数据库的语法,如 mysql 的 current_timestamp(
sql中怎么设置字段的默认值
2024-05-15

mysql datetime默认值怎么设置

在 MySQL 中,可以通过以下方式为 DATETIME 列设置默认值:CREATE TABLE example_table (id INT AUTO_INCREMENT PRIMARY KEY,created_at DATETIME D
mysql datetime默认值怎么设置
2024-03-05

mysql怎么恢复默认设置

要恢复 mysql 的默认设置,可以执行以下步骤:停止 mysql 服务。重置 mysql 配置文件或创建新的配置文件。重启 mysql 服务。重置 mysql 数据库和用户。如何恢复 MySQL 的默认设置MySQL 数据库系统允许用户
mysql怎么恢复默认设置
2024-04-14

sql中怎么给某列设置默认值

在SQL中,可以使用DEFAULT关键字来为某列设置默认值。默认值可以是一个具体的值,也可以是一个表达式。以下是两种设置默认值的方法:1. 在创建表时设置默认值:```sqlCREATE TABLE table_name (column1
2023-08-23

SQL中select默认值怎么设置为空

在SQL查询中,可以使用COALESCE函数来设置默认值为空。例如:SELECT COALESCE(column_name, '') AS new_column_nameFROM table_name;在上面的示例中
SQL中select默认值怎么设置为空
2024-04-11

mysql中怎么设置默认值为1

在 mysql 中,使用 alter table 语句和 default 关键字,可以将列的默认值设置为 1。步骤如下:1. 确定表名和列名;2. 编写 alter table 语句;3. 执行语句。MySQL 中将默认值设置为 1在 M
mysql中怎么设置默认值为1
2024-05-01

MySQL中SQL Mode的查看与设置

MySQL中SQL Mode的查看与设置 MySQL可以运行在不同的模式下,而且可以在不同的场景下运行不同的模式,这主要取决于系统变量 sql_mode 的值。本文主要介绍一下这个值的查看与设置,主要在Mac系统下。对于每个模式的意义和作用,网上
MySQL中SQL Mode的查看与设置
2021-01-16

mysql中怎么设置默认值为0

在 mysql 中将列的默认值设置为 0 可以通过以下方法实现:创建表时使用 default 关键字,例如:create table user (id int default 0);修改表时使用 alter table 语句,例如:alte
mysql中怎么设置默认值为0
2024-05-01

MySQL怎么给数据设置默认值

在MySQL中,可以通过在创建表时指定默认值来为数据设置默认值。以下是设置默认值的方法:在创建表时指定默认值:CREATE TABLE table_name (column_name data_type DEFAULT default_va
MySQL怎么给数据设置默认值
2024-04-09

SQL数据库字段怎么设置默认值

在创建表时,可以使用DEFAULT关键字来为字段设置默认值。例如,以下是在SQL Server数据库中创建表并设置默认值的示例:CREATE TABLE employees (id INT PRIMARY KEY,name VARCHAR
2023-10-23

android怎么设置默认launcher

要设置Android的默认启动器(launcher),请按照以下步骤操作:1. 打开Android设备的“设置”应用程序。2. 滚动到“应用程序”或“应用管理器”选项,并点击打开。3. 在应用程序列表中,找到您想要设置为默认启动器的应用程序
2023-09-12

编程热搜

目录