今天忽然發現MySQL服務器升級以後sql_mode
變成寬鬆摸索了,危害以下:
mysql
set global sql_mode='strict_trans_tables'
(阿里服務器默認是:strict_trans_tables
)
sql
上面這種方式在MySQL重啓後就會失效,想要永久生效還得聯繫運維工程師,eg:
數據庫
PS:爲了防止再出現升級後SQL_Mode
改變,之後在配置文件中設置SQL_Mode
服務器
SQL Model
:定義MySQL對約束的響應行爲:
set [session] sql_model='xx_mode'
set @@session.sql_mode='xx_mode'
set global sql_mode='xx_mode'
set @@global.sql_mode='xx_mode'
vi /etc/my.cnf
,在[mysqld]
下添加sql_mode='xx'
,而後重啓數據庫set persist
命令將全局變量的修改持久化到配置文件中
/var/lib/mysql/mysqld-auto.cnf
配置文件中set persist log_timestamps='SYSTEM';
(須要root權限)strict_trans_tables
)
traditional
:使用傳統模型,不容許對非法值作插入操做strict_all_tables
:對全部表作嚴格約束strict_trans_tables
:對全部支持事物類型的表作嚴格約束:
no_engine_substitution
:建表的時候指定不可用存儲引擎會報錯only_full_group_by
:檢驗group by
語句的合法性
select count(url),name from file_records group by url;
select @@sql_mode