INSERT IGNORE和STRICT模式
当STRICT模式打开时,如果您尝试将无效值使用INSERT插入表中,MySQL将返回错误并中止语句。
但是,如果您使用INSERT IGNORE语句,MySQL将发出警告而不是错误。此外,在将值添加到表之前,它将尝试调整值以使其有效。
请考虑以下示例。
首先,我们创建一个的新表名为tokens:
CREATE TABLE tokens (
s VARCHAR(6)
);
在此表中,列s仅接受长度小于或等于6的字符串。
其次,将长度为7的字符串插入tokens表中。
INSERT INTO tokens VALUES('abcdefg');
MySQL发出以下错误,因为严格模式已启用。
ERROR 1406 (22001): Data too long for column 's' at row 1
第三,使用INSERT IGNORE语句插入相同的字符串。
INSERT IGNORE INTO tokens VALUES('abcdefg');
MySQL在将数据插入tokens表之前截断了数据。此外,它会发出警告。
+---------+------+----------------------------------------+
| Level | Code | Message |
+---------+------+----------------------------------------+
| Warning | 1265 | Data truncated for column 's' at row 1 |
+---------+------+----------------------------------------+
1 row in set (0.00 sec)
数据库结果
SELECT * FROM `tokens`;