即使没有必要的字段,MySQL也允许插入

时间:2016-01-13 12:24:26

标签: mysql insert-into notnull required-field

我为用户提供了一个数据库表,其设置类似于:

+---------------------+--------------+------+-----+------------+----------------+
| Field               | Type         | Null | Key | Default    | Extra          |
+---------------------+--------------+------+-----+------------+----------------+
| id_user             | int(5)       | NO   | PRI | NULL       | auto_increment |
| login               | varchar(50)  | NO   |     |            |                |
| password            | varchar(50)  | NO   |     |            |                |
| address             | varchar(255) | NO   |     | NULL       |                |
+---------------------+--------------+------+-----+------------+----------------+

由于地址字段设置为非空且默认值为null,这应该有效地使地址字段成为必需,对吗?

但是当我执行如下查询时:

INSERT INTO mydatabase.users
SET
    mydatabase.users.login='test_username',
    mydatabase.users.password='test_password'

它成功地保存了用户而没有抱怨地址字段,该字段被设置为空白区域。

可能导致这种情况的原因是什么?我希望在这种情况下出错。我已经尝试使用MySQL 5.5和5.6。

1 个答案:

答案 0 :(得分:3)

配置文件中未启用

Strict SQL mode,因此mysql放宽了对数据插入的某些控制:

  

严格模式控制MySQL如何处理数据更改语句(如INSERT或UPDATE)中的无效或缺失值。由于多种原因,值可能无效。例如,列可能具有错误的数据类型,或者可能超出范围。当要插入的新行不包含其定义中没有显式DEFAULT子句的非NULL列的值时,缺少值。 (对于NULL列,如果缺少值,则插入NULL。)严格模式也会影响DDL语句,例如CREATE TABLE。