06|SQL Mode对程序有怎样的影响?
非严格模式
- 深入了解
- 翻译
- 解释
- 总结
1. SQL Mode对MySQL中的语法支持和数据写入校验规则产生影响,早期MySQL使用非严格模式,但从MySQL 5.7开始默认开启严格模式。 2. 在非严格模式下,MySQL允许执行不符合SQL标准的语句,而在严格模式下,会对数据写入时的合法性进行严格校验。 3. SQL Mode中的选项包括ONLY_FULL_GROUP_BY和STRICT_TRANS_TABLES,设置ONLY_FULL_GROUP_BY后,对有GROUP BY的SQL,SELECT的字段要么也出现在GROUP BY中,要么使用聚合函数,否则SQL执行会报错。 4. 设置STRICT_TRANS_TABLES后,在数据写入时,如果数据不符合字段定义,比如字符串超出长度,或者数值类型数据超出范围时,SQL会报错。 5. SQL Mode的默认设置可以通过设置sql_mode=default来获取,其中包括了一系列选项,如ONLY_FULL_GROUP_BY、STRICT_TRANS_TABLES等。 6. SQL Mode的设置对数据库的语法支持和数据写入校验规则产生重要影响,需要根据实际需求进行合理设置。 7. 在MySQL 5.6及更早版本中,默认使用非严格模式,而在MySQL 5.7及之后版本,默认开启严格模式,这可能导致原先正常的应用程序无法正常运行。 8. SQL Mode的设置对数据库的数据完整性和合法性起到重要作用,需要根据具体情况进行合理选择和配置。 9. SQL Mode的各种选项对数据库的数据写入和查询操作产生重要影响,需要根据实际情况进行灵活配置。 10. 设置SQL_MODE可能会使原先能执行的SQL无法执行,也可能影响数据写入操作,因此在生产环境修改这个参数前,需要对应用进行完整的测试验证。
《MySQL 运维实战课》,新⼈⾸单¥59
全部留言(1)
- 最新
- 精选
- 123思考题: 首先查看数据库的版本是否一致,mysql在5.7默认开启严格模式,通过show variables like 'innodb_strict_mode'查看,当前情况下,主库是在非严格模式下,而备库在严格模式下 解决方案: 1、设置备库为非严格模式,除非是业务需求,尽量不要使用非严格模式 2、修改主库表的DDL,开启严格模式(在业务改动不大的情况下),让备库忽略该GTID,不执行该语句,后由主库重新创建后会自动同步 另外,请教下老师,非严格模式使用会多吗,我们生产要求必须要使用严格模式
作者回复: 思考题里那个问题就是参数innodb_strict_mode在主备库不一样引起的。 一般都建议用严格模式,这样能尽早暴露错误。warning很多时候都会被忽略。
2024-08-30归属地:新加坡