[TOC]
sql_mode 設置為任意一種姑食,就被成為嚴格模式。
1. 嚴格模式
- STRICT_TRANS_TABLES
- STRICT_ALL_TABLES
2. SQL 語句
先創(chuàng)建兩張測試用的表:
create table test( id int(11) not null, col1 int(11) default null , primary key(id)) engine=Innodb default charset=utf8mb4;
create table test1( id int(11) not null, col1 int(11) default null , primary key(id)) engine=Myisam default charset=utf8mb4;
表結構查看:
mysql> show create table test\G
*************************** 1. row ***************************
Table: test
Create Table: CREATE TABLE `test` (
`id` int(11) NOT NULL,
`col1` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
1 row in set (0.00 sec)
mysql> show create table test1\G ·e
*************************** 1. row ***************************
Table: test1
Create Table: CREATE TABLE `test1` (
`id` int(11) NOT NULL,
`col1` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4
1 row in set (0.00 sec)
設置嚴格模式:
SET sql_mode='STRICT_TRANS_TABLES' 或者 SET sql_mod='STRICT_ALL_TABLES'
3. 區(qū)別☆
結果見圖
在不設置嚴格模式下茅坛,無論是 Innodb還是 Myisam都會在插入'a'到 int 類型的col1 字段時矢门,不會報錯且將'a'轉換為 數(shù)字0。
-
innodb 引擎:
a. 在執(zhí)行 insert 操作時,只要設置了嚴格模式任一種祟剔。無論插入單行還是多行隔躲,只要插入數(shù)據(jù)與字段類型不兼容,則 insert 操作失敗并回滾物延。
-
myisam 引擎:
STRICT_TRANS_TABLES:
不管是插入單行還是多行宣旱,如果某一行數(shù)據(jù)字段類型不匹配,則插入失敗叛薯。否則成功浑吟。
STRICT_ALL_TABLES
1. 如果首條數(shù)據(jù)可以插入成功,則后面數(shù)據(jù)會將字符串'a'轉換為 0 繼續(xù)插入 2. 如果首條數(shù)據(jù)插入失敗耗溜,則后續(xù)數(shù)據(jù)都無法插入组力。