今天突然发现MySQL服务器的sql_mode是默认的模式,危害如下:
解决:set global sql_mode='strict_trans_tables'(阿里服务器默认是:strict_trans_tables
)
SQL Model
:定义MySQL对约束的响应行为:- 全局修改:需要有权限,并且不会立即生效,对以后新建的会话生效(从全局继承的)
- mysql>
set global sql_mode='xx_mode'
- mysql>
set @@global.sql_mode='xx_mode'
- mysql>
- 会话修改:
- mysql>
set [session] sql_model='xx_mode'
- mysql>
set @@session.sql_mode='xx_mode'
- mysql>
- 常用mode:(阿里服务器默认是:
strict_trans_tables
)traditional
:使用传统模型,不允许对非法值做插入操作strict_trans_tables
:对所有支持事物类型的表做严格约束strict_all_tables
:对所有表做严格约束- 查询当前设置:
select @@sql_mode
- 全局修改:需要有权限,并且不会立即生效,对以后新建的会话生效(从全局继承的)